Conceptos básicos de Ansible, sin los cuales tus libros de jugadas son un montón de pasta, parte 2

Sigo volviendo a contar expresamente la documentaciĂłn de Ansible y analizo las consecuencias de no saberla (enlace a la parte anterior) .



En esta parte, discutimos los inventarios. También prometí variables, pero el inventario resultó ser un gran tema, por lo que le dedicamos un artículo por separado.



Analizaremos cada elemento del inventario (excepto host_group_vars plugin) y discutiremos por qué es, cómo usarlo correctamente y cómo está mal.



Tabla de contenido:



  • ÂżQuĂ© es un host? (y un poco sobre transportes)
  • IP frente a acceso FQDN; inventory_hostnamevsansible_host
  • ansible_user - escribir o no escribir?
  • Grupos
  • Variables: inventario o libro de jugadas?
  • ClasificaciĂłn de inventarios por origen.


El inventario es una lista de hosts, grupos y variables auxiliares. Estudiando los conceptos básicos, analizaremos cada momento en detalle, con una búsqueda de cómo "debería" y la condena de "cómo no".



Inventario: hosts



El host en el inventario son los elementos del diccionario hostspara el grupo en el inventario yaml (en el inventario inicial, este es el primer elemento de la lĂ­nea):



    somegroup:
        hosts:
           somehost1:
           somehost2:


somehost1, somehost2 son hosts.



"" , ? , , — , . . , 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



: ? , . , .



  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