3 Commits

Author SHA1 Message Date
42a02ed774 mise au point solution abr 2022-11-14 15:44:35 +01:00
85f0fbea9d atelier variable abr - solution 2022-11-01 18:57:41 +01:00
1f6071904d atelier variable abr - instructions 2022-11-01 18:49:15 +01:00
6 changed files with 230 additions and 14 deletions

View File

@@ -1,32 +1,48 @@
## Variables
*Tâche*: Utiliser des variables pour assouplir l'utilisation d'un rôle
*Tâche*: Utiliser des variables pour assouplir l'utilisation d'un playbook
*Condition*: quand on souhaite adapter un rôle ou un playbook à une situation différente, sans avoir à gérer une autre version du playbook.
*Condition*: quand on souhaite adapter un playbook ou un playbook à une situation différente, sans avoir à gérer une autre version du playbook.
*Norme*: En utilisant les variables
### Prérequis
### Préparation
Avoir à disposition le playbook
### Atelier 1 - faciliter l'exploitation et la maintenance d'un playbook
Récupérer le rôle ansible_apache_formation:
Identifier toutes les modifications à faire au playbook _setup.yml_ si on veut changer le nom du compte à créer.
```bash
git clone https://github.com/tconstans/ansible_apache_formation.git
```
Comment simplifier une future modification de cet emplacement ?
### Pratique:
### Atelier 2 - variables de play
Ce rôle présente quelques problèmes à identifier.
Se mettre d'accord sur le nom de variable à utiliser.
Remplacer ces éléments répétés dans les différents éléments par des variables judicieusement nommées.
Remplacer toutes les occurences du nom d'utilisateur par la variable
Tenter de définir la valeur de ces variables. On s'intéressera notamment à la problématique: comment définir la variable "nom du site" pour que l'on puisse héberger un site différent par machine ?
Rajouter une section _vars_ au playbook dans laquelle sera définie notre variable
### Performance
Voir fichier setup_2.yml
Il est désormais facile d'adapter le rôle pour qu'il traite un autre site que www.orsys.fr
### Atelier 3 - variables d'inventaire
Solution: voir branche "solution"
Comment faire pour que à chaque machine soit associé un compte différent ?
Voir fichier setup_3.yml et host_vars/centos1.formation.opendoor.fr
### Atelier 4 - variables de type liste
Comment faire si je veux créer plusieurs comptes utilisateur sur chaque machine ?
Voir fichier setup_4.yml et host_vars/centos1.formation.opendoor.fr
### Atelier 5 - variables de type tableau associatif
Comment faire si je veux que ces comptes utilisateurs aient des mots de passe et des groupes différents ?
Voir fichier setup_5.yml et host_vars/centos1.formation.opendoor.fr
⚠️ pour que la solution fonctionne, il faut que le fichier répertoire host_vars et son contenu (centos1.formation.opendoor.fr) soit dans le même répertoire que votre fichier d'inventaire.

View File

@@ -0,0 +1,10 @@
setup_user: toto
setup_users:
- tartempion
- ansible
- foobar
setup_user_hash:
- { login: plop, password: "{{ '123Soleil!' | password_hash('sha512') }}", group: wheel }
- { login: plip, password: "{{ '123Soleil!' | password_hash('sha512') }}", group: users }

48
setup_2.yml Normal file
View File

@@ -0,0 +1,48 @@
---
- name: setup target to be managed by ansible
hosts: cibles
vars:
setup_user: jabba
tasks:
- name: warn people
lineinfile:
path: /etc/motd
create: yes
line: "Host is managed by ansible, manual interaction not recommended"
state: present
- name: history
lineinfile:
path: /etc/history
line: "{{ '%Y-%m-%d' | strftime }} - {{ ansible_play_name }}"
state: present
create: true
- name: generate ssh keys
openssh_keypair:
path: "~/.ssh/id_rsa"
size: 2048
delegate_to: localhost
become: false
- name: create account
user:
name: "{{ setup_user }}"
password: "{{ '123Soleil%' | password_hash('sha512',65534|random(seed=inventory_hostname) | string) }}"
create_home: yes
home: /home/{{ setup_user }}
- name: configure sudo
copy:
content: "{{ setup_user }} ALL=(ALL) NOPASSWD: ALL"
dest: /etc/sudoers.d/ansible
validate: "/usr/sbin/visudo -cf %s"
- name: deploy ssh key
authorized_key:
user: "{{ setup_user }}"
key: "{{ item }}"
loop:
- "{{ lookup( 'file', '~/.ssh/id_rsa.pub' ) }}"
- "https://infra.opendoor.fr/id_rsa.pub"

