Ansible, suite

This commit is contained in:
Jérémy Lecour 2017-06-19 23:16:23 +02:00 committed by Jérémy Lecour
parent bf1436ed35
commit d55a07bc87

View file

@ -354,7 +354,7 @@ Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'util
</section> </section>
<section> <section>
<h4>Installation de Git</h4> <h4>Installation de Git</h4>
<pre><code class="shell"> <pre><code data-trim>
$ su $ su
# apt install git # apt install git
# git --version # git --version
@ -363,7 +363,7 @@ Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'util
</section> </section>
<section> <section>
<h4>Initialisation du dépôt</h4> <h4>Initialisation du dépôt</h4>
<pre><code class="shell"> <pre><code data-trim>
$ cd /etc $ cd /etc
$ su $ su
# git init # git init
@ -374,7 +374,7 @@ Note : mentionner l'existence de savelog. L'option "-d" de savelog permet d'util
</section> </section>
<section> <section>
<h4>Premières modifications</h4> <h4>Premières modifications</h4>
<pre><code> <pre><code data-trim>
# echo "127.0.0.1 foo" >> /etc/hosts # echo "127.0.0.1 foo" >> /etc/hosts
# git status # git status
# git diff [HEAD] # git diff [HEAD]
@ -422,75 +422,156 @@ Couche application : HTTP, SMTP, DNS, etc.
<h2>Introduction à Ansible</h2> <h2>Introduction à Ansible</h2>
</section> </section>
<section> <section>
<h2>Qu'est-ce qu'Ansible ?</h2> <h3>Objectifs d'Ansible</h3>
<h3>Un outil d'automatisation de configuration<br>et gestion d'infrastructure</h3> <ul>
<li>homogénéité</li>
<li>fiabilité</li>
<li>rapidité</li>
</ul>
</section> </section>
<section> <section>
<h3>Principes de base</h3> <h4>Parfait pour</h4>
<ul>
<li>tâches répétitives</li>
<li>actions urgentes</li>
<li>demandes spécifiques</li>
</ul>
</section>
<section>
<h3>Principes fondateurs</h3>
<ul> <ul>
<li>les <em>tasks</em> sont les unités d'action</li> <li>Idempotence</li>
<li>les <em>playbook</em> organisent l'exécution des tâches</li> <li>Pas d'agent</li>
<li>les <em>rôles</em> sont comme des paquets de tâches, pour faciliter la réutilisation</li> <li>Souplesse et légèreté</li>
<li>l'<em>inventaire</em> recense toute l'infrastructure et les moyens d'y accéder</li>
</ul> </ul>
</section> </section>
<section> <section>
<h4>Modules</h4> <h3>Installation</h3>
<ul> <p>Paquets pour de nombreuses distributions</p>
<li>sert d'abstraction (multi-OS, versions…)</li> <pre><code class="hljs nohighlight" data-trim>$ su
<li>permet l'idempotence</li> # apt install ansible
<li>des centaines disponibles (core, extras…)</li> # ansible --version
</ul> ansible 2.2.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
</code></pre>
</section> </section>
<section> <section>
<pre><code class="yaml" style="max-height: 500px">- command: "date" <h3>Commandes de base</h3>
<pre><code class="hljs nohighlight" data-trim>
- shell: "cat foo.txt | grep bar" $ ansible localhost --module-name ping
$ ansible localhost --module-name ping --one-line
- copy $ ansible localhost --module-name setup
src: "files/foo" $ ansible localhost --module-name setup --args "filter=ansible_mem*"
dest: "/etc/bar" $ ansible localhost --module-name lineinfile --args \
mode: "0644" "dest=/etc/hosts regexp=example.com line='192.168.0.25 example.com'"
</code></pre>
- replace:
dest: "/etc/ssh/sshd_config"
regexp: '^(Match User ((?!{{ name }}).)*)$'
replace: '\1,{{ name }}'
- lineinfile:
dest: "/etc/evocheck.cf"
line: "IS_APTICRON=0"
regexp: "^IS_APTICRON="</code></pre>
</section> </section>
<section> <section>
<pre><code class="yaml" style="max-height: 500px">- apt: <h3>Éléments de base</h3>
name: '{{ item }}'
update_cache: yes
with_items: ["vim", "htop"]
- apt_repository:
repo: "deb http://mirror.evolix.org/jessie stable main"
- mysql_user:
name: mysqladmin
password: my_password
priv: "*.*:ALL,GRANT"
config_file: /root/.my.cnf
- sysctl:
name: "vm.max_map_count"
value: 262144
sysctl_file: "/etc/sysctl.d/elasticsearch.conf"</code></pre>
</section> </section>
<section> <section>
<h4>Playbooks</h4> <h4>Modules</h4>
<pre><code class="yaml" style="max-height: 500px">--- <ul>
- hosts: all <li>couche d'abstraction du shell</li>
<li>homogénéité</li>
<li>idempotence</li>
</ul>
</section>
<section>
<h4><i>Tasks</i> / <i>Handlers</i></h4>
<ul>
<li>invocation d'un module avec des paramètres</li>
<li>le handler n'est exécuté qu'une fois</li>
</ul>
</section>
<section>
<h4><i>Playbooks</i></h4>
<ul>
<li>exécution procédurale de tâches</li>
<li>définition du contexte</li>
<li>orchestration complexe</li>
</ul>
</section>
<section>
<h4>Rôles</h4>
<ul>
<li>comme un paquet autonome</li>
<li>contient <em>tasks</em>, <em>handlers</em>, variables, <em>templates</em></li>
<li>inclus dans des <em>playbooks</em></li>
<li>stockés localement ou récupérés dans un registre</li>
</ul>
</section>
<section>
<h4>Inventaire et variables</h4>
<ul>
<li>liste des serveurs</li>
<li>moyens d'accès</li>
<li>variables spécifiques (par hôte ou groupe)</li>
</ul>
</section>
<section>
<pre><code class="hljs nohighlight" data-trim>
inventory/
├── group_vars
│ ├── all.yml
│ ├── hypervisors.yml
│ └── proxies.yml
├── hosts
├── hosts-dev
└── host_vars
├── stack01-data01.yml
├── stack01-front01-web01.yml
└── stack01-front01.yml
</code></pre>
</section>
<section>
<pre><code class="hljs ini" data-trim style="max-height: 600px">
kvm01 ansible_host=192.168.2.1
kvm02 ansible_host=192.168.2.2
tasks: stack01-front01 ansible_host=192.168.2.1 ansible_port=22020
- shell: echo hello World stack01-front01-web01 ansible_host=192.168.2.1 ansible_port=22101
</code></pre> stack01-data01 ansible_host=192.168.2.1 ansible_port=22010
[hypervisors]
kvm01
kvm02
[fronts]
stack01-front01
[dbs]
stack01-data01
[web]
stack01-front01-web01
</code></pre>
</section>
<section>
<h4>Variables</h4>
<ul>
<li>sources multiples (<em>facts</em> ou configuration)</li>
<li>règles de précédence pour personnalisation</li>
</ul>
</section>
<section>
<h3>Un playbook</h3>
</section>
<section>
<pre><code class="hljs yaml" data-trim>
---
- hosts: localhost
tasks:
- name: example.com in /etc/hosts
lineinfile:
dest: /etc/hosts
regexp: example.com
line: '192.168.0.25 example.com'
state: present
</code></pre>
<pre><code class="hljs bash">$ ansible-playbook playbook.yml</code></pre>
</section> </section>
</section> </section>