Je travaille sur un rôle qui n'a besoin que de rassembler un seul fait.
La performance est une préoccupation et je sais que la collecte des faits prend du temps.
Je cherche un moyen de filtrer gather_facts
à l'intérieur d'un playbook, cela me permettra de ne rassembler que les faits requis.
Ceci est possible en utilisant le module de base de configuration:
ansible -m setup -a 'filter=ansible_hostname' my_Host
10.200.0.127 | success >> {
"ansible_facts": {
"ansible_hostname": "my_Host"
},
"changed": false
}
Est-il possible d'utiliser cette fonctionnalité dans le playbook? Quelque chose comme ça?
- hosts: all
Sudo: yes
gather_facts: True
filter: "filter=ansible_*"
PS: Le code ci-dessus lève une exception de syntaxe.
EDIT 1 : Si quelqu'un a besoin d'obtenir le nom d'hôte, il y a aussi une autre variable utile inventaire_hôte .
Oui, c'est possible, mais pas dans le comportement par défaut de collecte des faits. Après avoir défini gather_facts
à true
appelle simplement le module d'installation comme toute première tâche du jeu. De cette façon, vous n'avez aucun moyen de paramétrer l'appel du module setup
.
Mais vous pouvez désactiver le comportement par défaut et appeler vous-même la configuration avec le paramètre de filtre.
- hosts: all
Sudo: yes
gather_facts: False
tasks:
- setup:
filter: ansible_*
Étant donné que vous travaillez sur un rôle et que vous ne souhaitez peut-être pas que cet appel de configuration figure dans votre rôle, vous pouvez utiliser les pré_tâches.
- hosts: all
Sudo: yes
gather_facts: False
pre_tasks:
- setup:
filter: ansible_*
roles:
- your_role_here
La voie Ansible en haut du playbook (voie supplémentaire):
----
- hosts: web
gather_facts: True
gather_subset:
- network
- virtual
Déboguer les vars avec:
- name: Print some debug information
vars:
msg: |
Module Variables ("vars"):
--------------------------------
{{ vars | to_Nice_json }}
Environment Variables ("environment"):
--------------------------------
{{ environment | to_Nice_json }}
GROUP NAMES Variables ("group_names"):
--------------------------------
{{ group_names | to_Nice_json }}
GROUPS Variables ("groups"):
--------------------------------
{{ groups | to_Nice_json }}
Host Variables ("hostvars"):
--------------------------------
{{ hostvars | to_Nice_json }}
debug:
msg: "{{ msg.split('\n') }}"
tags: debug_info
Après avoir posé cette question et répondu, Ansible 2.1 a ajouté le gather_subset
option au module d'installation, il est donc désormais possible d'utiliser le !facter,!ohai,network
syntaxe décrite dans la documentation plutôt qu'un filtre d'expression régulière:
- hosts: all
Sudo: yes
gather_facts: False
pre_tasks:
- setup:
gather_subset: !facter,!ohai,network
roles:
- your_role_here
Si tout ce qui vous intéresse est le nom d'hôte de chaque hôte, faire simplement quelque chose comme ça devrait faire ce dont vous avez besoin:
- hosts: all
gather_facts: false
tasks:
- name: Get hostname
command: /bin/hostname
register: my_hostname
- debug: var=my_hostname
Si c'est un autre fait qui vous intéresse, spécifiez simplement la commande appropriée et référez-vous au fait via la variable enregistrée.