Les bases d'Ansible, sans lesquelles vos playbooks sont des tas de pâtes, partie 2

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_hostnamecontreansible_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


somehostinventory_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



: ? , . , .



  1. - "" ? , ansible_user .
  2. "" ? , ansible_user .
  3. , -u ansible-playbook , , . . , CI -u ( ), .
  4. . , 'me'. . — m.gavriilicheynko. .
  5. , ansible-playbook -e ansible_user=ci ( CI, ) , ( , ).
  6. " " ( , ), -u, .


( , ), ansible_user "" (.. , ). — ansible_user (, ..), ansible_user .





, " ", "". , . — , .



Ansible?



-, " " ( hosts play groups). -, , . , , ( hosts , ). , , . .



( — , ):



  1. play. ( hosts). , 'prometheus' , Prometheus.
  2. - . , , (" " ), , - , , — () .
  3. .


, , .

— . , , (, 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).



? , :



  1. groups.somegroup[0] " ". , , . . .
  2. (, 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, .



" " / . , , , , , . " ". .






:



  • : , Jinja , scope precedence . , ? ?



All Articles