diff --git a/.github/actions/make-integ-config/action.yml b/.github/actions/make-integ-config/action.yml new file mode 100644 index 000000000..0c9182060 --- /dev/null +++ b/.github/actions/make-integ-config/action.yml @@ -0,0 +1,43 @@ +--- +name: 'Create ansible-test integration_config.yml' +description: 'Create ansible-test integration_config.yml' +inputs: + ci_config_all: + description: 'CI config for all HyperCore hosts' + required: true + sc_host: # id of input + description: 'SC_HOST environ variable' + required: true + # default: 'World' + sc_username: + description: 'sc_username variable' + required: true + sc_password: + description: 'sc_password variable' + required: true + smb_password: + description: 'smb_password variable' + required: true + sc_replication_dest_password: + description: 'sc_replication_dest_password variable' + required: true + working_directory: + description: 'Path to working directory' + required: true +runs: + using: "composite" + steps: + - run: echo Creating integration-config.yml for sc_host=${{ inputs.sc_host }}. + shell: bash + - run: | + cd ${{ inputs.working_directory }} + echo "${{ inputs.ci_config_all }}" > tests/integration/integration_config.yml + cat tests/integration/integration_config.yml + echo "sc_host: ${{ inputs.sc_host }}" >> tests/integration/integration_config.yml + echo "sc_username: ${{ inputs.sc_username }}" >> tests/integration/integration_config.yml + echo "sc_password: ${{ inputs.sc_password }}" >> tests/integration/integration_config.yml + echo "smb_password: ${{ inputs.smb_password }}" >> tests/integration/integration_config.yml + echo "sc_replication_dest_password: ${{ inputs.sc_replication_dest_password }}" >> tests/integration/integration_config.yml + pwd + ls -al tests/integration/integration_config.yml + shell: bash diff --git a/.github/workflows/integ-test.yml b/.github/workflows/integ-test.yml index ff0fc9b16..8cd492c6a 100644 --- a/.github/workflows/integ-test.yml +++ b/.github/workflows/integ-test.yml @@ -11,22 +11,22 @@ on: Use "*" to run all tests. Use regex like 'node|^git_issue' to run only a subset. default: "" - # vm_import|vm_export - they need SMB server # dns_config|time_server - NTP cannot be reconfigured if DNS is invalid # git_issues - slow, do not run on each push. TODO - run them only once a day # oidc_config - during reconfiguration API returns 500/502 errors for other requests # smtp - email_alert test requires a configured SMTP - # role_ - role cluster_config reconfigures DNS, SMTP, OIDC. + # role_cluster_config - role cluster_config reconfigures DNS, SMTP, OIDC. And it is slow. + # version_update_single_node - role would change version, VSNS system cannot be updated. integ_tests_exclude: type: string description: |- List integration tests to exclude. Use "*" to exclude all tests. Use regex like 'node|^git_issue|^dns_config$' to exclude only a subset. - default: "^dns_config$|^cluster_shutdown$|^version_update$|^oidc_config$|^smtp$|^role_" + default: "^dns_config$|^cluster_shutdown$|^version_update$|^oidc_config$|^smtp$|^role_cluster_config$|^version_update_single_node$" env: INTEG_TESTS_INCLUDE_SCHEDULE: "*" - INTEG_TESTS_EXCLUDE_SCHEDULE: "^dns_config$|^cluster_shutdown$|^version_update$|^oidc_config$|^smtp$|^role_" + INTEG_TESTS_EXCLUDE_SCHEDULE: "^dns_config$|^cluster_shutdown$|^version_update$|^oidc_config$|^smtp$|^role_cluster_config$|^version_update_single_node$" # ansible-test needs special directory structure. # WORKDIR is a subdir of GITHUB_WORKSPACE WORKDIR: work-dir/ansible_collections/scale_computing/hypercore @@ -47,6 +47,12 @@ jobs: defaults: run: working-directory: ${{ env.WORKDIR }} + strategy: + fail-fast: false + matrix: + sc_host: + - https://10.5.11.200 + - https://10.5.11.201 steps: - name: Checkout uses: actions/checkout@v3 @@ -54,13 +60,15 @@ jobs: path: ${{ env.WORKDIR }} - run: ansible-galaxy collection install community.crypto community.general - run: ansible-galaxy collection list - - run: | - echo "${{ vars.CI_CONFIG_HC_IP50 }}" > tests/integration/integration_config.yml - cat tests/integration/integration_config.yml - echo "sc_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_PASSWORD }}" >> tests/integration/integration_config.yml - echo "smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }}" >> tests/integration/integration_config.yml - echo "sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }}" >> tests/integration/integration_config.yml - ls -al tests/integration/integration_config.yml + - uses: ./work-dir/ansible_collections/scale_computing/hypercore/.github/actions/make-integ-config + with: + ci_config_all: ${{ vars.CI_CONFIG_HC_IP50 }} + sc_host: ${{ matrix.sc_host }} + sc_username: admin + sc_password: ${{ secrets.CI_CONFIG_HC_IP200_SC_PASSWORD }} + smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }} + sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }} + working_directory: ${{ env.WORKDIR }} - run: ansible-playbook tests/integration/prepare/prepare_iso.yml - run: ansible-playbook tests/integration/prepare/prepare_vm.yml - run: ansible-playbook tests/integration/prepare/prepare_examples.yml @@ -145,13 +153,22 @@ jobs: - run: pip install ansible-core~=${{ matrix.ansible }} - run: ansible-galaxy collection install community.crypto community.general - run: ansible-galaxy collection list + + # ${{ env.WORKDIR }} cannot be used + - uses: ./work-dir/ansible_collections/scale_computing/hypercore/.github/actions/make-integ-config + with: + ci_config_all: ${{ vars.CI_CONFIG_HC_IP50 }} + sc_host: https://10.5.11.200 + sc_username: admin + sc_password: ${{ secrets.CI_CONFIG_HC_IP200_SC_PASSWORD }} + smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }} + sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }} + working_directory: ${{ env.WORKDIR }} - run: | - echo "${{ vars.CI_CONFIG_HC_IP50 }}" > tests/integration/integration_config.yml - cat tests/integration/integration_config.yml - echo "sc_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_PASSWORD }}" >> tests/integration/integration_config.yml - echo "smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }}" >> tests/integration/integration_config.yml - echo "sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }}" >> tests/integration/integration_config.yml + pwd ls -al tests/integration/integration_config.yml + head tests/integration/integration_config.yml + - run: | eval export SC_HOST=$(cat tests/integration/integration_config.yml | yq '.sc_host') eval export SC_USERNAME=$(cat tests/integration/integration_config.yml | yq '.sc_username') @@ -177,6 +194,9 @@ jobs: # python: [3.11] # test_name: [user_info] test_name: ${{ fromJson(needs.integ-matrix.outputs.matrix) }} + sc_host: + - https://10.5.11.200 + - https://10.5.11.201 steps: - name: Checkout uses: actions/checkout@v3 @@ -188,14 +208,16 @@ jobs: # But it does affect ansible-galaxy and ansible-test commands. - run: ansible-galaxy collection install community.crypto - run: ansible-galaxy collection list - # TODO - make integration_config.yml a reusable artifact/output of integration-prepare-env - - run: | - echo "${{ vars.CI_CONFIG_HC_IP50 }}" > tests/integration/integration_config.yml - cat tests/integration/integration_config.yml - echo "sc_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_PASSWORD }}" >> tests/integration/integration_config.yml - echo "smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }}" >> tests/integration/integration_config.yml - echo "sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }}" >> tests/integration/integration_config.yml - ls -al tests/integration/integration_config.yml + # ${{ env.WORKDIR }} cannot be used + - uses: ./work-dir/ansible_collections/scale_computing/hypercore/.github/actions/make-integ-config + with: + ci_config_all: ${{ vars.CI_CONFIG_HC_IP50 }} + sc_host: ${{ matrix.sc_host }} + sc_username: admin + sc_password: ${{ secrets.CI_CONFIG_HC_IP200_SC_PASSWORD }} + smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }} + sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }} + working_directory: ${{ env.WORKDIR }} - run: ansible-test integration --local ${{ matrix.test_name }} @@ -215,14 +237,16 @@ jobs: with: path: ${{ env.WORKDIR }} - run: pip install ansible-core~=2.13.0 - # ansible-test needs special directory structure. - - run: | - echo "${{ vars.CI_CONFIG_HC_IP50 }}" > tests/integration/integration_config.yml - cat tests/integration/integration_config.yml - echo "sc_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_PASSWORD }}" >> tests/integration/integration_config.yml - echo "smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }}" >> tests/integration/integration_config.yml - echo "sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }}" >> tests/integration/integration_config.yml - ls -al tests/integration/integration_config.yml + # ${{ env.WORKDIR }} cannot be used + - uses: ./work-dir/ansible_collections/scale_computing/hypercore/.github/actions/make-integ-config + with: + ci_config_all: ${{ vars.CI_CONFIG_HC_IP50 }} + sc_host: https://10.5.11.200 + sc_username: admin + sc_password: ${{ secrets.CI_CONFIG_HC_IP200_SC_PASSWORD }} + smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }} + sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }} + working_directory: ${{ env.WORKDIR }} - run: ansible-galaxy collection install community.general - run: ansible-playbook tests/integration/cleanup/ci_replica_cleanup.yml @@ -239,13 +263,16 @@ jobs: uses: actions/checkout@v3 with: path: ${{ env.WORKDIR }} - - run: | - echo "${{ vars.CI_CONFIG_HC_IP50 }}" > tests/integration/integration_config.yml - cat tests/integration/integration_config.yml - echo "sc_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_PASSWORD }}" >> tests/integration/integration_config.yml - echo "smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }}" >> tests/integration/integration_config.yml - echo "sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }}" >> tests/integration/integration_config.yml - ls -al tests/integration/integration_config.yml + # ${{ env.WORKDIR }} cannot be used + - uses: ./work-dir/ansible_collections/scale_computing/hypercore/.github/actions/make-integ-config + with: + ci_config_all: ${{ vars.CI_CONFIG_HC_IP50 }} + sc_host: https://10.5.11.200 + sc_username: admin + sc_password: ${{ secrets.CI_CONFIG_HC_IP200_SC_PASSWORD }} + smb_password: ${{ secrets.CI_CONFIG_HC_IP50_SMB_PASSWORD }} + sc_replication_dest_password: ${{ secrets.CI_CONFIG_HC_IP50_SC_REPLICATION_DEST_PASSWORD }} + working_directory: ${{ env.WORKDIR }} - run: | cd tests/integration/cleanup && ./smb_cleanup.sh \ "$(cat ../integration_config.yml | yq '.smb_server' | sed -e 's/^"//' -e 's/"$//')" \