Playbook 是一个由一个或多个 play 组成的文件;play 是针对特定主机或主机组执行的一组有序的任务;每个 playbook 必须包含两部分:

hosts: 运行 playbook 的一组主机

tasks: 需要在主机上运行的任务

除了这两个必须选项,还有一些可选项选项,也可能需要包含在 play 中,如:

name: play 的名称,在运行该 play 时,会在运行过程中显示。

become: 与配置文件中的 become 作用一样,用于提权,当配置文件中禁用提权时,你想要某个 play 使用提权的话,你可以在 play 中添加 become。

playbook 以 yaml 格式编写的,通常以 yml 扩展名保存。yaml 格式使用空格缩进,对于空格的数量没有特别要求,但需要注意:

  • 同一级别内的元素必须使用相同的缩进;
  • 对于子项目,缩进必须比父项目多

编写 playbook

it@workstation:~/ansible$ vim test.ymlit@workstation:~/ansible$ cat test.yml---- name: Install Apache  hosts: servera  tasks:    - name: Install apache httpd      apt:        name: apache2        state: present    - name: Copy using inline content      copy:        content: Welcome to        dest: /var/www/html/index.html    - name: Start apache service      service:        name: apache2        state: started        enabled: yes

Playbook 以 --- 开头,用于标记文件开始;

第二行的 name 为该 play 的名称;

第三行的 hosts 表示将要运行该 play 的主机;

第四行的 tasks 表示该 play 将要执行的具体任务;

通过缩进,我们可以看出 tasks 一共分为三个部分,也就是三个模块,每个模块由一个 name 开表示该模块的 name,虽然 name 是可选选项,但建议写上,用来作为对该模块执行任务的解释说明,并且 name 的内容会在 playbook 执行此模块时,显示在执行过程中;

name 下面的是模块的名称,在该 play 的 tasks 中一共有三个模块:

apt: 用于安装软件

copy: 用于复制文件或内容

service: 用于操作 service,如启动服务,重启服务等

我们可以通过 ansible-doc 来获取更多关于模块的信息:

我们可以通过 ansible-doc -l 来列出所有模块

t@workstation:~/ansible$ ansible-doc -la10_server                                    Manage A10 Networks AX/SoftAX/Thu...a10_server_axapi3                             Manage A10 Networks AX/SoftAX/Thu...a10_service_group                             Manage A10 Networks AX/SoftAX/Thu...a10_virtual_server                            Manage A10 Networks AX/SoftAX/Thu...aci_aaa_user                                  Manage AAA users (aaa:User)      ... ... ... ...... ... ... ...

列出的内容太多,我们可以通过 grep 进行筛选:如,我想查找关于 apt 相关的模块

it@workstation:~$ ansible-doc -l | grep aptapt                                                           Manages apt-packages             apt_key                                                       Add or remove an apt key         apt_repo                                                      Manage APT repositories via apt-r...apt_repository                                                Add and remove APT repositories  apt_rpm                                                       apt_rpm package manager          fortios_switch_controller_security_policy_captive_portal      Names of VLANs that use captive p...na_ontap_qos_adaptive_policy_group                            NetApp ONTAP Adaptive Quality of ...na_ontap_ucadapter                                            NetApp ONTAP UC adapter configura...nios_naptr_record                                             Configure Infoblox NIOS NAPTR rec...skydive_capture                                               Module which manages flow capture...vmware_guest_network                                          Manage network adapters of specif...                            

通过 ansible-doc Module_Name 获取模块相关的帮助说明

it@workstation:~$ ansible-doc apt> APT    (/usr/lib/python3/dist-packages/ansible/modules/packaging/os/apt.py)        Manages `apt' packages (such as for Debian/Ubuntu).  * This module is maintained by The Ansible Core TeamOPTIONS (= is mandatory):- allow_unauthenticated        Ignore if packages cannot be authenticated. This is useful for        bootstrapping environments that manage their own apt-key setup.        `allow_unauthenticated' is only supported with state:        `install'/`present'        [Default: no]        type: bool        version_added: 2.1... ... ... ...... ... ... ...

执行 playbook

it@workstation:~/ansible$ ansible-playbook test.yml BECOME password: PLAY [Install Apache] ******************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [servera]TASK [Install apache httpd] ************************************************************************changed: [servera]TASK [Copy using inline content] *******************************************************************changed: [servera]TASK [Start apache service] ************************************************************************ok: [servera]PLAY RECAP *****************************************************************************************servera                    : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

由于我们配置了 become,所以在运行的时候会提示输入 become 密码;

在这里,我们可以看到前面说的,在执行过程中会显示 play 的名称,告诉你现在执行的是那个 play;

每个 play 中会有一个默认的任务,就是获取 facts 信息,在 facts 信息中会保存你计算机的系统信息;

然后是三个在 play 中定义的 task,在执行 tasks 时,会显示当前所执行的 task 的名称,以及执行的状态,如果是 ok,则表示系统状态没有任何更改,如果是 changed,则表示系统状态发生了改变;

在最后,还有一个关于该 playbook 执行结果的汇总,有多少个 changed,有多少个 failed,有多个 skipped 等等;

©著作权归作者所有:来自51CTO博客作者马哥教育的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 我的开源项目——Windows PE和Linux ELF可执行文件解析工具
  2. Python 内置模块之 random
  3. 关于Cisco Smart Install存在远程命令执行漏洞的情况通报
  4. java线程池模型
  5. 3.2 Ansible Playbooks 高级二
  6. 3.0 Ansible Playbooks基础
  7. SQL on Hadoop 技术分析(二)
  8. Hive高级优化 | 面试及调优必读
  9. Structured Streaming VS Flink

随机推荐

  1. golang中的map是结构体吗
  2. golang如何捕获错误
  3. golang能做高并发的原因
  4. golang编译为什么快
  5. golang不支持泛型吗?
  6. golang sqlx捕捉错误
  7. golang判断key是否存在map中的方法
  8. golang并发编程是什么
  9. golang json怎么隐藏某个字段
  10. golang最适合做什么