diff --git a/README.md b/README.md index 3edfbf7..cbdcb2d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,67 @@ -# role_modele +# role_drone_cli -Modèle \ No newline at end of file +Rôle de déploiement de l'exécutable CLI de drone.io. + +## Variables + +### drone_cli_url + +URL pointant vers l'API de github.com fournissant le lien de téléchargement de l'archive. + +Valeur par défaut: `https://api.github.com/repos/harness/drone-cli/releases/latest` + +### drone_cli_architecture + +Nécessaire pour télécharger la bonne archive depuis github.com.
+Les architectures disponibles sont visibles dans [la liste de release du dépôt](https://github.com/harness/drone-cli/releases). + +Valeur par défaut: `arm64` + +### drone_cli_server_url + +URL vers le serveur drone.io. + +Valeur par défaut: aucune + +### drone_cli_server_token + +Clef pour communiquer avec le serveur drone.io. + +Valeur par défaut: aucune + +### drone_cli_commands_args + +Liste des arguments passés à la commande `drone`. + +Valeur par défaut: aucune + +## Exemple d'utilisation + +### inventory.yml + +```yaml +--- + +all: + hosts: + host1.ykn.local: +``` + +### host_vars/host1.ykn.local.yml + +```yaml +--- + +drone_cli_architecture: "amd64" +dron +``` + +### playbook.yml + +```yaml +--- + +- hosts: 'all' + roles: + - name: drone_cli +``` diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..04b9f03 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,10 @@ +--- +# defaults file for drone_cli + +drone_cli_architecture: "arm64" +drone_cli_url: https://api.github.com/repos/harness/drone-cli/releases/latest + +drone_cli_server_url: "" +drone_cli_server_token: "" + +drone_cli_commands_args: [] diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..cf5f3ed --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,8 @@ +--- +# handlers file for drone_cli + +- name: Installer la commande + ansible.builtin.command: + chdir: /opt + cmd: install -t /usr/local/bin drone + become: true diff --git a/tasks/configuration.yml b/tasks/configuration.yml new file mode 100644 index 0000000..79adc66 --- /dev/null +++ b/tasks/configuration.yml @@ -0,0 +1,28 @@ +--- +# tasks file for drone_cli + +- name: Récupérer les informations + ansible.builtin.command: + cmd: drone {{ item.type }} info {{ item.target }} {{ item.name }} + environment: + DRONE_SERVER: "{{ drone_cli_server_url }}" + DRONE_TOKEN: "{{ drone_cli_server_token }}" + register: info + changed_when: info.rc != 0 + diff: false + +- name: Déterminer qu'il faut mettre à jour + ansible.builtin.set_fact: + cmd_action: update + when: + - info.rc == 0 + - item.type in cmd_updatable + +- name: Exécuter les commandes + ansible.builtin.command: + cmd: drone {{ item.type }} {{ cmd_action }} {{ item.target }} {{ item.name }} {{ item.data }} + environment: + DRONE_SERVER: "{{ drone_cli_server_url }}" + DRONE_TOKEN: "{{ drone_cli_server_token }}" + changed_when: info.rc != 0 + diff: false diff --git a/tasks/installation.yml b/tasks/installation.yml new file mode 100644 index 0000000..ade5d7d --- /dev/null +++ b/tasks/installation.yml @@ -0,0 +1,32 @@ +--- +# tasks file for drone_cli + +- name: Récupérer le contenu du fichier de version + ansible.builtin.uri: + url: "{{ drone_cli_url }}" + return_content: true + follow_redirects: all + register: releases + +- name: Extraire l'URL du paquet + ansible.builtin.set_fact: + browser_download_url: > + {{ + releases.json.assets | + selectattr('browser_download_url', 'search', 'linux') | + selectattr('browser_download_url', 'search', drone_cli_architecture) | + map(attribute='browser_download_url') + }} + +- name: Extraire le runner + ansible.builtin.unarchive: + src: "{{ browser_download_url | first }}" + dest: /opt/ + remote_src: true + list_files: true + mode: u=rwX,g=rX,o=rX + become: true + notify: Installer la commande + +- name: Exécuter les handlers + ansible.builtin.meta: flush_handlers diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..39bf0b6 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for drone_cli + +- name: Importer les tâches d'installation + tags: installation + ansible.builtin.import_tasks: installation.yml + +- name: Inclure les tâches de configuration + tags: configuration + ansible.builtin.include_tasks: configuration.yml + when: + - drone_cli_server_url | length > 0 + - drone_cli_server_token | length > 0 + - drone_cli_commands | length > 0 + loop: "{{ drone_cli_commands }}" + run_once: true diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 0000000..20c8df1 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,8 @@ +--- +# vars file for drone_cli + +cmd_action: add +cmd_updatable: + - secret + - orgsecret + - template