一、playbook和ad hoc命令
ad hoc命令是单行,一个简单的任务,运行一次。ansible真正强大的地方是使用ansible的playbook重复运行多次复杂的任务。
一个play是是一组有序的任务,该paly对应着在inventory被选择的主机。一个playbook是一个包含若干个paly的text文本文件。
plays让你将又长又复杂的管理任务变的简单。在palybook中,你可以用易懂和立即能运行的格式将tasks保存在play中。tasks本身由于书写方式的原因,就是一个一部一部部署你的架构或者应用的文档
二、playbook的格式
playbook通常被定义为扩展名为yml的文件。playbook主要使用空格字符来指定它的数据结构。 YAML没有严格的需求,不强制要求多少个空格。但是有两个基本规则:
-
数据元素在同级必须有同样的缩进
-
一个对象是另一个对象的子对象时必须比父对象缩进更多
注意:只有空格可以使用,不能用tab。如果你使用vim编辑器,你可以通过在你的家目录下创建.vimrc文件,并且添加"autocmd FileType yaml setlocal ai ts=2 sw=2 et"来将tab变成两个空格。
--- ## 表示剧本开始
- name: this is my first play ## 第一个play的名字hosts: hostname ## 被管理主机remote_user: ## 使用那个用户来执行,优先级最高become: yes ## 是否提权,前提是该用户拥有能够提权的操作tasks: - name: create a new user ## task的名字user: ## 执行的模块name: nana state: present
三、写一个简单的playbook
[root@control ansible_manage]# cat play_book/first.yml
--- ## 表示剧本开始
- name: this is my first play ## 第一个play的名字hosts: manage3 ## 被管理主机tasks: - name: create a new user ## task的名字user: ## 执行的模块name: nana state: present
级别上play大于task大于module,平级缩进要一样
这个playbook,只有一个play,这个play的被管理主机是manage3
,里面有一个task,这个task的名字叫做"create a new user"
。这个task使用的user
模块,创建了nana
用户
运行playbook
[root@control ansible_manage]# ansible-playbook play_book/first.ymlPLAY [this is my first play] ***************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [manage3]
TASK [create a new user] *******************************************************************************************changed: [manage3]
PLAY RECAP *********************************************************************************************************manage3 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
四、playbook的详细输出
运行的时候显示详细信息
-
-v
-
-vv
:常用 -
-vvv
-
-vvvv
## 不加-v
[root@control ansible_manage]# ansible-playbook play_book/remove_nana_user.yamlPLAY [this is my first play] ***************************************************************************************
TASK [Gathering Facts] *********************************************************************************************ok: [manage3]TASK [create a new user] *******************************************************************************************changed: [manage3]PLAY RECAP *********************************************************************************************************manage3 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ## 加一个-v
[root@control ansible_manage]# ansible-playbook play_book/remove_nana_user.yaml -v
Using /root/ansible_manage/ansible.cfg as config filePLAY [this is my first play] ***************************************************************************************
TASK [Gathering Facts] *********************************************************************************************ok: [manage3]TASK [create a new user] *******************************************************************************************ok: [manage3] => {"changed": false, "name": "nana", "state": "absent"} ## 多了这一行PLAY RECAP *********************************************************************************************************manage3 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ## 加-vv
[root@control ansible_manage]# ansible-playbook play_book/remove_nana_user.yaml -vv
ansible-playbook [core 2.14.9]config file = /root/ansible_manage/ansible.cfgconfigured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.9/site-packages/ansibleansible collection location = /root/.ansible/collections:/usr/share/ansible/collectionsexecutable location = /usr/bin/ansible-playbookpython version = 3.9.18 (main, Sep 7 2023, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/usr/bin/python3) jinja version = 3.1.2libyaml = True
Using /root/ansible_manage/ansible.cfg as config file
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.PLAYBOOK: remove_nana_user.yaml ************************************************************************************1 plays in play_book/remove_nana_user.yamlPLAY [this is my first play] ***************************************************************************************
TASK [Gathering Facts] *********************************************************************************************task path: /root/ansible_manage/play_book/remove_nana_user.yaml:2
ok: [manage3]TASK [create a new user] *******************************************************************************************task path: /root/ansible_manage/play_book/remove_nana_user.yaml:5
ok: [manage3] => {"changed": false, "name": "nana", "state": "absent"}PLAY RECAP *********************************************************************************************************manage3 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
假装运行,只是模拟运行,但是实际上没有执行
-
-C