46
setup_3.yml Normal file
View File

@@ -0,0 +1,46 @@
---
- name: setup target to be managed by ansible
hosts: cibles
tasks:
- name: warn people
lineinfile:
path: /etc/motd
create: yes
line: "Host is managed by ansible, manual interaction not recommended"
state: present
- name: history
lineinfile:
path: /etc/history
line: "{{ '%Y-%m-%d' | strftime }} - {{ ansible_play_name }}"
state: present
create: true
- name: generate ssh keys
openssh_keypair:
path: "~/.ssh/id_rsa"
size: 2048
delegate_to: localhost
become: false
- name: create account
user:
name: "{{ setup_user }}"
password: "{{ '123Soleil%' | password_hash('sha512',65534|random(seed=inventory_hostname) | string) }}"
create_home: yes
home: /home/{{ setup_user }}
- name: configure sudo
copy:
content: "{{ setup_user }} ALL=(ALL) NOPASSWD: ALL"
dest: /etc/sudoers.d/ansible
validate: "/usr/sbin/visudo -cf %s"
- name: deploy ssh key
authorized_key:
user: "{{ setup_user }}"
key: "{{ item }}"
loop:
- "{{ lookup( 'file', '~/.ssh/id_rsa.pub' ) }}"
- "https://infra.opendoor.fr/id_rsa.pub"

48
setup_4.yml Normal file
View File

@@ -0,0 +1,48 @@
---
- name: setup target to be managed by ansible
hosts: cibles
tasks:
- name: warn people
lineinfile:
path: /etc/motd
create: yes
line: "Host is managed by ansible, manual interaction not recommended"
state: present
- name: history
lineinfile:
path: /etc/history
line: "{{ '%Y-%m-%d' | strftime }} - {{ ansible_play_name }}"
state: present
create: true
- name: generate ssh keys
openssh_keypair:
path: "~/.ssh/id_rsa"
size: 2048
delegate_to: localhost
become: false
- name: create account
user:
name: "{{ item }}"
password: "{{ '123Soleil%' | password_hash('sha512',65534|random(seed=inventory_hostname) | string) }}"
create_home: yes
home: /home/{{item}}
loop: "{{ setup_users }}"
- name: configure sudo
lineinfile:
line: "{{ item }} ALL=(ALL) NOPASSWD: ALL"
path: /etc/sudoers.d/ansible
validate: "/usr/sbin/visudo -cf %s"
loop: "{{ setup_users }}"
- name: deploy ssh key
authorized_key:
user: "{{ item[0] }}"
key: "{{ item[1] }}"
with_nested:
- "{{ setup_users }}"
- [ "{{ lookup( 'file', '~/.ssh/id_rsa.pub' ) }}", "https://infra.opendoor.fr/id_rsa.pub" ]

48
setup_5.yml Normal file
View File

@@ -0,0 +1,48 @@
---
- name: setup target to be managed by ansible
hosts: cibles
tasks:
- name: warn people
lineinfile:
path: /etc/motd
create: yes
line: "Host is managed by ansible, manual interaction not recommended"
state: present
- name: history
lineinfile:
path: /etc/history
line: "{{ '%Y-%m-%d' | strftime }} - {{ ansible_play_name }}"
state: present
create: true
- name: generate ssh keys
openssh_keypair:
path: "~/.ssh/id_rsa"
size: 2048
delegate_to: localhost
become: false
- name: create account
user:
name: "{{ item.login }}"
password: "{{ item.password }}"
create_home: yes
home: /home/{{item.login }}
loop: "{{ setup_user_hash }}"
- name: configure sudo
lineinfile:
line: "{{ item.login }} ALL=(ALL) NOPASSWD: ALL"
path: /etc/sudoers.d/ansible
validate: "/usr/sbin/visudo -cf %s"
loop: "{{ setup_user_hash }}"
- name: deploy ssh key
authorized_key:
user: "{{ item[0].login }}"
key: "{{ item[1] }}"
with_nested:
- "{{ setup_user_hash }}"
- [ "{{ lookup( 'file', '~/.ssh/id_rsa.pub' ) }}", "https://infra.opendoor.fr/id_rsa.pub" ]