From 194b72d0e836db587a33d44c40a50546d0592661 Mon Sep 17 00:00:00 2001 From: fejao <mail@fejao.de> Date: Sat, 25 Jan 2025 13:05:55 +0000 Subject: [PATCH] Adding role clone repositories --- README.md | 3 +- ansible.cfg | 2 + .../group_vars/example_servers_group.yml | 9 +- inventories/host_vars/example_server.yml | 6 + playbook_example_03_clone_repositories.yml | 8 ++ roles/clone_repositories/README.md | 74 ++++++++++ roles/clone_repositories/defaults/main.yml | 14 ++ roles/clone_repositories/meta/main.yml | 36 +++++ roles/clone_repositories/tasks/main.yml | 10 ++ roles/clone_repositories/tasks/printer.yml | 33 +++++ roles/dependencies/README.md | 136 +++++++++--------- 11 files changed, 264 insertions(+), 67 deletions(-) create mode 100644 playbook_example_03_clone_repositories.yml create mode 100644 roles/clone_repositories/README.md create mode 100644 roles/clone_repositories/defaults/main.yml create mode 100644 roles/clone_repositories/meta/main.yml create mode 100644 roles/clone_repositories/tasks/main.yml create mode 100644 roles/clone_repositories/tasks/printer.yml diff --git a/README.md b/README.md index 097bd1b..02bb93b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## WIP - [ ] finish the roles for deploying the **c3InfoDesk Printer** - [x] dependencies - - [ ] clone_repositories + - [x] clone_repositories - [ ] docker_images - [ ] docker_containers - [ ] set ansible-lint @@ -21,6 +21,7 @@ This is a repo for deploying the the printer system used at the c3infodesk for p Here are the used roles: - [dependencies](roles/dependencies/README.md) +- [clone_repositories](roles/clone_repositories/README.md) ## License diff --git a/ansible.cfg b/ansible.cfg index d201581..873a8ba 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -223,6 +223,8 @@ inventory=$PWD/inventories/hosts # (string) Sets the login user for the target machines # When blank it uses the connection plugin's default, normally the user currently executing Ansible. ;remote_user= +### +remote_user=test-user # (pathspec) Colon-separated paths in which Ansible will search for Roles. ;roles_path=/home/fejao/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles diff --git a/inventories/group_vars/example_servers_group.yml b/inventories/group_vars/example_servers_group.yml index 6bcdc44..e8051e2 100644 --- a/inventories/group_vars/example_servers_group.yml +++ b/inventories/group_vars/example_servers_group.yml @@ -1,6 +1,13 @@ --- # group_vars from test_servers +### +### roles/test +### var_setted_everywhere: 'ANSWER EVERYWHERE FROM /inventories/group_vars/example_test_servers.yaml' - var_setted_only_group_vars: "MESSAGE FROM GROUP_VARS ONLY" + +### +### roles/clone_repositories +### +c3infodesk_printer_folder: "Coding/c3infodesk-printer" diff --git a/inventories/host_vars/example_server.yml b/inventories/host_vars/example_server.yml index 8a601fb..23035ee 100644 --- a/inventories/host_vars/example_server.yml +++ b/inventories/host_vars/example_server.yml @@ -14,3 +14,9 @@ var_setted_only_host_vars: "MESSAGE FROM HOST_VARS ONLY" ### roles/dependencies -> !!! One of the users should be at least the one setted at ansible.cfg ### docker_users: [test-user] + +### +### roles/clone_repositories +### +# c3infodesk_printer_repo_clone: true +c3infodesk_printer_repo_new_branch_name: "test_branch" diff --git a/playbook_example_03_clone_repositories.yml b/playbook_example_03_clone_repositories.yml new file mode 100644 index 0000000..d9aff5b --- /dev/null +++ b/playbook_example_03_clone_repositories.yml @@ -0,0 +1,8 @@ +--- +# Runs example for + +- hosts: + - example_servers_group + roles: + # - dependencies + - clone_repositories diff --git a/roles/clone_repositories/README.md b/roles/clone_repositories/README.md new file mode 100644 index 0000000..515d8e2 --- /dev/null +++ b/roles/clone_repositories/README.md @@ -0,0 +1,74 @@ +# clone-repositories + +This ansible-role for dealing with cloning the repositories necessary for deploying the system used from **c3infodesk**. + +## Requirements +- To have [ansible](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html) installed at your system. +- Set your **remote_user** configuration at the **ansible.cfg** file. +- Set your **inventories/host_vars/<TARGET_NAME>** file. + +## Role Variables +Here are the variables setted: + +- ### From: inventories/host_vars/<TARGET_NAME> + Here are the variables that you should be changing for your own deployment. + - **c3infodesk_printer_repo_new_branch_name**: DEFAULT="test_branch" + - The branch name that it will be checked-out for avoiding updating the **main** branch + +- ### From: inventories/group_vars/<TARGET_GROUP> + - **c3infodesk_printer_folder**: DEFAULT="Coding/c3infodesk-printer" + - The folder where to clone the repositories + +- ### From: roles/clone-repositories/defaults/main.yml + - **c3infodesk_printer_repo_clone**: DEFAULT=true + - If it should or not clone the repository. + - **c3infodesk_printer_repo_url**: DEFAULT="https://git.cccv.de/fejao/c3infodesk-printer.git" + - The repository to be cloned. + - **c3infodesk_printer_repo_new_branch_name**: DEFAULT="new_branch_name" + - The branch name to be set after cloning the repository. + + +## Dependencies +The role dependencies are: + - [dependencies(role)](roles/dependencies/README.md) + + +## Example Playbook + +- ### Using the provided example + For using the playbook **playbook_example_03_clone_repositories.yml** file you only nned to: + - Change the user at the **ansible.cfg** file at the field **remote_user** for acessing your target. + - Update the file **inventories/host_vars/example_server.yml** and change the value for **ansible_become_pass** from the **remote_user** + - Update the **inventories/hosts** file and change the **example_server** with the IP address from your target. + + And run the command: +```bash +ansible-playbook -i inventories/hosts playbook_example_03_clone_repositories.yml +``` + +- ### Setting your own example + After setting your variables at **inventories/host_vars/<HOST_NAME>**, you can add this role to your playbook as a regular role. + + Here is an example using the **<HOST_NAME>** as **test_servers** + +```yaml +- hosts: + - test_servers + roles: + - clone_repositories +``` + + And call the playbook as: + +```bash +ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml +``` + + +## License + +MIT / BSD + + +## Author Information + [https://chaos.social/@fejao](https://chaos.social/@fejao) diff --git a/roles/clone_repositories/defaults/main.yml b/roles/clone_repositories/defaults/main.yml new file mode 100644 index 0000000..d4b58de --- /dev/null +++ b/roles/clone_repositories/defaults/main.yml @@ -0,0 +1,14 @@ +--- +# defaults file for clone-repository + +### +### SET ON inventories/group_vars !!! DON'T CHANGE THIS HERE !!! +### +# c3infodesk_printer_folder + +### +### LOCAL +### +c3infodesk_printer_repo_clone: true +c3infodesk_printer_repo_url: "https://git.cccv.de/fejao/c3infodesk-printer.git" +c3infodesk_printer_repo_new_branch_name: "new_branch_name" diff --git a/roles/clone_repositories/meta/main.yml b/roles/clone_repositories/meta/main.yml new file mode 100644 index 0000000..74aa718 --- /dev/null +++ b/roles/clone_repositories/meta/main.yml @@ -0,0 +1,36 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +# dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. +dependencies: + - role: dependencies diff --git a/roles/clone_repositories/tasks/main.yml b/roles/clone_repositories/tasks/main.yml new file mode 100644 index 0000000..d7dbff4 --- /dev/null +++ b/roles/clone_repositories/tasks/main.yml @@ -0,0 +1,10 @@ +--- +# tasks file for clone-repository + +- name: Clone the printer repository + ansible.builtin.import_tasks: printer.yml + when: c3infodesk_printer_repo_clone | bool + +# - name: Clone the questions repository +# ansible.builtin.import_tasks: questions.yml +# when: repo_c3infodesk_clone_questions | bool diff --git a/roles/clone_repositories/tasks/printer.yml b/roles/clone_repositories/tasks/printer.yml new file mode 100644 index 0000000..8aa4703 --- /dev/null +++ b/roles/clone_repositories/tasks/printer.yml @@ -0,0 +1,33 @@ +--- +# tasks file for clone-repository from c3infodesk printer + +- name: PRINTER | Checking if the repository already exists + ansible.builtin.git: + repo: "{{ c3infodesk_printer_repo_url }}" + dest: "{{ c3infodesk_printer_folder }}" + clone: no + update: no + register: check_repository + +- name: PRINTER | Check repository exists answer + ansible.builtin.debug: + msg: "Repository already exists on target" + when: not check_repository.changed + +- name: PRINTER | Clone the printer repository + ansible.builtin.git: + repo: "{{ c3infodesk_printer_repo_url }}" + dest: "{{ c3infodesk_printer_folder }}" + depth: 1 + when: + - check_repository.before is defined + - check_repository.before == None + +- name: PRINTER | Creates and changes to new branch on cloned repository + ansible.builtin.command: + cmd: "git checkout -b '{{ c3infodesk_printer_repo_new_branch_name }}'" + args: + chdir: "{{ c3infodesk_printer_folder }}" + when: + - check_repository.before is defined + - check_repository.before == None diff --git a/roles/dependencies/README.md b/roles/dependencies/README.md index 9c2ad0d..ac95b38 100644 --- a/roles/dependencies/README.md +++ b/roles/dependencies/README.md @@ -9,85 +9,89 @@ This role uses great part of it from [geerlingguy](https://github.com/geerlinggu The original code used can be found at: [https://github.com/geerlingguy/ansible-role-docker](https://github.com/geerlingguy/ansible-role-docker) ## Requirements -To have [ansible](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html) installed at your system. +- To have [ansible](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html) installed at your system. +- Set your **remote_user** configuration at the **ansible.cfg** file. +- Set your **inventories/host_vars/<TARGET_NAME>** file. ## Role Variables Here are the variables setted: -### From: inventories/host_vars/<TARGET_NAME> -Here are the variables that you should be changing for your own deployment -- **docker_users**: DEFAULT="test-user" - - The users to be added to the docker group. - - These users should should contain at least the same user setted on **ansible.cfg** at the **remote_user** -- **ansible_become_pass**: DEFAULT="Please change this" - - The password used from the user setted on **ansible.cfg** at the **remote_user** - - -### From: inventories/group_vars/<TARGET_GROUP> -This role needs no variable setted on **group_vars** - -### From: roles/clone-repositories/defaults/main.yml -Here are the variables used for this role. Please don't change then here but instead in **inventories/host_vars/<TARGET_NAME>** - -- **docker_users** -- **ansible_become_pass** -- **os_dependencies_packages** -- **docker_edition** -- **docker_packages** -- **docker_packages_state** -- **docker_obsolete_packages** -- **docker_obsolete_packages** -- **docker_service_manage** -- **docker_service_state** -- **docker_service_enabled** -- **docker_restart_handler_state** -- **docker_install_compose_plugin** -- **docker_compose_package** -- **docker_compose_package_state** -- **docker_install_compose** -- **docker_compose_version** -- **docker_compose_arch** -- **docker_compose_url** -- **docker_compose_path** -- **docker_add_repo** -- **docker_apt_release_channel** -- **docker_apt_ansible_distribution** -- **docker_apt_arch** -- **docker_apt_repository** -- **docker_apt_ignore_key_error** -- **docker_apt_gpg_key** -- **docker_apt_gpg_key_checksum** -- **docker_apt_filename** -- **docker_yum_repo_url** -- **docker_yum_repo_enable_nightly** -- **docker_yum_repo_enable_test** -- **docker_yum_gpg_key** -- **docker_daemon_options** - -### From: roles/dependencies/vars/main.yml -- **docker_packages** -- **docker_compose_package** +- ### From: inventories/host_vars/<TARGET_NAME> + Here are the variables that you should be changing for your own deployment. + - **docker_users**: DEFAULT="test-user" + - The users to be added to the docker group. + - These users should should contain at least the same user setted on **ansible.cfg** at the **remote_user** + - **ansible_become_pass**: DEFAULT="Please change this" + - The password used from the user setted on **ansible.cfg** at the **remote_user** + + +- ### From: inventories/group_vars/<TARGET_GROUP> + This role needs no variable setted on **group_vars** + +- ### From: roles/clone-repositories/defaults/main.yml + Here are the variables used for this role. Please don't change then here but instead in **inventories/host_vars/<TARGET_NAME>** + + - **docker_users** + - **ansible_become_pass** + - **os_dependencies_packages** + - **docker_edition** + - **docker_packages** + - **docker_packages_state** + - **docker_obsolete_packages** + - **docker_obsolete_packages** + - **docker_service_manage** + - **docker_service_state** + - **docker_service_enabled** + - **docker_restart_handler_state** + - **docker_install_compose_plugin** + - **docker_compose_package** + - **docker_compose_package_state** + - **docker_install_compose** + - **docker_compose_version** + - **docker_compose_arch** + - **docker_compose_url** + - **docker_compose_path** + - **docker_add_repo** + - **docker_apt_release_channel** + - **docker_apt_ansible_distribution** + - **docker_apt_arch** + - **docker_apt_repository** + - **docker_apt_ignore_key_error** + - **docker_apt_gpg_key** + - **docker_apt_gpg_key_checksum** + - **docker_apt_filename** + - **docker_yum_repo_url** + - **docker_yum_repo_enable_nightly** + - **docker_yum_repo_enable_test** + - **docker_yum_gpg_key** + - **docker_daemon_options** + +- ### From: roles/dependencies/vars/main.yml + - **docker_packages** + - **docker_compose_package** + ## Dependencies This role have no dependency from any another role. -# Example Playbook -### Using the provided example -For using the playbook **playbook_example_02_dependencies.yml** file you only nned to: -- Change the user at the **ansible.cfg** file at the field **remote_user** for acessing your target. -- Update the file **inventories/host_vars/example_server.yml** and change the value for **ansible_become_pass** from the **remote_user** -- Update the **inventories/hosts** file and change the **example_server** with the IP address from your target. +## Example Playbook + +- ### Using the provided example + For using the playbook **playbook_example_02_dependencies.yml** file you only nned to: + - Change the user at the **ansible.cfg** file at the field **remote_user** for acessing your target. + - Update the file **inventories/host_vars/example_server.yml** and change the value for **ansible_become_pass** from the **remote_user** + - Update the **inventories/hosts** file and change the **example_server** with the IP address from your target. -And run the command: + And run the command: ```bash ansible-playbook -i inventories/hosts playbook_example_02_dependencies.yml ``` -### Setting your own example -After setting your variables at **inventories/host_vars/<HOST_NAME>**, you can add this role to your playbook as a regular role. +- ### Setting your own example + After setting your variables at **inventories/host_vars/<HOST_NAME>**, you can add this role to your playbook as a regular role. -Here is an example using the **<HOST_NAME>** as **test_servers** + Here is an example using the **<HOST_NAME>** as **test_servers** ```yaml - hosts: @@ -96,16 +100,18 @@ Here is an example using the **<HOST_NAME>** as **test_servers** - dependencies ``` -And call the playbook as: + And call the playbook as: ```bash ansible-playbook -i <INVENTORY> <PLAYBOOK_NAME>.yml ``` + ## License MIT / BSD + ## Author Information  [https://chaos.social/@fejao](https://chaos.social/@fejao) -- GitLab