2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,5 @@ | |||||||
| artifacts/ | artifacts/ | ||||||
| build/ | build/ | ||||||
|  | test_results/ | ||||||
|  | test_results.json | ||||||
| *.tar.gz | *.tar.gz | ||||||
| @ -9,6 +9,7 @@ variables: | |||||||
|  |  | ||||||
|  |  | ||||||
| include: | include: | ||||||
|  |   - local: .gitlab/integration_test.gitlab-ci.yml | ||||||
|   - project: nofusscomputing/projects/gitlab-ci |   - project: nofusscomputing/projects/gitlab-ci | ||||||
|     ref: development |     ref: development | ||||||
|     file: |     file: | ||||||
|  | |||||||
							
								
								
									
										207
									
								
								.gitlab/integration_test.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								.gitlab/integration_test.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,207 @@ | |||||||
|  |  | ||||||
|  | .integration_test: | ||||||
|  |  | ||||||
|  |   stage: test | ||||||
|  |  | ||||||
|  |   needs: | ||||||
|  |     - "Build Collection" | ||||||
|  |  | ||||||
|  |   image:  | ||||||
|  |     name: nofusscomputing/docker-buildx-qemu:dev | ||||||
|  |     pull_policy: always | ||||||
|  |  | ||||||
|  |   variables: | ||||||
|  |     DOCKER_HOST: tcp://docker:2375/ | ||||||
|  |     DOCKER_DRIVER: overlay2 | ||||||
|  |     # GIT_STRATEGY: none | ||||||
|  |  | ||||||
|  |   services: | ||||||
|  |     - name: docker:23-dind | ||||||
|  |       entrypoint: ["env", "-u", "DOCKER_HOST"] | ||||||
|  |       command: ["dockerd-entrypoint.sh"] | ||||||
|  |   before_script: | ||||||
|  |     - | # start test container | ||||||
|  |       docker run -d \ | ||||||
|  |         --privileged \ | ||||||
|  |         -v ${PWD}:/workdir \ | ||||||
|  |         -v ${PWD}/artifacts/galaxy:/collection \ | ||||||
|  |         --workdir /workdir \ | ||||||
|  |         --rm \ | ||||||
|  |         --env "ANSIBLE_FORCE_COLOR=true" \ | ||||||
|  |         --env "CI_COMMIT_SHA=${CI_COMMIT_SHA}" \ | ||||||
|  |         --env "ANSIBLE_LOG_PATH=/workdir/ansible.log" \ | ||||||
|  |         --name test_image_${CI_JOB_ID} \ | ||||||
|  |         nofusscomputing/ansible-docker-os:dev-${test_image} | ||||||
|  |  | ||||||
|  |     - | # enter test container | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} ps aux | ||||||
|  |     - docker ps | ||||||
|  |     - docker exec -i test_image_${CI_JOB_ID} apt update | ||||||
|  |     - docker exec -i test_image_${CI_JOB_ID} apt install -y --no-install-recommends python3-pip net-tools dnsutils iptables | ||||||
|  |     - | | ||||||
|  |       if [ "${test_image}" == 'debian-12' ]; then | ||||||
|  |  | ||||||
|  |         echo "Debian 12": | ||||||
|  |  | ||||||
|  |         docker exec -i test_image_${CI_JOB_ID} pip install ansible-core --break-system-packages; | ||||||
|  |  | ||||||
|  |         docker exec -i test_image_${CI_JOB_ID} update-alternatives --set iptables /usr/sbin/iptables-legacy; | ||||||
|  |  | ||||||
|  |       else | ||||||
|  |  | ||||||
|  |         echo " Not Debian 12": | ||||||
|  |  | ||||||
|  |         docker exec -i test_image_${CI_JOB_ID} pip install ansible-core; | ||||||
|  |  | ||||||
|  |       fi | ||||||
|  |  | ||||||
|  |     - docker exec -i test_image_${CI_JOB_ID} cat /etc/hosts | ||||||
|  |     - docker exec -i test_image_${CI_JOB_ID} cat /etc/resolv.conf | ||||||
|  |     - | # check if DNS working | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} nslookup google.com | ||||||
|  |   script: | ||||||
|  |     - | # inside container? | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} ls -l /collection; | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} echo $PWD; | ||||||
|  |  | ||||||
|  |     - | # Show Network Interfaces | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} ifconfig; | ||||||
|  |  | ||||||
|  |     - | # Install the collection | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} bash -c 'ansible-galaxy collection install $(ls /collection/*.tar.gz)' | ||||||
|  |  | ||||||
|  |     - | # output ansible vars | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} ansible -m setup localhost | ||||||
|  |  | ||||||
|  |     - | # run the collection | ||||||
|  |       docker exec -i test_image_${CI_JOB_ID} \ | ||||||
|  |         ${test_command} \ | ||||||
|  |         --extra-vars "nfc_role_firewall_policy_input=ACCEPT" \ | ||||||
|  |         --extra-vars "nfc_role_firewall_policy_forward=ACCEPT" \ | ||||||
|  |         -vv | ||||||
|  |  | ||||||
|  |     - | # Create test.yaml | ||||||
|  |       mkdir -p test_results; | ||||||
|  |       cat <<EOF > test_results/${test_image}.json | ||||||
|  |       { | ||||||
|  |         "$( echo ${test_image}  | sed -e 's/\./_/')": "passed" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       EOF | ||||||
|  |  | ||||||
|  |   after_script: | ||||||
|  |     - | # Create test.yaml if not exists | ||||||
|  |       if [ ! -f test_results/${test_image}.json ]; then | ||||||
|  |  | ||||||
|  |       echo "[TRACE] Test has failed" | ||||||
|  |  | ||||||
|  |       mkdir -p test_results; | ||||||
|  |  | ||||||
|  |       cat <<EOF > test_results/${test_image}.json | ||||||
|  |       { | ||||||
|  |         "$( echo ${test_image}  | sed -e 's/\./_/')": "fail" | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       EOF | ||||||
|  |  | ||||||
|  |       fi | ||||||
|  |  | ||||||
|  |     - | # Run trace script for debugging | ||||||
|  |       chmod +x ./.gitlab/integration_test_trace.sh; | ||||||
|  |  | ||||||
|  |       ./.gitlab/integration_test_trace.sh; | ||||||
|  |  | ||||||
|  |   artifacts: | ||||||
|  |     untracked: false | ||||||
|  |     paths: | ||||||
|  |       - ansible.log | ||||||
|  |       - test_results/* | ||||||
|  |     when: always | ||||||
|  |  | ||||||
|  |   rules: | ||||||
|  |  | ||||||
|  |     - if: $CI_COMMIT_TAG | ||||||
|  |       allow_failure: true | ||||||
|  |       when: on_success | ||||||
|  |  | ||||||
|  |     - if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'" | ||||||
|  |       when: never | ||||||
|  |  | ||||||
|  |     - if: # Occur on merge | ||||||
|  |         $CI_COMMIT_BRANCH == "development" | ||||||
|  |           && | ||||||
|  |         $CI_PIPELINE_SOURCE == "push" | ||||||
|  |       allow_failure: true | ||||||
|  |       when: always | ||||||
|  |  | ||||||
|  |     - if: | ||||||
|  |         $CI_COMMIT_BRANCH != "development" | ||||||
|  |           && | ||||||
|  |         $CI_COMMIT_BRANCH != "master" | ||||||
|  |           && | ||||||
|  |         $CI_PIPELINE_SOURCE == "push" | ||||||
|  |       allow_failure: true | ||||||
|  |       when: always | ||||||
|  |  | ||||||
|  |     - when: never | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Playbook - Install: | ||||||
|  |   extends: .integration_test | ||||||
|  |   parallel: | ||||||
|  |     matrix: | ||||||
|  |       - test_image: debian-11 | ||||||
|  |         test_command: ansible-playbook nofusscomputing.kubernetes.install | ||||||
|  |       - test_image: debian-12 | ||||||
|  |         test_command: ansible-playbook nofusscomputing.kubernetes.install | ||||||
|  |       - test_image: ubuntu-20.04 | ||||||
|  |         test_command: ansible-playbook nofusscomputing.kubernetes.install | ||||||
|  |       - test_image: ubuntu-22.04 | ||||||
|  |         test_command: ansible-playbook nofusscomputing.kubernetes.install | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | test_results: | ||||||
|  |   stage: test | ||||||
|  |  | ||||||
|  |   extends: .ansible_playbook | ||||||
|  |  | ||||||
|  |   variables: | ||||||
|  |     ansible_playbook: .gitlab/test_results.yaml | ||||||
|  |     ANSIBLE_PLAYBOOK_DIR: $CI_PROJECT_DIR | ||||||
|  |  | ||||||
|  |   needs: | ||||||
|  |     - Playbook - Install | ||||||
|  |  | ||||||
|  |   artifacts: | ||||||
|  |     untracked: false | ||||||
|  |     when: always | ||||||
|  |     access: all | ||||||
|  |     expire_in: "3 days" | ||||||
|  |     paths: | ||||||
|  |       - test_results.json | ||||||
|  |  | ||||||
|  |   rules: | ||||||
|  |  | ||||||
|  |     - if: $CI_COMMIT_TAG | ||||||
|  |       when: on_success | ||||||
|  |  | ||||||
|  |     - if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'" | ||||||
|  |       when: never | ||||||
|  |  | ||||||
|  |     - if: # Occur on merge | ||||||
|  |         $CI_COMMIT_BRANCH == "development" | ||||||
|  |           && | ||||||
|  |         $CI_PIPELINE_SOURCE == "push" | ||||||
|  |       when: always | ||||||
|  |  | ||||||
|  |     - if: | ||||||
|  |         $CI_COMMIT_BRANCH != "development" | ||||||
|  |           && | ||||||
|  |         $CI_COMMIT_BRANCH != "master" | ||||||
|  |           && | ||||||
|  |         $CI_PIPELINE_SOURCE == "push" | ||||||
|  |       when: always | ||||||
|  |  | ||||||
|  |     - when: never | ||||||
							
								
								
									
										42
									
								
								.gitlab/integration_test_trace.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.gitlab/integration_test_trace.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | # colour ref: https://stackoverflow.com/a/28938235 | ||||||
|  |  | ||||||
|  | NC='\033[0m'       # Text Reset | ||||||
|  |  | ||||||
|  | # Regular Colors | ||||||
|  | Black='\033[0;30m'        # Black | ||||||
|  | Red='\033[0;31m'          # Red | ||||||
|  | Green='\033[0;32m'        # Green | ||||||
|  | Yellow='\033[0;33m'       # Yellow | ||||||
|  | Blue='\033[0;34m'         # Blue | ||||||
|  | Purple='\033[0;35m'       # Purple | ||||||
|  | Cyan='\033[0;36m'         # Cyan | ||||||
|  |  | ||||||
|  |  | ||||||
|  | cmd() { | ||||||
|  |  | ||||||
|  |   echo -e "${Yellow}[TRACE] ${Green}executing ${Cyan}'$1'${NC}" | ||||||
|  |  | ||||||
|  |   docker exec -i test_image_${CI_JOB_ID} $1 || true | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | cmd "journalctl -xeu netfilter-persistent.service"; | ||||||
|  |  | ||||||
|  | cmd "journalctl -xeu iptables.service" | ||||||
|  |  | ||||||
|  | cmd "journalctl -xeu k3s.service" | ||||||
|  |  | ||||||
|  | cmd "systemctl status netfilter-persistent.service" | ||||||
|  |  | ||||||
|  | cmd "systemctl status iptables.servic" | ||||||
|  |  | ||||||
|  | cmd "systemctl status k3s.service" | ||||||
|  |  | ||||||
|  | cmd "kubectl get po -A -o wide" | ||||||
|  |  | ||||||
|  | cmd "kubectl get no -o wide" | ||||||
|  |  | ||||||
|  | cmd "iptables -nvL --line-numbers" | ||||||
							
								
								
									
										19
									
								
								.gitlab/test_results.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.gitlab/test_results.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | --- | ||||||
|  |  | ||||||
|  | - name: Create Test Results File | ||||||
|  |   hosts: localhost | ||||||
|  |   gather_facts: false | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   tasks: | ||||||
|  |      | ||||||
|  |  | ||||||
|  |     - name: Load Test Results | ||||||
|  |       ansible.builtin.include_vars: | ||||||
|  |         dir: ../test_results | ||||||
|  |         name: test_results | ||||||
|  |  | ||||||
|  |     - name: Create Results file | ||||||
|  |       ansible.builtin.copy: | ||||||
|  |         content: "{{ (test_results) | to_nice_json }}" | ||||||
|  |         dest: ../test_results.json | ||||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -7,7 +7,8 @@ | |||||||
|         ], |         ], | ||||||
|         "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/vars.json": [ |         "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/vars.json": [ | ||||||
|             "roles/nfc_kubernetes/variables/**.yaml" |             "roles/nfc_kubernetes/variables/**.yaml" | ||||||
|         ] |         ], | ||||||
|  |         "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible.json#/$defs/playbook": ".gitlab/test_results.yaml" | ||||||
|     }, |     }, | ||||||
|     "gitlab.aiAssistedCodeSuggestions.enabled": false, |     "gitlab.aiAssistedCodeSuggestions.enabled": false, | ||||||
|     "gitlab.duoChat.enabled": false, |     "gitlab.duoChat.enabled": false, | ||||||
|  | |||||||
| @ -29,12 +29,17 @@ This project is hosted on [gitlab](https://gitlab.com/nofusscomputing/projects/a | |||||||
|  |  | ||||||
|    |    | ||||||
|  |  | ||||||
|  |     | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
|  |  | ||||||
| **Development Branch**  | **Development Branch**  | ||||||
|  |  | ||||||
|   |   | ||||||
|  |  | ||||||
|  |     | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
| <br> | <br> | ||||||
|  |  | ||||||
|  | |||||||
| @ -13,6 +13,8 @@ about: https://gitlab.com/nofusscomputing/projects/ansible/collections/kubernete | |||||||
|  |  | ||||||
|   |   | ||||||
|  |  | ||||||
|  |     | ||||||
|  |  | ||||||
|  |  | ||||||
| [](https://galaxy.ansible.com/ui/repo/published/nofusscomputing/kubernetes/) | [](https://galaxy.ansible.com/ui/repo/published/nofusscomputing/kubernetes/) | ||||||
|  |  | ||||||
|  | |||||||
| @ -18,6 +18,15 @@ | |||||||
|     not ansible_check_mode |     not ansible_check_mode | ||||||
|  |  | ||||||
|  |  | ||||||
|  | - name: Testing Env Variables | ||||||
|  |   ansible.builtin.set_fact: | ||||||
|  |     ansible_default_ipv4: { | ||||||
|  |       "address": "127.0.0.1" | ||||||
|  |     } | ||||||
|  |   when: > | ||||||
|  |     lookup('ansible.builtin.env', 'CI_COMMIT_SHA') | default('') != '' | ||||||
|  |  | ||||||
|  |  | ||||||
| - name: Check Machine Architecture | - name: Check Machine Architecture | ||||||
|   ansible.builtin.set_fact: |   ansible.builtin.set_fact: | ||||||
|     nfc_kubernetes_install_architectures: "{{ nfc_kubernetes_install_architectures | default({}) | combine({ansible_architecture: ''}) }}" |     nfc_kubernetes_install_architectures: "{{ nfc_kubernetes_install_architectures | default({}) | combine({ansible_architecture: ''}) }}" | ||||||
|  | |||||||
| @ -32,6 +32,7 @@ | |||||||
|     loop_var: package |     loop_var: package | ||||||
|   vars: |   vars: | ||||||
|     packages: |     packages: | ||||||
|  |       - wget | ||||||
|       - curl |       - curl | ||||||
|       - iptables |       - iptables | ||||||
|       - jq |       - jq | ||||||
| @ -52,6 +53,10 @@ | |||||||
|     - install |     - install | ||||||
|  |  | ||||||
|  |  | ||||||
|  | - name: Testing Environment try/catch | ||||||
|  |   block: | ||||||
|  |  | ||||||
|  |  | ||||||
|     - name: Disable swap |     - name: Disable swap | ||||||
|       ansible.builtin.command: |       ansible.builtin.command: | ||||||
|         cmd: swapoff -a |         cmd: swapoff -a | ||||||
| @ -61,6 +66,17 @@ | |||||||
|       tags: |       tags: | ||||||
|         - install |         - install | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   rescue: | ||||||
|  |  | ||||||
|  |     - name: Check if inside Gitlab CI | ||||||
|  |       ansible.builtin.assert: | ||||||
|  |         that: | ||||||
|  |           - lookup('ansible.builtin.env', 'CI_COMMIT_SHA') | default('') != '' | ||||||
|  |         success_msg: "Inside testing enviroment, 'Disable swap' error OK" | ||||||
|  |         fail_msg: "You should figure out what went wrong" | ||||||
|  |  | ||||||
|  |  | ||||||
| - name: Check an armbian os system | - name: Check an armbian os system | ||||||
|   ansible.builtin.stat: |   ansible.builtin.stat: | ||||||
|     path: /etc/default/armbian-zram-config |     path: /etc/default/armbian-zram-config | ||||||
| @ -226,6 +242,7 @@ | |||||||
|       {%- else -%} |       {%- else -%} | ||||||
|         false |         false | ||||||
|       {%- endif -%}"; |       {%- endif -%}"; | ||||||
|  |  | ||||||
|       export running_version="{{ kubernetes_node.resources[0].status.nodeInfo.kubeletVersion | default('0') }}"; |       export running_version="{{ kubernetes_node.resources[0].status.nodeInfo.kubeletVersion | default('0') }}"; | ||||||
|  |  | ||||||
|       export correct_hash=$(wget -q https://github.com/k3s-io/k3s/releases/download/v |       export correct_hash=$(wget -q https://github.com/k3s-io/k3s/releases/download/v | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user