Compare commits

..

6 Commits

Author SHA1 Message Date
68738386cc fix typo 2023-09-19 13:54:07 +02:00
545c7bd586 rajout ligne de commande adhoc 2023-06-14 10:18:36 +02:00
3940501520 ajout install vim et git 2022-11-15 15:21:48 +01:00
4f1594be9a blockinfile 2022-10-31 14:05:16 +01:00
b794d7bd78 rajout cronjob 2022-10-31 12:26:50 +01:00
1f67b166cb mise au point atelier 2022-10-31 12:14:36 +01:00

100
Readme.md
View File

@@ -1,96 +1,67 @@
# Commandes AdHoc # Commandes AdHoc
## Remarques préliminaires: ## Ligne de commande
le fichier hosts est un fichier d'inventaire ansible contenant mes cibles ```bash
ansible -o -m ping all -u root -k -K
```
## Télécharger des fichiers sur la cible avec get_url 1. identifier tous les éléments de cette ligne de commande
2. expliciter toutes les options utilisées
2. faire le lien entre option et directives de configuration (ansible.cfg)
3. si on omet l'option "-u root", avec quelle identité se fera la connexion ?
## Tâches d'administration système I
1. Lister sur le pad les tâches d'administration système que nous réalisons au quotidien, et que nous souhaiterions automatiser
2. Tenter, pour chaque tâche, d'identifier le(s) module(s) ansible que l'on pourra utiliser
## Tâches d'administration système II
### Télécharger des fichiers sur la cible avec get_url
Récupérer dans /tmp le fichier : https://starship.rs/install.sh Récupérer dans /tmp le fichier : https://starship.rs/install.sh
```bash ### Exécuter des scripts à distance avec command
ansible -i hosts -o -u root all -m get_url -a "url=https://starship.rs/install.sh dest=/tmp mode=0700"
```
## Exécuter des scripts à distance avec command
Exécuter le script précédemment récupéré, uniquement si le fichier /usr/local/bin/starship n'existe pas déjà Exécuter le script précédemment récupéré, uniquement si le fichier /usr/local/bin/starship n'existe pas déjà
```bash ### Déployer un fichier avec copy
ansible -i hosts -o -u root all -m command -a 'cmd="/tmp/install.sh --yes" creates="/usr/local/bin/starship"'
#ou, si on n'a pas pensé à rendre le fichier exécutable précédemment:
ansible -i hosts -o -u root all -m command -a 'cmd="sh /tmp/install.sh --yes" creates="/usr/local/bin/starship"'
```
## Déployer un fichier avec copy
S'assurer de la présence du fichier /etc/profile.d/zstarship.sh avec le contenu suivant: S'assurer de la présence du fichier /etc/profile.d/zstarship.sh avec le contenu suivant:
```bash ```bash
'eval "$(/usr/local/bin/starship init bash)"' eval "$(/usr/local/bin/starship init bash)"
``` ```
### Installer des packages avec git
Pour un contenu aussi léger, pas besoin d'avoir à maintenir un fichier local comme source, on va plutôt utiliser l'argument _content_: S'assurer que les paquets _vim_ et _git_ soit installées sur les cibles.
```bash ### Cloner des dépôts avec git
ansible -i hosts -o -u root all -m copy -a 'content="eval \"$(/usr/local/bin/starship init bash)\"" dest=/etc/profile.d/zstarship.sh'
```
⚠️ aux quotes !
## Cloner des dépôts avec git
Cloner le dépôt https://infra.opendoor.fr/git/tom/vim_formation.git dans /opt/vim/ Cloner le dépôt https://infra.opendoor.fr/git/tom/vim_formation.git dans /opt/vim/
```bash
ansible -i hosts -o -u root all -m git -a "repo=https://infra.opendoor.fr/git/tom/vim_formation.git dest=/opt/vim"
```
## S'assurer de l'absence de fichier avec file ### S'assurer de l'absence de fichier avec file
Supprimer le fichier /etc/vimrc existant Supprimer le fichier /etc/vimrc existant
```bash ### Gérer des liens symboliques, toujours avec file
ansible -i hosts -o -u root all -m file -a "path=/etc/vim state=absent"
```
## Gérer des liens symboliques, toujours avec file
Faire un lien symbolique /etc/vimrc vers /opt/vim/vimrc Faire un lien symbolique /etc/vimrc vers /opt/vim/vimrc
```bash ### Modifier des fichiers avec lineinfile
ansible -i hosts -o -u root all -m file -a "path=/etc/vimrc state=link src=/opt/vim/vimrc"
```
## Modifier des fichiers avec lineinfile
dans /etc/vimrc, assurez-vous que la ligne 62 (qui commence par set list listchars...) soit _décommentée_ dans /etc/vimrc, assurez-vous que la ligne 62 (qui commence par set list listchars...) soit _décommentée_
```bash ### Planifier l'exécution de la tâche "_Exécuter des scripts à distance avec command_" toutes les semaines le dimanche soir avec cron
ansible -i hosts -o -u root all -m lineinfile -a 'path=/etc/vimrc regex="^\"(set list listchars.*)" line=\1 backrefs=true'
#ou en recopiant la ligne entière
ansible -i hosts -o -u root all -m lineinfile -a 'path=/etc/vimrc regex="^\"set list listchars.*" line=set list listchars=nbsp:▶,tab:··,trail:¤,extends:▶,precedes:◀'
```
## Planifier l'exécution de la tâche "_Exécuter des scripts à distance avec command_" toutes les semaines le dimanche soir avec cron Comment éviter que cette tâche soit programmée exactement à la même heure pour toutes les machines cibles ?
```bash ### Rajouter des blocs de textes dans un fichier avec blockinfile
ansible -i hosts -o -u root -m cron -a 'name="update starship" cron_file="starship" hour="12" minute="01" weekday="sun" job="sh /tmp/install.sh -y" user="root'
```
```bash
# avec distribution horaire aléatoire ⚠️ principe d'indempotence non respecté
ansible -i hosts -o -u root -m cron -a 'name="update starship" cron_file="starship" hour="12" minute="{{ 59 | random() }}" weekday="sun" job="sh /tmp/install.sh -y" user="root"'
```
```bash
# avec distribution horaire aléatoire principe d'indempotence respecté
ansible -i hosts -o -u root -m cron -a 'name="update starship" cron_file="starship" hour="12" minute="{{ 59 | random(seed=inventory_hostname) }}" weekday="sun" job="sh /tmp/install.sh -y" user="root"'
```
## Rajouter des blocs de textes dans un fichier avec blockinfile
Rajouter dans ~/.ssh/config, sur la machine *pilote* les infos suivantes: Rajouter dans ~/.ssh/config, sur la machine *pilote* les infos suivantes:
@@ -99,10 +70,3 @@ Host machinecible #cf variable inventory_hostname
User: formation User: formation
Port 22 Port 22
``` ```
```bash
ansible -oi localhost all -u formation -m blockinfile -a 'path=/home/formation//.ssh/config block="Host {{ inventory_hostname }}\n\tPort 22" create=true marker="# {mark} ssh config for {{ inventory_hostname }}"'
```
⚠️ on travaile sur *localhost*