Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68738386cc | |||
| 545c7bd586 | |||
| 3940501520 | |||
| 4f1594be9a | |||
| b794d7bd78 | |||
| 1f67b166cb |
111
Readme.md
111
Readme.md
@@ -1,111 +1,67 @@
|
|||||||
# Commandes AdHoc
|
# Commandes AdHoc
|
||||||
|
|
||||||
## Lignes de commande:
|
## Ligne de commande
|
||||||
|
|
||||||
1. et 2. -o (affichage sur 1 ligne) -m ping (choix du module) all (cible - référencé dans l'inventaire) -u root (identité de connexion) -k (authentification ssh par mot de passe) -K (élévation de privilèges avec demande du mot de passe)
|
```bash
|
||||||
3. -u <=> remote_user ; -k <=> ask_pass ; -K <=> become_ask_pass
|
ansible -o -m ping all -u root -k -K
|
||||||
4. soit avec la valeur de l'option remote_user (si définie), soit avec le compte qui lance la commande
|
```
|
||||||
|
|
||||||
|
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élécharger des fichiers sur la cible avec get_url
|
## 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 -o 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 -o all -m command -a '/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 -o all -m command -a '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 -o all -m copy -a 'content="eval \"$(/usr/local/bin/starship init bash)\"" dest=/etc/profile.d/zstarship.sh'
|
|
||||||
```
|
|
||||||
|
|
||||||
⚠️ aux quotes !
|
|
||||||
|
|
||||||
|
|
||||||
## S'assurer de la présende de git sur les cibles
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible -o all -m package -a 'name=git state=present'
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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 -o all -m git -a "repo=https://infra.opendoor.fr/git/tom/vim_formation.git dest=/opt/vim"
|
|
||||||
```
|
|
||||||
|
|
||||||
## S'assurer de la présende de vim sur les cibles
|
### S'assurer de l'absence de fichier avec file
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible -o all -m package -a 'name=vim state=present'
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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 -o all -m file -a "path=/etc/vimrc 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 -o 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 -o all -m lineinfile -a 'path=/etc/vimrc regex="^\"(set list listchars.*)" line=\1 backrefs=true'
|
|
||||||
#ou en recopiant la ligne entière
|
|
||||||
ansible -o 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 all -o -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 all -o -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 all -o -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:
|
||||||
|
|
||||||
@@ -114,10 +70,3 @@ Host machinecible #cf variable inventory_hostname
|
|||||||
User: formation
|
User: formation
|
||||||
Port 22
|
Port 22
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
|
||||||
ansible -o 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*, donc l'exemple n'est pas très pertinent
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user