Ansible基础知识,没有这些基础知识,您的游戏书将是一团意大利面

我对Ansible中其他人的代码进行了大量审查,并亲自撰写了大量文章。在分析错误(包括陌生人和我自己的错误)以及进行多次采访的过程中,我意识到了Ansible用户所犯的主要错误-他们在不掌握基本错误的情况下陷入了困境。



为了纠正这种普遍的不公正现象,我决定为那些已经知道这一点的人撰写Ansible简介。我警告您,这不是重述法力,而是一种漫长的旅程,其中有很多字母,没有图片。



读者的预期水平-已经编写了数千行yamla,已经在生产某些产品,但是“某种程度上所有内容都是歪曲的”。



名字



Ansible用户的主要错误是不知道该叫什么。如果您不知道名称,则无法理解文档中写的内容。一个活生生的例子:在一次采访中,一个声称声称自己在Ansible中写了很多东西的人无法回答“剧本由什么组成?”的问题。当我建议“希望答案是剧本包含剧本”时,紧随其后的是杀人言论“我们不使用它”。人们用钱写Ansible而不用玩。他们实际上在使用它,但是他们不知道它是什么。



让我们开始简单:它叫什么。也许您知道这一点,也许您不知道,因为您在阅读文档时没有注意。



ansible-playbook播放剧本。剧本是带有yml / yaml扩展名的文件,其内部类似以下内容:



---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:


我们已经意识到整个文件都是一本剧本。我们可以显示角色在哪里,任务在哪里。但是在哪里玩?游戏与角色或剧本有什么区别?



该文档包含所有内容。它被忽略了。初学者-因为人数太多,您不会一次记住所有内容。经验丰富-因为“琐事”。如果您有经验,请至少每半年重新阅读这些页面一次,您的代码将成为更好的课程。



因此,请记住:剧本是剧本和的清单import_playbook

这是一出戏:



- hosts: group1
  roles:
    - role1


这也是另一部戏:



- hosts: group2,group3
  tasks:
    - debug:


玩什么?她怎么了



Play — playbook, play play / , . delegate_to, lookup-, network-cli- , jump- .. . , . , . , .



"-" "-" — play. . . play. , hosts , roles/tasks — .



, ? ?



, play, ", ". , , .



. monitoring, . monitoring ( . play). , , , . delegate? iptables. delegate? / , . delegate! , include_role , include_role delegate_to . ...



— - monitoring, " " — : .



? , , "x" X Y "y", : play, Y y. - "x", . .



, . ! , DRY , .



. , ( , ) , . , - .



: . , . — . play. , play?



, . Play (, ) , .



, , ( , ) . . play. , , , .



COBOL jinja. — , . "" — .



: , , control flow. delegate_to . meta: end host/play. ! , ? delegate_to. . , , , . , :



play play .



play role. tasks vs role.





play:



- hosts: somegroup
  pre_tasks:
    - some_tasks1:
  roles:
     - role1
     - role2
  post_tasks:
     - some_task2:
     - some_task3:


, foo. foo: name=foobar state=present. ? pre? post? role?



… tasks?



— play. , play , "".



play: hosts, play pre_tasks, tasks, roles, post_tasks. play .



: pre_tasks, roles, tasks, post_tasks. tasks roles , best practices , tasks, roles. roles, pre_tasks/post_tasks.



, : pre_tasks, roles, post_tasks.



: foo ? ? ? , — pre post?



, , " ". . : play pre_tasks post_tasks ( tasks, roles), - , post_tasks pre_tasks?



, , . ?



… . : flush' . .. pre_tasks, , notify. , notify . post_tasks .



, post_tasks pre_tasks, , , handler'. , pre_tasks -, post_tasks - , pre_tasks , "" .



, pre_tasks post_tasks? , , ( ) . post_tasks ( ).



Ansible , meta: flush_handlers, flush_handlers, play? , meta: flush_handlers , when block .. , "" . — pre/roles/post — .



, , 'foo'. ? pre, post roles? , , foo. , foo pre, post — — .



" " , play — tasks, tasks. roles — ( task). , tasks roles .



, , .



( )



, . foo, bar baz. , ? : ? , ?… ?



( ) — , — . ? , side causes, side effects, .



, . ? side effects — , — -. side causes? . " " — - . -, . play vars . play . (set_fact/register). " ". " " " ".



: ansible - -. — side effect . Rust, , — unsafe. — . : " ", " , ". . .



: .



? -, default values (/default/main.yaml), - .



default values? , , role defaults — ( ). , - , — . ( — |d(your_default_here), — ).



? , . , (.. ), ( , - — include_vars {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). files/, templates/. , (library/). , playbook' ( ), , , .



: , ( galaxy). .



, : ( ) .



: ? "" / , ( ). — . — , . , . "" ( ) , .



import_role , , , .



, , galaxy.yml, include_role — , , .





: . — . ?



, :



- hosts: group1
  tasks:
    - foo:
      notify: handler1
  handlers:
     - name: handler1
       bar:


handler' rolename/handlers/main.yaml. Handler' play: pre/post_tasks handler' , handler' . , "-" handler' wtf, handler'. ( best practices — handler').



, () (/ when), — (notify changed). ? , , , changed, handler. , handler changed ? , - changed , . , . , . , .



(, .., 'basic ansible' ). : , .service-, daemon_reload state=started. , , . , . . restarted ( restarted, .. ), state=started, , .. .



handler' , . — skipped ok — . — task' , handler' changed, .. — . , . , , . — changed- .



. , notify , ? , , , .



… handler' , . - ( ) . — .



, listen, handler notify handler', handler import_tasks ( include_role c with_items), -, include_role .. — "").



WTF, , . delegate_to notify, delegate_to, .. , play. ( , , delegate_to ).



reusable roles. , , ansible-galaxy install . . , : . include_vars, 100500 corner case . , , , " ". — , ( 1).



if' ( — when include_vars ), . , , , , . galaxy ( !) when , "" . , galaxy — - . , — - , , - " galaxy". , , - when'… . 5 , - .





  • 组变量,host_group_vars插件,hostvars。如何打通意大利面的高尔迪结。范围和优先级变量,Ansible内存模型。“那么数据库的用户名仍存储在哪里?”
  • jinja: {{ jinja }}-nosql notype nosense软橡皮泥。它无处不在,即使您没有想到。有点关于!!unsafe和美味的yaml。



All Articles