variables:
  GIT_SUBMODULE_STRATEGY: recursive
  STACKNAME: _reporef$CI_COMMIT_REF_NAME
  NECTAR_ALLOCATION: HPCCICD

stages:
#  - integration_test_downstream # working but unwanted here
#  - trigger_pipeline_in_B   # working but unwanted here
  - yamllint
  - heat
  - ansible_create_cluster_stage
  - push_button_spawn_cluster
#  - e2e
  - tests
  - clean # only on master

#trigger_pipeline_in_B:
#  stage: integration_test_downstream
#  tags: 
#  - ansible
#  script:
#  - "curl --request POST --form token=${CI_JOB_TOKEN} --form ref=master https://gitlab.erc.monash.edu.au/api/v4/projects/1085/trigger/pipeline"  # ID is from pysshauthz

# heat_test:
#   stage: heat
#   allow_failure: false
#   tags:
#   - heat
#   before_script:
#     - source ./$NECTAR_ALLOCATION-openrc.sh
#     - export HEAT_TEST_STACKNAME=_TESTING_HEAT
#     - bash -x ./heat/heatcicdwrapper.sh delete_if_exists $HEAT_TEST_STACKNAME
#     - sleep 60
#   script:
#     - echo "heat_test stage"
#     - source ./$NECTAR_ALLOCATION-openrc.sh
#     - bash -x ./heat/heatcicdwrapper.sh create $HEAT_TEST_STACKNAME
#     - openstack stack list
#     - bash -x ./heat/heatcicdwrapper.sh update $HEAT_TEST_STACKNAME
#     - openstack stack list
#     - bash -x ./heat/heatcicdwrapper.sh delete_if_exists $HEAT_TEST_STACKNAME
#     - openstack stack list
#   after_script:
#     - sleep 20 # artifically wait a bit to make sure it is really dead
#   only:
#     changes: #https://docs.gitlab.com/ee/ci/yaml/#onlychangesexceptchanges
#     - "heat/heatcicdwrapper.sh"
#     - "heat/*.{yml,yaml}"
#     - schedules
#     #- CICD/.gitlab-ci.yml

yamllint:
  stage: yamllint
  allow_failure: true
  tags: 
  - yamllint
  script:
    - echo "stage yamllint"
    - cd CICD
    - ansible-lint -c .yamllintconf.yaml -x ANSIBLE0002 master_playbook.yml
    - yamllint -c ./.yamllintheat.yaml ./heat

build_cluster_cicd:
  stage: heat
  allow_failure: false
  tags:
  - heat
  before_script:
    - echo "$GC_KEY" > gc_key.pem
    - chmod 400 gc_key.pem
    - echo "$HPCCICD_openrc" > ./$NECTAR_ALLOCATION-openrc.sh
  script:
    - echo "heat stage"
    - source ./$NECTAR_ALLOCATION-openrc.sh
    - openstack stack list
    - bash -x ./CICD/heat/heatcicdwrapper.sh create_or_update $STACKNAME
  after_script:
    - sleep 20 # artifically wait a bit to give the nodes time to boot
#  only:
#    changes: #https://docs.gitlab.com/ee/ci/yaml/#onlychangesexceptchanges
#    - "heat/*HOT*.yaml"
#    - schedules
#    - ./.gitlab-ci.yml

ansible_create_cluster_stage:
  stage: ansible_create_cluster_stage
  tags: 
  - ansible
  before_script:
    - echo "$GC_KEY" > gc_key.pem
    - chmod 400 gc_key.pem
    - echo "$HPCCICD_openrc" > ./$NECTAR_ALLOCATION-openrc.sh
  script:
    - echo "ansible_create_cluster_stage"
    - bash -x ./CICD/ansible_create_cluster_script.sh
  #after_script:
    #- rm ./files/cicd_inventory
  #only:
  #  changes: #https://docs.gitlab.com/ee/ci/yaml/#onlychangesexceptchanges
  #  - "master_playbook.yml"
  #  - "vars/*.{yml,yaml}"
  #  - schedules
  #  - CICD/.gitlab-ci.yml

