Je continue à raconter de manière expressive la documentation d'Ansible et à analyser les conséquences de ne pas la connaître (lien vers la partie précédente) .
Dans cette partie, nous discutons des inventaires. J'ai aussi promis des variables, mais l'inventaire s'est avéré être un gros sujet, nous y consacrons donc un article séparé.
Nous analyserons chaque élément de l'inventaire (sauf host_group_vars plugin
) et discuterons pourquoi il est, comment l'utiliser correctement et en quoi il est faux.
Table des matières:
- Qu'est-ce qu'un hôte? (et un peu sur les transports)
- Accès IP vs FQDN;
inventory_hostname
contreansible_host
ansible_user
- écrire ou ne pas écrire?- Groupes
- Variables: inventaire ou livre de lecture?
- Classification des inventaires par origine.
L'inventaire est une liste d'hôtes, de groupes et de variables auxiliaires. En étudiant les bases, nous analyserons chaque moment en détail, avec une recherche du comment «devrait» et la condamnation du «comment pas».
Inventaire: hôtes
— hosts
yaml- ( ini- — ):
somegroup:
hosts:
somehost1:
somehost2:
somehost1, somehost2 — .
"" , ? , , — , . . , VM, , , ipmi' ..
: , - . , : , ssh ( , ); ( ); , lxc-. , - .
: - , , . libvirt. , — "vms" - . : , - ssh ...
… - , include_role: configure_vm
, ansible_host
, ssh vm_ip somecommand
,… , .
: , - () .
: Openstack' , API ? ?
: . . , , "".
: management_ip
?
: - ( dlink_configure
) - , . , , , .
, - :
) ( - ).
) (delegate_to
).
, , . -, ( ) . . - localhost project-global ( — ). -, -, , all
( all
). WTF , . -, ( -) .
: ansible_host vs FQDN
, inventory_hostname
, ansible_host
, .
, "", , play — , .
""? "connection plugin" , (, , , ). - . ssh ( -), . , : ansible_host
, ansible_user
, ansible_port
. . . , lxc ( lxc-execute
), ?
ansible_host
, inventory_hostname
. — .
:
---
somegroup:
hosts:
somehost:
ansible_host: 254.12.11.10
somehost
— inventory_hostname
. ansible_host
, inventory_hostname
. , , , .
inventory_hostname
, ansible_host
, . , . " " . . , lxc . ssh ( , ) - .
-, ~/.ssh/ssh_config
( , ). , , ssh - . .. ( ) - , ( ) . , jump-, ssh-. , . ssh_config
( ssh_config
), ssh gethostbyname()
. libc, . , , (/etc/nsswitch.conf
, /etc/hosts
) DNS- ( ). , , , DNS-, , CNAME … , .
, , : SSH, ( ) ansible_host
IP-.
, . .
-, host-local (ssh_config
, /etc/hosts
), . -, . CI, . , , - (?) , . ( ), . .
, , . , /etc/hosts . , .
DNS, . DNS ? / , . , , CI? - , DNS- — . . .
, . ansible_host
inventory_hostname
?
" ". setup
:
- name: Ping neighbor
command: ping -c 1 {{ neighbor_ip }} -w 1
changed_when: false
vars:
neighbor_ip: '{{ (hostvars[item].ansible_all_ipv4_addresses|ipaddr(public_network))[0] }}'
with_items: '{{ groups[target_group] }}'
( public_network
, target_group
).
, , . 99% " ". , ansible_host
IP-, . setup
. . ansible_host
IP- , , "- IP ", (!) , IP- "access address" , .. . .
… : , (- ) DNS? , . , , , IP. , .
: ansible_user
: ? , . , .
- - "" ? ,
ansible_user
. - "" ? ,
ansible_user
. - ,
-u
ansible-playbook
, , . . , CI-u
( ), . - . , 'me'. . — m.gavriilicheynko. .
- ,
ansible-playbook -e ansible_user=ci
( CI, ) , ( , ). - " " ( , ),
-u
, .
( , ), ansible_user
"" (.. , ). — ansible_user (, ..), ansible_user
.
, " ", "". , . — , .
Ansible?
-, " " ( hosts
play groups
). -, , . , , ( hosts , ). , , . .
( — , ):
- play. (
hosts
). , 'prometheus' , Prometheus. - - . , , (" " ), , - , , — () .
- .
, , .
— . , , (, play) — . , , .
. — . jc-r4, xcore-lu1 ams1-se-r2, "netflow_collectors". ? , , , , , / , .
. , , — , , , . .
, — . , " ".
— , .
— play. , play ( — docker). , play ( ), , play.
. — .
:
---
foo:
hosts:
foo1:
foo2:
bar:
hosts:
bar1
foobar:
children:
foo:
bar:
— . play - . ( , , , , , , grafana-servers mons — mgrs ).
" mgrs mons" . DRY (do not repeat yourself, ) , .
.
— - , "" . group_by
add_host
.
, . , ( ). , , . , — . — , . , --limit
. group_by
, , .. --limit
. [always], . , group_by
— , inventory . .
, "" (.. ). , — ? ( "", hashmap, map, object, ..). , . , ( 2.4 play: order
, inventory
).
? , :
-
groups.somegroup[0]
" ". , , . . . - (,
pg_hba.conf
,allowed
nginx.conf
, etc). , changed. , reload', changed . - , , .
, "", .
. , openstack', Openstack, , , . ( , , — , ""). . . ( ) . - -. , . , staging . , - - . --, , . - . , . - - ? , "". ? , . … , . IP, . , . . , .
, , , , , . , , - , .
:
— . , , . play , ( DRY) , "" (variable precedence). , , , .
… : ?
. — . , ( jinja). "". "" ?
- "", - "", - "". ( ""). , ( ). , — .
"" . , , ansible_host
, hostvars .. ( , , ). .
, , ( ) "", ( ) — "". , .
… . , , , ( best practices, — , ). "" , , , , .
" " . . DRY , , — - . .
: , java- , ?
: , (, ), . — staging production, .
: localhost, ( nginx proxy_pass
), ?
: , .
: — ?
: , . , , — .
, . , : " "? , — , .
, . ?
, " ".
— . production.yaml
, staging.yaml
, production/
staging/
, , . () . " " . . , . , " " ( , , , etc).
— . - git , , , - git . , . - (ansible, ceph, openshift, etc) . , . API, "" . , , , , .
. , . ( , , ). "" — () , (, , ceph-ansible' RGW ).
— ( ). , . CI — . — . — , , . DRY, . . .
. , — 3000 10 , , — , CI.
— . , , , , .
.
ansible-playbook -i inventory1.yaml -i inventory2.yaml play.yaml
" ". - ( ), (, inventory2.yaml
users: [...]
, inventory1.yaml
).
? , , , .
: (host_vars/
, group_vars
). , ( ) (). Edge case, .
" " / . , , , , , . " ". .
: