Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • vimazeno/blog.limos.fr
  • matrossevi/blog.limos.fr
  • borlonjo/blog.limos.fr
3 results
Select Git revision
Show changes
Showing
with 1231 additions and 0 deletions
content/slides/cri/images/aws.png

24.4 KiB

content/slides/cri/images/batiments.png

71.8 KiB

content/slides/cri/images/cri.jpeg

1.05 MiB

content/slides/cri/images/devops-toolchain.png

61.8 KiB

content/slides/cri/images/devops-tools.png

453 KiB

content/slides/cri/images/gitlab.png

3.6 KiB

content/slides/cri/images/preservatif-darvador.jpg

30.5 KiB

content/slides/cri/images/proxmox.png

3.39 KiB

content/slides/cri/images/stack.png

51.4 KiB

content/slides/cri/images/terraform.png

6.07 KiB

content/slides/cri/images/vagrant.png

449 KiB

content/slides/cri/images/vault-auth.png

33.4 KiB

content/slides/cri/images/vault-ci.png

30.9 KiB

content/slides/cri/images/vault-secrets-engines.png

29.5 KiB

content/slides/cri/images/vault.png

42.1 KiB

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>manifest</title>
<link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css">
<!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="md/manifest.md"
data-separator="^\n\n\n"
data-separator-vertical="^\n\n"
data-separator-notes="^Note:"
data-charset="utf-8">
</section>
</div>
</div>
<script src="../../node_modules/reveal.js/lib/js/head.min.js"></script>
<script src="../../node_modules/reveal.js/js/reveal.js"></script>
<script>
// More info about config & dependencies:
// - https://github.com/hakimel/reveal.js#configuration
// - https://github.com/hakimel/reveal.js#dependencies
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: false,
dependencies: [
{ src: '../../node_modules/reveal.js/plugin/markdown/marked.js' },
{ src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' },
{ src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true },
{ src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
]
});
</script>
</body>
</html>
## boilerplate
[ansible-role-boilerplate](https://gitlab.isima.fr/cri/ansible-role-boilerplate)
* Tous les rôles dervaient se tester aussi simplement que ça, en standalone, sans avoir peur de rien casser
* En pratique il faut parfois y réfléchir un peu
* path vault
* point de montage
* dépendance à des services existants
## Directory Layout
[Directory Layout (ansible best practice)](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout)
```shell
+ tasks/ #
- main.yml # <- tasks file can include smaller files if warranted
+ handlers/ #
- main.yml # <- handlers file
+ templates/ # <- files for use with the template resource
- ntp.conf.j2 # <- templates end in .j2
+ files/ #
- bar.txt # <- files for use with the copy resource
- foo.sh # <- script files for use with the script resource
+ vars/ #
- main.yml # <- variables associated with this role
+ defaults/ #
- main.yml # <- default lower priority variables for this role
+ meta/ #
- main.yml # <- role dependencies
+ library/ # roles can also include custom modules
+ module_utils/ # roles can also include custom module_utils
+ lookup_plugins/ # or other types of plugins, like lookup in this case
```
## Directory Layout Bonus
* Vagrantfile -> cross OS
* vagrant.rb
* role.yml
* .gitignore
* README.md
## TODO
pacakger les box vagrant de manière synchrone avec les templates pve
\ No newline at end of file
# ansible
![ansible](images/ansible.png "ansible")<!-- .element width="30%" -->
## ansible
* outil de
* provisioning
* gestion de config
* déploiemenet d'application
* racheté par RedHat en octobre 2015
* outils équivalents
* [puppet](https://puppet.com/), [chef](https://www.chef.io/#/), [SaltStack](https://www.saltstack.com/) ...
## ansible Φ
* automatisation
* réutilisabilité
* parallélisation
* idempotence
<br />
#### toute intervention manuelle sur un système est une faute ...<!-- .element class="fragment" -->
## ... GRAVE!<!-- .element class="fragment" -->
## ansible
* écrit en python
* python 2 par défaut
* marche bien en python 3 <i class="fa fa-hand-o-left" aria-hidden="true"></i>
* virtualenv
[<i class="fa fa-book" aria-hidden="true"></i> ansible doc](https://docs.ansible.com/)
## ansible
* prérequis
* sur la machine pilote (mgmt node)
* ansible (donc python)
* sur le(s) noeud(s)
* une connextion ssh ou PowerShell
* python
## ansible
[![gestion ansible](images/ansible_mgmt.png "gestion ansible")](https://medium.com/formcept/configuration-management-and-continuous-deployment-cd0892dce998)
## terminologie
* **mgmt node** (machine pilote)
* machine sur laquelle ansible est installé
* pilote la configuration de toutes les machines de l'inventaire
* **inventory** (inventaire)
* fichier contenant les ip ou les noms de domaine de toutes les machines à configurer
* **playbook**
* gère la configuration à déployer sur chaque machine
## terminologie
* **task**
* fichier où sont définies les actions réalisées par le playbook
* **module**
* actions plus ou moins complexes, utilisables à partir des **tasks**
* ansible possède de nombreux [<i class="fa fa-book" aria-hidden="true"></i> modules natifs](https://docs.ansible.com/ansible/latest/modules/modules_by_category.html)
* il est possible d'écrire ses propres modules.
* **role**
* permet d'organiser les playbooks en parties claires et réutilisables
## terminologie
* **facts**
* information collectée par ansible sur le système d'une machine à configurer
* peuvent être enrichis
* **handlers**
* similaire aux **tasks** mais appelables à partir d'une **task**
* typiquement redémarrage de service par exemple
## inventory
* liste des machines accessibles via ssh
* organisées par groupes
* possibilité de fixer des configurations
* pour tous / par groupe / par machine
* possibilité de déclarer des variables
* pour tous / par groupe / par machine
* fichier texte au format *ini*
[<i class="fa fa-book" aria-hidden="true"></i> inventory](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html)
## inventory
dans `./inventory.ini`
```ini
[criprod]
ansible-test.criprod.isima.fr
[ovh]
ansible-test.ovh.isima.fr
[criprod:vars]
environment = production
[all:vars]
ansible_python_interpreter = /usr/bin/python3
ansible_user = limosadm
```
## inventory
```
Host ansible-test.criprod.isima.fr
User limosadm
Hostname 192.168.220.243
IdentityFile ~/.ssh/ids/duncan.isima.fr/limosadm/id_rsa
Host ansible-test.ovh.isima.fr
User limosadm
Hostname 10.10.100.2
IdentityFile ~/.ssh/ids/duncan.isima.fr/limosadm/id_rsa
ProxyCommand ssh duncan -W %h:%p
```
la connexion ssh doit se faire sans mot de passe sur le système
```shell
export ANSIBLE_HOST_KEY_CHECKING=False
```
## ad-hoc command
```shell
$ ansible criprod --inventory-file=inventory.ini \
-a "/usr/bin/uptime"
other1.isima.fr | CHANGED | rc=0 >>
13:12:02 up 21 days, 21:11, 2 users, load average: 0.13, 0.88, 0.13
pvecriprod2.isima.fr | CHANGED | rc=0 >>
16:18:08 up 41 days, 23:11, 3 users, load average: 0.63, 0.18, 0.10
py.criprod.isima.fr | CHANGED | rc=0 >>
15:18:15 up 1 day, 21:51, 1 user, load average: 0.13, 0.03, 0.01
gitlab-runner1.criprod.isima.fr | CHANGED | rc=0 >>
15:18:15 up 1 day, 22:14, 1 user, load average: 0.00, 0.00, 0.00
```
## ad-hoc command
fonctionne avec les modules ansible
```shell
$ ansible ovh --inventory-file=inventory.ini \
--module-name ping
ansible-test.ovh.isima.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
```
avec le module raw python n'est pas nécessaire ;)
```shell
ansible ovh --inventory-file=inventory.ini \
-m raw -a "sudo apt update && sudo apt install -y python"
```
## ad-hoc command
* [<i class="fa fa-book" aria-hidden="true"></i> ad-hoc command](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html)
* [Parallelism and Shell Commands](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#parallelism-and-shell-commands)
* [File Transfer](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#file-transfer)
* [Managing Packages](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#managing-packages)
* [Users and Groups](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#users-and-groups)
* [Deploying From Source Control](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#deploying-from-source-control)
* [Managing Services](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#managing-services)
* [Time Limited Background Operations](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#time-limited-background-operations)
* [Gathering Facts](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html#gathering-facts)
## playbook
[<i class="fa fa-book" aria-hidden="true"></i> playbooks](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html)
my-playbook.yml
```yaml
- name: my-playbook # ce que vous voulez
hosts: ovh # ou all
# ou n'importe quel nom de machine
# ou n'importe quel nom de groupe
remote_user: limosadm # prioritaire sur ansible_user de l'inventaire
```
## playbook
```shell
$ ansible-playbook my-playbook.yml \
--inventory-file=inventory.ini
```
* exécute le playbook
* sur toutes les machines définies dans `hosts:`
* en parallèle
```shell
PLAY [my-playbook] ****************************************************************************
TASK [Gathering Facts] ************************************************************************
ok: [ansible-test.ovh.isima.fr]
PLAY RECAP ************************************************************************************
ansible-test.ovh.isima.fr : ok=1 changed=0 unreachable=0 failed=0
```
## variables
* nommage
* pas de `-` pas de `.`
* pas de numérique pure
## variables
`my-playbook.yml`
```yaml
- name: my-playbook
hosts: ovh
remote_user: limosadm
vars:
awesomevar: awesome
```
`group_vars/all.yml`
```yaml
coolvar: Coool
```
## variables
[<i class="fa fa-book" aria-hidden="true"></i> debug](https://docs.ansible.com/ansible/latest/modules/debug_module.html)
```yaml
tasks:
- name: display awesome message
debug:
msg: "{{ awesomevar }}"
- name: display cool message
debug:
msg: "{{ coolvar }}"
```
## variables
```shell
PLAY [my-playbook] ****************************************************************************
TASK [Gathering Facts] ************************************************************************
ok: [ansible-test.ovh.isima.fr]
TASK [display awesome message] ****************************************************************
ok: [ansible-test.ovh.isima.fr] => {
"msg": "awesome"
}
TASK [display cool message] *******************************************************************
ok: [ansible-test.ovh.isima.fr] => {
"msg": "Coool"
}
PLAY RECAP ************************************************************************************
ansible-test.ovh.isima.fr : ok=3 changed=0 unreachable=0 failed=0
```
## variables
lit une valeur à partir Vault (<strike>`ansible-vault`</strike>)
```yaml
vars_prompt:
- name: "name"
prompt: "what is your name?"
```
les [<i class="fa fa-book" aria-hidden="true"></i> var_prompts](https://docs.ansible.com/ansible/latest/user_guide/playbooks_prompts.html)
permettent de lire les variables à partir de l'entrée standard.
## variables
* role
* [<i class="fa fa-book" aria-hidden="true"></i> `default`](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#role-default-variables)
* [<i class="fa fa-book" aria-hidden="true"></i> inventaire](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#defining-variables-in-inventory)
* [<i class="fa fa-book" aria-hidden="true"></i> `group_vars`, `host_vars`, ou `inventaire.ini`](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#hosts-and-groups)
* [<i class="fa fa-book" aria-hidden="true"></i> playbook](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#defining-variables-in-a-playbook)
* [<i class="fa fa-book" aria-hidden="true"></i> ligne de commande](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#passing-variables-on-the-command-line)
#### [précédence des variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)
## facts
* valeurs collectées par ansible à l'exécution du playbook
```yaml
- name: display hostname
debug:
msg: "System {{ inventory_hostname }}"
- name: display os family
debug:
msg: "comes from family {{ ansible_os_family }}"
- name: HOSTVARS (ANSIBLE GATHERED, group_vars, host_vars)
debug:
msg: "{{ hostvars | to_yaml }}"
```
[<i class="fa fa-book" aria-hidden="true"></i> Variables discovered from systems: Facts](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables-discovered-from-systems-facts)
## jinja
[<i class="fa fa-book" aria-hidden="true"></i> templating](https://docs.ansible.com/ansible-container/container_yml/template.html)
utilisable partout (playbook, role, tasks, template)
## filters
[<i class="fa fa-book" aria-hidden="true"></i> filters](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html)
```yaml
"{{ item_path[:4] | replace('/', '-') }}"
```
* renvoie le contenu de la variable (un path)
* sans les 4 derniers caractères
* avec les `/` remplacés par des `-`
[<i class="fa fa-book" aria-hidden="true"></i> developing filters](https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#developing-particular-plugin-types)
## lookup
[<i class="fa fa-book" aria-hidden="true"></i> lookup](https://docs.ansible.com/ansible/latest/plugins/lookup.html)
```yaml
vars:
file_contents: "{{lookup('file', 'path/to/file.txt')}}"
```
```yaml
- name: lit un secret dans vault (mais on fera pas comme ça)
debug:
msg: "{{ lookup('hashi_vault', 'secret=secret/hi:value token=xxx url=http://myvault')}}"
```
```yaml
- name: lit une variable d'environnement sur le noeud pilote
debug:
msg: "{{ lookup('env','PVE_NODE') }}"
```
[<i class="fa fa-book" aria-hidden="true"></i> lookup list](https://docs.ansible.com/ansible/latest/plugins/lookup.html#plugin-list)
[<i class="fa fa-book" aria-hidden="true"></i> developing lookups](https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html#developing-particular-plugin-types)
## task
[<i class="fa fa-book" aria-hidden="true"></i> loop](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html)
```yaml
- user:
name: "{{ item }}"
state: present
loop:
- testuser1
- testuser2
loop_control:
index_var: key_index
```
* marche avec
* n'importe quelle variable itérable
* [fileglob](https://docs.ansible.com/ansible/latest/plugins/lookup/fileglob.html) - fichiers par pattern
* [filetree](https://docs.ansible.com/ansible/latest/plugins/lookup/filetree.html) - tous les fichiers récursivement
* ...
## task
[<i class="fa fa-book" aria-hidden="true"></i> when](https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html)
[<i class="fa fa-book" aria-hidden="true"></i> conditions](https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html)
```yaml
- name: affiche un message sur la vezrison de l'os
shell: echo "only on Red Hat 6, derivatives, and later"
when: |
ansible_facts['os_family'] == "RedHat"
and ansible_facts['lsb']['major_release']|int >= 6
```
conditions jinja, à la python:
* not, is, empty, in ...
## ignore_errors
* permet de continuer l'exécution du playbook
* même en cas de retour d'erreur d'une commande
```yaml
- name: get mysqladmin status
shell: mysqladmin status
ignore_errors: True
```
## failed_when
* permet de forcer à stopper l'exécution du playbook
* sur une condition
```yaml
- name: get mysqladmin
shell: mysqladmin status
failed_when: "'FAILED' in command_result.stderr"
```
[<i class="fa fa-book" aria-hidden="true"></i> fail - Fail with custom message](https://docs.ansible.com/ansible/latest/modules/fail_module.html)
* parfois ignorer l'erreur ne suffit pas pour continuer
* il faut ajouter `failed_when`
```yaml
- name: get mysqladmin
shell: mysqladmin status
ignore_errors: True
failed_when: no
```
## [command modules](https://docs.ansible.com/ansible/latest/modules/list_of_commands_modules.html)
* [<i class="fa fa-book" aria-hidden="true"></i> raw](https://docs.ansible.com/ansible/latest/modules/raw_module.html)
* n'utilise que ssh et pas python
* permet d'installer python
* [<i class="fa fa-book" aria-hidden="true"></i> command](https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module)
* [<i class="fa fa-book" aria-hidden="true"></i> shell](https://docs.ansible.com/ansible/latest/modules/shell_module.html)
* comme **command** mais au travers d'un shell
```yaml
- name: redirige la sortie de somescript.sh dans somelog.txt
shell: somescript.sh >> somelog.txt
args:
chdir: somedir/ifcon
creates: somelog.txt
```
## register
[<i class="fa fa-book" aria-hidden="true"></i> register](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables)
dans une variable
```yaml
- name: le service pam est il lancé
shell: "ps -aux | grep pam"
register: pam_status
```
dans une liste
```yaml
- name: les services sshd, systemd, dbus sont ils lancés
shell: "ps -aux | grep {{ item }}"
register: services_status
loop:
- sshd
- systemd
- dbus
```
## register (<i class="fa fa-gift" aria-hidden="true"></i>)
[<i class="fa fa-book" aria-hidden="true"></i> Return Values](https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html)
```json
"msg": {
"changed": true,
"cmd": "ps -aux | grep pam",
"delta": "0:00:00.011674",
"end": "2019-01-23 20:27:24.836966",
"failed": false,
"rc": 0,
"start": "2019-01-23 20:27:24.825292",
"stderr": "",
"stderr_lines": [],
"stdout": "limosadm 22227 0.0 0.1 193868 2688 ? S 20:27 0:00 (sd-pam)\nlimosadm 22359 0.0 0.0 4628 856 pts/0 S+ 20:27 0:00 /bin/sh -c ps -aux | grep pam\nlimosadm 22361 0.0 0.0 14856 1100 pts/0 S+ 20:27 0:00 grep pam",
"stdout_lines": [
"limosadm 22227 0.0 0.1 193868 2688 ? S 20:27 0:00 (sd-pam)",
"limosadm 22359 0.0 0.0 4628 856 pts/0 S+ 20:27 0:00 /bin/sh -c ps -aux | grep pam",
"limosadm 22361 0.0 0.0 14856 1100 pts/0 S+ 20:27 0:00 grep pam"
]
}
```
## register (<i class="fa fa-gift" aria-hidden="true"></i>)
afficher l'output
```yaml
- name: afficher la sortie de la commande
debug:
msg: pam_status.stdout
```
itérer sur une liste
```yaml
- name: afficher la sortie de chaque commande
debug:
msg: "{{ services_status.results[item].stdout }}"
loop: "{{ range(0, 3)|list }}"
```
ou
```yaml
- name: afficher la sortie de chaque commande
debug:
msg: "{{ item.stdout }}"
loop: "{{ services_status.results }}"
```
## register (<i class="fa fa-gift" aria-hidden="true"></i>)
```yaml
- name: register foo
shell: echo "foo"
register: txt
```
```yaml
- name: register bar
shell: echo "bar"
register: txt
when: False
```
If a task fails or is skipped, **the variable still is registered with a failure or skipped status**
## modules
* [<i class="fa fa-book" aria-hidden="true"></i> file](https://docs.ansible.com/ansible/latest/modules/file_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> lineinfile](https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> copy](https://docs.ansible.com/ansible/latest/modules/copy_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> template](https://docs.ansible.com/ansible/latest/modules/template_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> stat](https://docs.ansible.com/ansible/latest/modules/stat_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> get_url](https://docs.ansible.com/ansible/latest/modules/get_url_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> unarchive](https://docs.ansible.com/ansible/latest/modules/unarchive_module.html)
## modules
* [<i class="fa fa-book" aria-hidden="true"></i> package](https://docs.ansible.com/ansible/latest/modules/package_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> user](https://docs.ansible.com/ansible/latest/modules/user_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> systemd](https://docs.ansible.com/ansible/latest/modules/systemd_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> pip](https://docs.ansible.com/ansible/latest/modules/pip_module.html)
* [<i class="fa fa-book" aria-hidden="true"></i> expect](https://docs.ansible.com/ansible/latest/modules/exepect_module.html)
* `pip install pexpect`
* [<i class="fa fa-book" aria-hidden="true"></i> windows modules](https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html)
* [<i class="fa fa-book" aria-hidden="true"></i> ...](https://docs.ansible.com/ansible/latest/modules/modules_by_category.html)
## handlers
```yaml
handlers:
- name: restart apache
service:
name: apache2
state: restarted
listen: "restart apache"
tasks:
- name: enable some apache modules
apache2_module:
state: present
name: "{{ item }}"
notify: restart apache
```
## pre / post tasks
```yaml
pre_tasks:
- name: update sources
apt:
update_cache: yes
tags: [base]
...
post_tasks:
...
```
## tags
tags au niveau tâches
```yaml
- name: MySQL to listen on all interfaces, not just localhost
lineinfile:
dest: /etc/mysql/mariadb.conf.d/50-server.cnf
regexp: "^bind-address = 127.0.0.1"
line: "#bind-address = 127.0.0.1"
tags: [database]
```
`always` tag spécial exécuté à tous les coups
```yaml
pre_tasks:
- name: update sources
apt:
update_cache: yes
tags: [always]
```
## tags
```shell
$ ansible-playbook my-playbook.yml --list-tags
```
liste tous les tags disponibles dans le playbook
```shell
$ ansible-playbook my-playbook.yml --tags database
```
n'exécute que les tâches du playbook ayant un tag `database`
```shell
$ ansible-playbook my-playbook.yml --skip-tags database
```
exécute toutes les tâches du playbook sauf celles ayant un tag `database`
## dry run
```shell
$ ansible-playbook my-playbook.yml --check --diff
```
`--check`
simule les tâches à effectuer sans les effectuer (dry-run)
`--diff`
indique ce qui change
## verbosity
```shell
$ ansible-playbook my-playbook.yml -vvv
```
`-v`, `-vv`, `-vvv`, `-vvvv`
pour la verbosité
## limit
```shell
$ ansible-playbook my-playbook.yml --limit=py.isima.fr
```
exécute toutes les tâches du playbook sur py.isima.fr uniquement
<i class="fa fa-hand-o-down" aria-hidden="true"></i>
[<i class="fa fa-book" aria-hidden="true"></i> ansible-playbook](https://docs.ansible.com/ansible/latest/ansible-playbook.html)
## roles
```yaml
- name: my-playbook # ce que vous voulez
hosts: criprod # ou all
# ou n'importe quel nom de machine
# ou n'importe quel nom de groupe
remote_user: limosadm # prioritaire sur ansible_user de l'inventaire
roles:
- role: debug # le rôle debug sera exécuté par le playbook
tags: debug # le tag debug sera ajouté à toutes les tâches du role debug
my-variable: "pipo" # il ya d'autres endroit où mettre les variables
# à suivre ...
- role: vault-cli # le rôle vault-cli sera exécuté par le playbook
tags: vault # le tag vault sera ajouté à toutes les tâches du role vault-cli
```
## layout
[<i class="fa fa-book" aria-hidden="true"></i> Directory Layout](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout)
[<i class="fa fa-book" aria-hidden="true"></i> Alternative Directory Layout](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#alternative-directory-layout)
[<i class="fa fa-gitlab" aria-hidden="true"></i> cri/ansible-role-boilerplate](https://gitlab.isima.fr/cri/ansible-role-boilerplate)
## roles
* [<i class="fa fa-gitlab" aria-hidden="true"></i> cri/ansible-role-vault](https://gitlab.isima.fr/cri/ansible-role-vault)
* [<i class="fa fa-gitlab" aria-hidden="true"></i> cri/ansible-role-gitlab](https://gitlab.isima.fr/cri/ansible-role-gitlab)
* [<i class="fa fa-gitlab" aria-hidden="true"></i> cri/ansible-role-ispconfig](https://gitlab.isima.fr/cri/ansible-role-ispconfig/)
* [<i class="fa fa-book" aria-hidden="true"></i> debops](https://docs.debops.org/en/master/)
* [<i class="fa fa-github" aria-hidden="true"></i> bau-sec/ansible-openvpn-hardened](https://github.com/bau-sec/ansible-openvpn-hardened)
* [<i class="fa fa-github" aria-hidden="true"></i> ...](https://github.com/)
### skeleton
```shell
$ git clone git@gitlab.isima.fr:cri/ansible-role-boilerplate.git
$ ansible-galaxy init --role-skeleton ansible-role-boilerplate gitlab
```
* dev
```shell
$ ./bin/setup
$ source ./.venv/bin/activate
$ vagrant up
```
* utilisation dans un playbook
`requirements.yml`
```yaml
- name: vault
src: git+ssh://git@gitlab.isima.fr/cri/ansible-role-vault.git
path: ./roles/remotes
```
```
$ ansible-galaxy install -f -r requirements.yml
```
## [<i class="fa fa-book" aria-hidden="true"></i> callback](https://docs.ansible.com/ansible/latest/plugins/callback.html)
```shell
[20:59:19] Install unixODBC | default | CHANGED | 2162ms
[20:59:21] Install Vlogger, Webalizer, and AWstats | default | SUCCESS | 6727ms
[20:59:28] comment awstas croned jobs | default | CHANGED | 1410ms
[20:59:30] Debconf for roundcube-core | default | CHANGED | 1510ms
[20:59:31] Install roundcube and dependencies | default | SUCCESS | 10607ms
[20:59:42] remove the # in front of the first 2 alias line | default | CHANGED | 452ms
[20:59:42] add the line "AddType application/x-httpd-php .php" right after the "<Directory /var/lib/roundcube>" line | default | SUCCESS | 558ms
[20:59:43] change the default host to localhost | default | CHANGED | 587ms
[20:59:44] Install Vlogger, Webalizer, and AWstats | default | SUCCESS | 10966ms
[20:59:55] download jailkit | default | SUCCESS | 862ms
[20:59:55] untar jailkit | default | CHANGED | 1119ms
[20:59:57] untar jailkit | default | CHANGED | 176ms
[20:59:57] build jailkit deb | default | CHANGED | 2655ms
[20:59:59] Install jailkit .deb package | default | CHANGED | 2067ms
[21:00:02] remove jailkit stufff | default | CHANGED | 177ms
[21:00:02] install fail2ban | default | SUCCESS | 1584ms
```
## ansible.cfg
```ini
[defaults]
roles_path = ./ansible/roles/remotes:./ansible/roles/apps:./ansible/roles/commons:./ansible/roles/services
inventory = ./ansible/inventory.ini
filter_plugins = ./ansible/plugins/filter:
lookup_plugins = ./ansible/plugins/lookup:
callback_plugins = ./ansible/plugins/callback:
module_utils = ./ansible/module_utils:
stdout_callback = anstomlog
deprecation_warnings = False
[privilege_escalation]
become: yes
become_user: root
become_method: sudo
```
## [<i class="fa fa-book" aria-hidden="true"></i> set_fact](https://docs.ansible.com/ansible/latest/modules/set_fact_module.html) & pre_tasks
```yaml
criprod:
pvecriprod1:
api_users:
- proxmoxapi
- vimazeno
```
```yaml
- name: provisionner l'environnement du noeud (pour y accéder plus facilement dans les roles)
set_fact:
_pve: "{ 'cluster': '{{ lookup('env','PVE_CLUSTER') }}', 'node': '{{ lookup('env','PVE_NODE') }}', 'host': '{{ lookup('env','PVE_HOST') }}'}"
- name: provisionner les utilisateurs d'api pve uniquement du noeud (pour y accéder plus facilement dans les roles)
set_fact:
api_users: "{ 'api_users': {{ hostvars[inventory_hostname][_pve.cluster][_pve.node]['api_users'] }}}"
- name: fusionner l'environnement du noeud (pour y accéder plus facilement dans les roles)
set_fact:
pve: "{{ _pve | combine(api_users) }}"
```
[<i class="fa fa-gitlab" aria-hidden="true"></i> réorganiser les variables dans une pre_task](https://gitlab.isima.fr/cri/stack/blob/master/ansible/pre-tasks/set-pve-vars.yml)
## extend
[<i class="fa fa-book" aria-hidden="true"></i> developing plugins](https://docs.ansible.com/ansible/latest/dev_guide/developing_plugins.html)
[<i class="fa fa-book" aria-hidden="true"></i> developing modules](https://docs.ansible.com/ansible/latest/dev_guide/developing_modules.html)
# backup
## service CRI ISIMA / LIMOS
![service CRI ISIMA / LIMOS](https://support.isima.fr/upload/logo/cri_.png)<!-- .element width="30%" -->
### Vincent Mazenod
[vincent.mazenod@isima.fr](maitlo:vincent.mazenod@isima.fr)
#### responsable de service
## 🔧 service CRI ISIMA / LIMOS
* [Missions](https://doc.isima.fr/support/cri#3-missions) / [organisation](https://doc.isima.fr/cri#1-organisation-du-support)
* [Composition](https://doc.isima.fr/support/cri#2-composition)
* 7 membres support (A109 /A115)
* ### 📘 [https://doc.isima.fr](https://doc.isima.fr)
* 💁 Support
* 🎫 [tickets incidents/demandes](https://support.isima.fr)
* [https://support.isima.fr](https://support.isima.fr)
* 🏨 Bureau A109
* 📞 Téléphone 0473405262
## 📝 Inscription (1/2)
* [https://inscription.uca.fr](https://inscription.uca.fr)
* se munir de son numéro CVEC
* [https://cvec.etudiant.gouv.fr](https://cvec.etudiant.gouv.fr)
* procédure d’inscription en fonction du cursus
* Primo entrants:
* **n°OPI date de naissance** + **mail personnel**
* Anciens étudiants:
* **n°étudiant** + **date de naissance** + **mail personnel**
## 📝 Inscription (2/2)
* 💵 Règlement financier pour finaliser l'inscription
* Aurion Web (INP)
* 😥 Pas de compte = pas de service
* ⏰ S'inscrire avant le 11 septembre!
* 💬 Questions Scola:
* 📨 [scolarite@isima.fr](mailto:scolarite@isima.fr)
* 🏨 Bureau A010
## 🔌 Compte UCA
* 🏦 ENT ([https://ent.uca.fr](https://ent.uca.fr))
* mon compte > mot de passe
* notes
* emplois du temps
* cours en ligne
* 📨 [Mail](https://doc.isima.fr/services/mail/uca) ([https://mail.uca.fr](https://mail.uca.fr))
* prenom.nom@etu.uca.fr
* prenom.nom@etu.isima.fr (alias)
## 🔖 Services UCA
* 📶 [WiFi (Eduroam)](https://doc.isima.fr/locaux/wifi) ([https://cat.eduroam.org](https://cat.eduroam.org))
* 📹 [Teams](https://doc.isima.fr/services/visio/teams) ([https://teams.microsoft.com](https://teams.microsoft.com))
* 📁 Drive
* [drive UCA (Seafile)](https://doc.isima.fr/services/stockage/seafile) [https://drive.uca.fr/](https://drive.uca.fr/)
* [OneDrive (1To)](https://doc.isima.fr/services/stockage/owncloud)
* 🔍 [Catalogue de services UCA](https://dsi.uca.fr/catalogue-de-services)
## 🔐 Mots de passe
* ça ne se prête pas
* ça ne se laisse pas traîner à la vue de tous
* ça ne s'utilise qu'une fois
* si ça casse on remplace immédiatement
* un peu d'originalité ne nuit pas
* la taille compte
* il y a une date de péremption
* mieux vaut les avoir avec soi
## 💉 question d'hygiène!
![preservatif](images/preservatif-darvador.jpg)<!-- .element width="30%" -->
* [CNIL / Authentification par mot de passe : les mesures de sécurité élémentaires](https://www.cnil.fr/fr/authentification-par-mot-de-passe-les-mesures-de-securite-elementaires)
* [ANSSI / Recommandations relatives à l'authentification multifacteur et aux mots de passe](https://www.ssi.gouv.fr/guide/recommandations-relatives-a-lauthentification-multifacteur-et-aux-mots-de-passe/)
## 🏦 [Locaux](https://doc.isima.fr/locaux/salles)
![bâtiments](images/batiments.png "batiments")
## 🖥 [Salles informatiques](https://doc.isima.fr/pedagogie/salles)
* Salles PC :
* Dual boot Windows / Linux
* Salles Spécialisées :
* systèmes et réseaux
* physique
* électronique
* circuits
* robotique
* réalité virtuelle
## 🖥 [Salles informatiques](https://doc.isima.fr/pedagogie/salles)
* Salles Tx :
* D013 et 💻 D018 (libre accès de 7h30 à 18h45 en semaine)
* Laboratoire de langue
* G116 (Bâtiment Pôle Commun)
## 🖥 [Serveurs pédagogiques](https://doc.isima.fr/pedagogie/serveurs)
* TSE1 (MS Windows server 2016R2)
* Ada (GNU/Linux Debian 12)
* Turing (GNU/Linux Debian 12)
* Exam (GNU/Linux CentOS 6 isolé)
* 🔌 Connexion possible
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* [Bureau distant (RDP)](https://doc.isima.fr/services/acces-distant/rdp)
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/)
## 🖥 [VM Perso](https://doc.isima.fr/pedagogie/vm)
* Debian 12 / Cinnamon
* 🔌 Connexion possible
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* [Bureau distant (RDP)](https://doc.isima.fr/services/acces-distant/rdp)
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/)
* 😴 Eteinte toutes les nuits à 2h00 du matin
* ▶ start / ◼ stop
* https://my.isima.fr/vm
## 🕵🏼 [Authentification](https://doc.isima.fr/authentification)
* 🔌 Compte UCA pour **tous les services**
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/),
[Forges logicielles](https://doc.isima.fr/services/gitlab),
[Gestionnaire de ticket](https://doc.isima.fr/services/gestsup) ...
* ouverture de session
* [impressions](https://doc.isima.fr/services/imprimantes)
* 😥 Pas de compte = pas de service
* ⏰ S'inscrire avant le 11 septembre!
## 🖨 [Impressions](https://doc.isima.fr/services/imprimantes/#impression-pour-les-etudiants)
* Facturées directement sur la carte [IZLY](https://dsi.uca.fr/catalogue-de-services/impression-izly)
* Toutes les imprimantes de l'UCA sont utilisables
* File d'impression itinérante **FollowMe**
* le copieur de la salle D013
* permet de recharger son compte [IZLY](https://dsi.uca.fr/catalogue-de-services/impression-izly)
## 🌃 [Accés distant](https://doc.isima.fr/services/acces-distant/)
* Connexion de puis l'extérieur
* [VPN](https://doc.isima.fr//services/acces-distant/vpn)
* 🔌 Connexion possible
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* [Bureau distant (RDP)](https://doc.isima.fr/services/acces-distant/rdp)
* [Bureau distant (Guacamole)](https://doc.isima.fr/services/acces-distant/guacamole/)
Pour les 🖥 [Serveurs pédagogiques](https://doc.isima.fr/pedagogie/serveurs), 🖥 [Salles informatiques](https://doc.isima.fr/pedagogie/salles), 🖥 [VMs Persos](https://doc.isima.fr/pedagogie/vm)
## 💾 [Données (~/shared)](https://doc.isima.fr/stockage/shared)
* 5Go
* != drive.uca.fr
* dirs.local.isima.fr
* [Ligne de commande (ssh/kerberos)](https://doc.isima.fr/services/acces-distant/ssh/kerberos)
* nfs
* samba
* Montage automatique PARTOUT
* Répertoire `~/shared` sous GNU/Linux et MacOS
* Montage réseau `P:\\` sous MS Windows
## 💀 WARNING!!
* 🤦 Tout peut être réinstallé à tout moment
* Les salles machine
* Les serveurs péda
* Votre VM Perso
* 🙇🏼 `~/shared` et `P:\\` est le seul répertoire sauvegardé
* Tout le reste peut disparâitre
* A tout moment!!
## 🕸 Services
* [Forges logicielles (Gitlab)](https://doc.isima.fr/services/gitlab): https://gitlab.isima.fr
* [Prise de notes (Hedgedoc)](https://doc.isima.fr/services/hedgedoc): https://hedgedoc.isima.fr
* [Page web personnel](https://doc.isima.fr/services/hebergement-web/perso): https://perso.isima.fr/~login
* Une plateforme de Cloud Computing
* contacter le [service CRI ISIMA/LIMOS](https://doc.isima.fr/support/cri)
* Plateforme HPC (accès restreint)
* contacter [Hélène Toussaint](mailto:helene.toussaint@isima.fr)
* module ED d'apprentissage au LIMOS
## 🎁 Logiciels
* Microsoft Office et Office 365
* https://doc.isima.fr/Imagine/office/
* Azure dev tools for teaching
* https://doc.isima.fr/Imagine/imagine/
## 👋 [Cadres légaux](https://doc.isima.fr/support/cadres)
* [règlement intérieur de l'ISIMA](https://ent.uca.fr/moodle/mod/page/view.php?id=263490)
* [Charte générale à l'usage des ressources numériques / UCA](https://www.uca.fr/medias/fichier/deliberation-ca-2017-10-27-21-charte-des-usages-numeriques-et-des-administrateurs-techniques-annexe_1509372123880-pdf)
* Cadre national [ANSSI](https://www.ssi.gouv.fr/en/), [PSSIE](https://www.ssi.gouv.fr/entreprise/reglementation/protection-des-systemes-dinformations/la-politique-de-securite-des-systemes-dinformation-de-letat-pssie/)
* Sanctions disciplinaires et pénales
* 🙏 Soyez "fair"
* si vous trouvez une vulnérabilité, 😎 signalez la au [service CRI ISIMA/LIMOS](https://doc.isima.fr/support/cri)
## 💬 Des questions ????
![](https://media.giphy.com/media/hSKk6hx9OzomRvFRcJ/giphy.gif)<!-- .element style="margin: 20px" -->
📘 **https://doc.isima.fr** 🎫 **https://support.isima**
🤗 **[Typos et suggestions](https://gitlab.isima.fr/vimazeno/blog.limos.fr)**