Ansible Grundlagen, ohne die Ihre Spielbücher Nudelklumpen sind, Teil 2

Ich erzähle Ansibles Dokumentation weiterhin ausdrücklich nach und analysiere die Konsequenzen, wenn ich sie nicht kenne (Link zum vorherigen Teil) .



In diesem Teil diskutieren wir Inventare. Ich habe auch Variablen versprochen, aber das Inventar stellte sich als großes Thema heraus, deshalb widmen wir ihm einen separaten Artikel.



Wir werden jedes Element des Inventars analysieren (außer host_group_vars plugin) und diskutieren, warum es ist, wie man es richtig verwendet und wie es falsch ist.



Inhaltsverzeichnis:



  • Was ist ein Host? (und ein wenig über Transporte)
  • IP vs FQDN Zugang; inventory_hostnamevs.ansible_host
  • ansible_user - schreiben oder nicht schreiben?
  • Gruppen
  • Variablen: Inventar oder Playbook?
  • Klassifizierung der Vorräte nach Herkunft.


Inventar ist eine Liste von Hosts, Gruppen sowie Hilfsvariablen. Wenn wir die Grundlagen studieren, werden wir jeden Moment im Detail analysieren, mit der Suche nach dem "sollte" und der Verurteilung des "wie nicht".



Inventar: Hosts



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