diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b3c5964a7fd099fa0fbd20ae8f292e36fa310697 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*OLD* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..e26808086d0e255cac2daf7caccf9fbc4f1c1761 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,138 @@ +--- + +# image: python:3.10.15-bullseye + +### +### VARIABLES +### +variables: + AUTHOR: fejao + IMAGE_NAME_SYNTAX: python:3.10.15-bullseye + IMAGE_NAME_LINT: python:3.10.15-bullseye + # IMAGE_NAME_MOLECULE: geerlingguy/docker-ubuntu2204-ansible:latest + PATH_ENV_DIR: "/builds/fejao/c3infodesk-deployment-role-test" + PATH_PYTHON_REQ_FILE: "/builds/fejao/c3infodesk-deployment-role-test/ci-cd/python_requirements.txt" + PATH_INVENTORIES: "/builds/fejao/c3infodesk-deployment-role-test/ci-cd/hosts" + PATH_PLAYBOOK: "/builds/fejao/c3infodesk-deployment-role-test/ci-cd/playbook_role_test.yml" + + # INVENTORIES_PATH: "inventories/hosts" + # PLAYBOOK_PATH_FOR_ROLE_TEST: "ci-cd/01_test.yml" + # PLAYBOOK_PATH_FOR_ROLE_DEPENDENCIES: "ci-cd/02_dependencies.yml" + # PLAYBOOK_PATH_FOR_ROLE_CLONE_REPOSITORIES: "ci-cd/03_clone_repositories.yml" + # PLAYBOOK_PATH_FOR_ROLE_DOCKER_IMAGES: "ci-cd/04_docker_images.yml" + # PLAYBOOK_PATH_FOR_ROLE_DOCKER_CONTAINERS: "ci-cd/05_docker_containers.yml" + # PLAYBOOK_PATH_FOR_ROLE_OH_MY_BASH: "ci-cd/06_oh_my_bash.yml" + +### +### STAGES +### +stages: + - test-debug + - yamllint + - syntax-check + - lint-tests + - molecule + +### +### SCRIPTS +### +.before_syntax_n_lint: &before_syntax_n_lint + # Install python and it's requirements + - apt-get update && apt-get install -y python3-pip && apt-get clean && rm -rf /var/lib/apt/lists/* + - pip3 install -r $PYTHON_REQ_FILE_PATH + ### Correct the permissions on the build environment directory. + ### See https://github.com/ansible/ansible/pull/42142/files + - chmod 700 $PATH_ENV_DIR + +.run_syntax_check: &run_syntax_check + - echo "ansible-playbook --syntax-check -i $PATH_INVENTORIES $PLAYBOOK_PATH" + - pwd + - ls -la + - cd .. + - pwd + - ls -la + # - ansible-playbook --syntax-check -i roles/c3infodesk-deployment-role-test/ci-cd/hosts roles/c3infodesk-deployment-role-test/ci-cd/playbook_role_test.yml + +.run_lint: &run_lint + # - ansible-lint $ROLE_PATH + - ansible-lint $PLAYBOOK_PATH + +### +### DEBUG-TEST +### +# debug-test: +# stage: test-debug +# image: $IMAGE_NAME_LINT +# variables: +# VAR_DEBUG: "foo-bar" +# script: +# - echo "This is the debug-test" + +### +### YAMLLING +### +yamllint-test: + stage: yamllint + image: $IMAGE_NAME_LINT + variables: + PYTHON_REQ_FILE_PATH: $PATH_PYTHON_REQ_FILE + PLAYBOOK_PATH: $PATH_PLAYBOOK + before_script: + - *before_syntax_n_lint + script: + - echo "This is the 'yamllint' test from the 'test' role" + - yamllint . + +### +### STAGE-SYNTAX-CHECK +### +# syntax-test: +# stage: syntax-check +# image: $IMAGE_NAME_SYNTAX +# variables: +# PYTHON_REQ_FILE_PATH: $PATH_PYTHON_REQ_FILE +# PLAYBOOK_PATH: $PATH_PLAYBOOK +# before_script: +# - *before_syntax_n_lint +# script: +# - echo "Running ansible-playbook --syntax-check tests at the role-> 'test'" +# # - *run_syntax_check + +### +### STAGE-LINT-TESTS +### +# lint-test: +# stage: lint-tests +# image: $IMAGE_NAME_LINT +# variables: +# PYTHON_REQ_FILE_PATH: $PATH_PYTHON_REQ_FILE +# PLAYBOOK_PATH: $PATH_PLAYBOOK +# ROLE_PATH: $PLAYBOOK_PATH_FOR_ROLE_TEST +# before_script: +# - *before_syntax_n_lint +# script: +# - echo "Running ansible-lint tests at the role-> 'test'" +# - *run_lint + +### +### STAGE-MOLECULE --> At the moment, running DIND (docker in docker) at this instance is disable :( +### +# molecule-test: +# stage: molecule +# image: $IMAGE_NAME_MOLECULE +# ### AVAILABLE TAGS +# # https://docs.gitlab.com/ee/ci/runners/hosted_runners/linux.html#machine-types-available-for-linux---x86-64 +# tags: +# - saas-linux-small-amd64 +# # before_script: +# # # - apk add --no-cache python3 py3-pip +# # # - rm /usr/lib/python*/EXTERNALLY-MANAGED +# # # - python3 -m ensurepip +# # - pip3 install ansible ansible-lint molecule molecule-docker +# # - pip3 install --user "molecule-plugins[docker]" +# script: +# - echo "Running molecule tests at the role-> 'test'" +# - docker ps -a +# # - cd roles/test +# # - molecule test +# allow_failure: false diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000000000000000000000000000000000000..2382bed7fe5e0dd0bbde29e929f987b4d8b801c6 --- /dev/null +++ b/.yamllint @@ -0,0 +1,50 @@ +--- + +# https://ansible.readthedocs.io/projects/lint/rules/yaml/ + +yaml-files: + - '*.yaml' + - '*.yml' + - '.yamllint' + +rules: + anchors: enable + # braces: enable + # braces: disable + braces: + max-spaces-inside: 1 + brackets: enable + colons: enable + commas: enable + comments: + level: warning + min-spaces-from-content: 1 + comments-indentation: false + document-end: disable + document-start: + level: warning + empty-lines: enable + empty-values: disable + float-values: disable + hyphens: enable + # indentation: enable + indentation: disable + key-duplicates: enable + key-ordering: disable + # line-length: enable + line-length: + # max: 160 + ### roles/dependencies/defaults/main.yml:72 --> 232 characters + max: 240 + new-line-at-end-of-file: enable + new-lines: enable + # octal-values: disable + quoted-strings: disable + trailing-spaces: enable + truthy: + level: warning + #### + # var_naming_pattern: "^[a-z_][a-z0-9_]*$" + # var-naming: disable + # var-naming: + # no-role-prefix: disable diff --git a/ci-cd/hosts b/ci-cd/hosts new file mode 100644 index 0000000000000000000000000000000000000000..9e0c871a8a9a141978e95184a6292b9a49bf8641 --- /dev/null +++ b/ci-cd/hosts @@ -0,0 +1,2 @@ +[example_servers_group] +example_server ansible_host=192.168.2.45 diff --git a/ci-cd/playbook_role_test.yml b/ci-cd/playbook_role_test.yml new file mode 100644 index 0000000000000000000000000000000000000000..576b8e3f6a6e649501da0c716c76e9073c4f5999 --- /dev/null +++ b/ci-cd/playbook_role_test.yml @@ -0,0 +1,15 @@ +--- +# Runs the role test + +- name: CI-CD playbook for running the role 'test' + hosts: + - example_servers_group + roles: + # - roles/test + # - roles/c3infodesk-deployment-role-test + - c3infodesk-deployment-role-test + # tasks: + # - name: Importing the local role + # ansible.builtin.import_role: + # # name: myrole + # name: c3infodesk-deployment-role-test diff --git a/ci-cd/python_requirements.txt b/ci-cd/python_requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..71a091ad8d57cb226a37759a19ae9b1bb9469cca --- /dev/null +++ b/ci-cd/python_requirements.txt @@ -0,0 +1,4 @@ +# ansible +# ansible-dev-tools +# ansible-lint +yamllint diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..9c8dd30304fe755907bd1212c4e6fdf95123a598 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,5 @@ +--- +# defaults file for test + +var_setted_everywhere: "answer from roles/test/defaults/main.yml" +var_setted_only_defaults_main: "MESSAGE FROM roles/test/defaults/main.yml" diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml new file mode 100644 index 0000000000000000000000000000000000000000..6680db8cfc7bbb6f32e6a8f7cfab064634e53132 --- /dev/null +++ b/molecule/default/converge.yml @@ -0,0 +1,8 @@ +--- +- name: MOLECULE | Converge + hosts: all + tasks: + - name: MOLECULE | CONVERGE | Call the 'test' role. + ansible.builtin.include_role: + # name: test + name: c3infodesk-deployment-role-test diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000000000000000000000000000000000000..7b5a4dc16f44f5b72043ced31ba71db9a993b3b8 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,66 @@ +--- +dependency: + name: galaxy +driver: + name: docker +platforms: + - name: instance + image: geerlingguy/docker-ubuntu2004-ansible:latest + # privileged: true + pre_build_image: true +provisioner: + name: ansible + inventory: + ### + ### VARS used from the role + ### + group_vars: + example_servers_group: + var_setted_only_group_vars: "group_vars_value" + var_setted_everywhere: "group_vars_value" + host_vars: + instance: + var_setted_only_host_vars: "host_vars_value" + var_setted_everywhere: "host_vars_value" +lint: | + ansible-lint --exclude molecule/default/ +scenario: + name: default + create_sequence: + - dependency + - create + - prepare + check_sequence: + - dependency + - cleanup + - destroy + - create + - prepare + - converge + - check + - destroy + converge_sequence: + - dependency + - create + - prepare + - converge + destroy_sequence: + - dependency + - cleanup + - destroy + test_sequence: + # - lint + # - dependency + # - cleanup + - destroy + - syntax + - create + # - prepare + - converge + - verify + - idempotence + # - side_effect + # - cleanup + - destroy +verifier: + name: ansible diff --git a/molecule/default/verify.yml b/molecule/default/verify.yml new file mode 100644 index 0000000000000000000000000000000000000000..5dd983f895031ab4e81f60a08876814d24a46e63 --- /dev/null +++ b/molecule/default/verify.yml @@ -0,0 +1,59 @@ +--- +- name: VERIFY | Test role for debugging variables + hosts: all + pre_tasks: + - name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../../../inventories/group_vars + ansible.builtin.include_vars: + dir: ../../../../inventories/group_vars + extensions: + - 'yml' + + - name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../../../inventories/host_vars + ansible.builtin.include_vars: + dir: ../../../../inventories/host_vars + extensions: + - 'yml' + + - name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../defaults + ansible.builtin.include_vars: + dir: ../../defaults + extensions: + - 'yml' + + - name: MOLECULE | VERIFY | PRE-TASKS | Adding variables from -> ../../vars + ansible.builtin.include_vars: + dir: ../../vars + extensions: + - 'yml' + + tasks: + - name: MOLECULE | VERIFY | Test parsed variable setted only at roles/test/defaults/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_defaults_main }}" + + - name: MOLECULE | VERIFY | Test parsed variable setted only at roles/test/vars/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_vars_main }}" + + - name: MOLECULE | VERIFY | Test parsed variable setted only at inventory/group_vars/example_servers_group.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_group_vars }}" + when: var_setted_only_group_vars is defined + + - name: MOLECULE | VERIFY | Test parsed variable setted only at inventory/host_vars/example_server.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_host_vars }}" + + - name: MOLECULE | VERIFY | Test parsed variable setted EVERYWHERE -> should come from roles/test/vars/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_everywhere }}" + + - name: MOLECULE | VERIFY | List the root ('/') folder from the target to a register + ansible.builtin.command: + cmd: ls -hal / + register: ret_list_folder + changed_when: false + + - name: MOLECULE | VERIFY | Shows output from listing folder + ansible.builtin.debug: + msg: "{{ ret_list_folder }}" diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..3e7e633615708d3a17a07bcb244ec0779c8725ac --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,33 @@ +--- +# tasks file for test + +- name: Test parsed variable setted only at roles/test/defaults/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_defaults_main }}" + +- name: Test parsed variable setted only at roles/test/vars/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_vars_main }}" + +- name: Test parsed variable setted only at inventory/group_vars/example_servers_group.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_group_vars }}" + when: var_setted_only_group_vars is defined + +- name: Test parsed variable setted only at inventory/host_vars/example_server.yml + ansible.builtin.debug: + msg: "{{ var_setted_only_host_vars }}" + +- name: Test parsed variable setted EVERYWHERE -> should come from roles/test/vars/main.yml + ansible.builtin.debug: + msg: "{{ var_setted_everywhere }}" + +- name: List the root ('/') folder from the target to a register + ansible.builtin.command: + cmd: ls -hal / + register: ret_list_folder + changed_when: false + +- name: Shows output from listing folder + ansible.builtin.debug: + msg: "{{ ret_list_folder }}" diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..76a45cb0672a680111467fd9d9576ca1e237dce8 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,5 @@ +--- +# vars file for test + +var_setted_everywhere: "MESSAGE EVERYWHERE FROM roles/test/vars/main.yml" +var_setted_only_vars_main: "MESSAGE FROM roles/test/vars/main.yml"