我对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 , - .