Je suis nouveau chez ansible. J'ai une exigence qui m'oblige à extraire la version du système d'exploitation pour plus de 450 serveurs Linux hébergés dans AWS. AWS ne fournit pas cette fonctionnalité - il nous suggère plutôt de l'obtenir auprès d'une marionnette ou d'un chef.
J'ai créé quelques playbooks simples qui ne fonctionnent pas
---
- hosts: testmachine
user: ec2-user
Sudo: yes
tasks:
- name: Update all packages to latest
yum: name=* state=latest
task:
- name: obtain OS version
Shell: Redhat-release
playbook devrait produire un fichier texte avec le nom d'hôte et la version du système d'exploitation. Toute idée à ce sujet sera très appréciée.
Utilisez l'une des expressions Jinja2 suivantes:
{{ hostvars[inventory_hostname].ansible_distribution }}
{{ hostvars[inventory_hostname].ansible_distribution_major_version }}
{{ hostvars[inventory_hostname].ansible_distribution_version }}
où:
hostvars
et ansible_...
sont intégrés et collectés automatiquement par Ansibleansible_distribution
est l'hôte en cours de traitement par AnsiblePar exemple, en supposant que vous exécutez le rôle Ansible test_role
contre l'hôte Host.example.com
exécutant une distribution CentOS 7:
---
- debug:
msg: "{{ hostvars[inventory_hostname].ansible_distribution }}"
- debug:
msg: "{{ hostvars[inventory_hostname].ansible_distribution_major_version }}"
- debug:
msg: "{{ hostvars[inventory_hostname].ansible_distribution_version }}"
te donnera:
TASK [test_role : debug] *******************************************************
ok: [Host.example.com] => {
"msg": "CentOS"
}
TASK [test_role : debug] *******************************************************
ok: [Host.example.com] => {
"msg": "7"
}
TASK [test_role : debug] *******************************************************
ok: [Host.example.com] => {
"msg": "7.5.1804"
}
De manière structurée:
---
- hosts: all
vars:
dest: distro.csv
tasks:
- copy:
content: ''
dest: "{{ dest }}"
run_once: yes
delegate_to: 127.0.0.1
- lineinfile:
dest: "{{ dest }}"
line: '{{ inventory_hostname }},{{ ansible_distribution }},{{ ansible_distribution_major_version }},{{ ansible_distribution_version }},{{ ansible_distribution_release }}'
delegate_to: 127.0.0.1
Crée un fichier séparé par des virgules nommé distro.csv
dans le dossier playbook. Vous pouvez utiliser toutes les variables que vous souhaitez modifier line:
.
Pour quelques instances Windows:
- debug:
msg:
- "ansible_distribution {{ hostvars[inventory_hostname].ansible_distribution }}"
- "major version {{ hostvars[inventory_hostname].ansible_distribution_major_version }}"
- "version {{ hostvars[inventory_hostname].ansible_distribution_version }}"
donne:
ok: [server1] => {
"msg": [
"ansible_distribution Microsoft Windows Server 2008 R2 Standard ",
"major version 6",
"version 6.1.7601.65536"
]
}
ok: [server2] => {
"msg": [
"ansible_distribution Microsoft Windows Server 2016 Standard",
"major version 10",
"version 10.0.14393.0"
]
}
Ansible fournit déjà beaucoup d'informations sur l'hôte distant dans la variable "hostvars" qui est automatiquement disponible.
Pour voir les informations de votre hôte nommé "my_remote_box_name", par exemple faire
- debug: var=hostvars['my_remote_box_name']
Certaines informations sur le système d'exploitation se trouvent dans
hostvars['my_remote_box_name']['ansible_lsb']
Ce qui, pour l'un de mes hôtes Ubuntu, serait long:
{
"hostvars['my_remote_box_name']['ansible_lsb']": {
"codename": "xenial",
"description": "Ubuntu 16.04.1 LTS",
"id": "Ubuntu",
"major_release": "16",
"release": "16.04"
}
Vous pouvez simplement utiliser ces variables dans vos playbooks et modèles, en utilisant la notation "{{variable_name}}".
- debug: msg="My release is {{ansible_lsb.release}}"
production:
"msg": "My release is 16.04"
- name: obtain OS version
Shell: Redhat-release
register: result
- name: print OS version
debug: var=result.stdout
"AWS ne fournit pas cette fonctionnalité" - vous pouvez vérifier le fichier /etc/os-release
pour obtenir des détails sur l'instance aws.
Par exemple
[ec2-user@ip-xx-xx-xx ~]$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2016.03"
ID="amzn"
ID_LIKE="rhel Fedora"
VERSION_ID="2016.03"
PRETTY_NAME="Amazon Linux AMI 2016.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:Amazon:linux:2016.03:ga"
HOME_URL="http://aws.Amazon.com/Amazon-linux-AMI/"