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
+![fejao logo](../../files/from_authors/fejao_logo_circle.png "fejao") [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
 
 ![fejao logo](../../files/from_authors/fejao_logo_circle.png "fejao") [https://chaos.social/@fejao](https://chaos.social/@fejao)
-- 
GitLab