tests:
  stage: tests
  tags:
  - ansible
  before_script:
    - echo "$GC_KEY" > gc_key.pem
    - chmod 400 gc_key.pem
    - echo "$HPCCICD_openrc" > ./$NECTAR_ALLOCATION-openrc.sh
  script:
    - echo "tests stage"
    - export ANSIBLE_HOST_KEY_CHECKING=False
    - source ./$NECTAR_ALLOCATION-openrc.sh
    - python3 dependencies/ansible_cluster_in_a_box/scripts/make_inventory.py static CICD$STACKNAME | tee ./files/cicd_inventory
    - grep -qv "I could not find any resouces tagged with project_name:" ./files/cicd_inventory   #fail if inventory file is empty
    - chmod 755 ./files/cicd_inventory
    - chmod 400 ./keys/gc_key.pem
    - ansible -B 30 -i files/cicd_inventory --key-file keys/gc_key.pem -a "sinfo" ManagementNodes
    - ansible -B 30 -i files/cicd_inventory --key-file keys/gc_key.pem -a "squeue" ManagementNodes
    - ansible -B 30 -i files/cicd_inventory --key-file keys/gc_key.pem -a "systemctl is-active --quiet mariadb" SQLNodes
    - ansible -B 30 -i files/cicd_inventory --key-file keys/gc_key.pem -a "systemctl is-active --quiet slurmctld" ManagementNodes
    - ansible -B 30 -i files/cicd_inventory --key-file keys/gc_key.pem -a "systemctl is-active --quiet slurmdbd" ManagementNodes
    
    - bash -e ./tests/run_tests.sh all "files/cicd_inventory" "keys/gc_key.pem"
    - bash -e ./tests/run_tests.sh ComputeNodes "files/cicd_inventory" "keys/gc_key.pem"
    - bash -e ./tests/run_tests.sh LoginNodes "files/cicd_inventory" "keys/gc_key.pem"
    - bash -e ./tests/run_tests.sh ManagementNodes "files/cicd_inventory" "keys/gc_key.pem"
    - bash -e ./tests/run_tests.sh NFSNodes "files/cicd_inventory" "keys/gc_key.pem"
    - bash -e ./tests/run_tests.sh SQLNodes "files/cicd_inventory" "keys/gc_key.pem"
    
    # licensing https://gitlab.erc.monash.edu.au/hpc-team/license_server/tree/master/roles/avizo_license_monitor

manual_cluster_spawn:
  stage: push_button_spawn_cluster
  tags:
  - heat
  - ansible
  before_script:
    - echo "press button spawn cluster."
    - echo "for this to work you have to provide a variable called manual stackname"
    - echo I still need to handle os password
    - echo $MANUAL_STACKNAME
    - echo "$GC_KEY" > gc_key.pem
    - chmod 400 gc_key.pem
    - echo "$HPCCICD_openrc" > ./$NECTAR_ALLOCATION-openrc.sh
  script:
    - source ./$NECTAR_ALLOCATION-openrc.sh
    - bash -x ./heat/heatcicdwrapper.sh create $MANUAL_STACKNAME
    - git submodule update --init --remote --merge
    - openstack stack list
    - export STACKNAME=$MANUAL_STACKNAME
    - sleep 25
    - bash -x CICD/ansible_create_cluster_script.sh
  environment:
    name: openstack
    url: https://dashboard.rc.nectar.org.au/project/instances/
  when: manual 
  only:
    refs:
      - "devel"

clean:
  stage: clean
  tags:
  - heat
  before_script:
    - echo "cleanup master"
    - sleep 30
    - echo "$GC_KEY" > gc_key.pem
    - chmod 400 gc_key.pem
    - echo "$HPCCICD_openrc" > ./$NECTAR_ALLOCATION-openrc.sh
  script:
    - source ./$NECTAR_ALLOCATION-openrc.sh
    - bash -x ./heat/heatcicdwrapper.sh delete_if_exists $STACKNAME
