侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 747 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible笔记(3)之playbook

zze
zze
2020-03-28 / 0 评论 / 0 点赞 / 613 阅读 / 3384 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

本来打算自己写一波 ansible 系列的,后来发现一老哥写的太好了,「点击此处直达」,我这里也就边看边对该系列文章做下笔记,方便以后查阅,ansible 入门的话墙裂建议阅读前方链接博文~~~

语法

首先,我们需要创建一个 YAML 格式的 playbook 文件。

playbook 文件以 .yaml 或者 .yml 作为文件名后缀,此处我们创建一个名为 test.yml 的剧本文件。

---
- hosts: all
  remote_user: root
  tasks:
  - name: ping the host
    ping:
  - name: make directory test
    file:
      path: /testdir/test
      state: directory

第一行使用三个横杠作为开始,在 YAML 语法中,--- 表示文档开始。

第二行使用 - 作为开头(注意:横杠后面有空格),如果你了解过 YAML 语法,那么你一定知道 YAML 使用 - 表示一个块序列的节点。从上例可以看出,- 后面使用 hosts 关键字指定了要操作的主机,hosts 关键字对应的值为 all,表示我们要操作主机清单中的所有主机,hosts: all 是一个键值对,注意,在YAML语法中使用冒号映射键值对时,冒号后面必须有空格,这也是语法,没有为什么,记住就好,如果你想要一次性在多台主机上进行操作,可以同时写多个主机,每台主机使用逗号隔开,比如 hosts: A,B,如果你在清单中对主机进行了分组,也可以使用组名。

第三行,使用 remote_user 关键字可以指定在进行远程操作时使用哪个用户进行操作,remote_user: root 表示清单中的所有主机都使用 root 用户进行操作,上图中,remote_user 关键字与 hosts 关键字对齐,表示它们是平级的,在YAML语法中进行缩进时,不能使用 tab 键进行缩进。

第四行,使用 tasks 关键字指明要进行操作的任务列表,之后的行都属于 tasks 键值对中的值。

之后的行都属于 tasks 任务列表中的任务,可以看出,整个任务列表一共有两个任务组成,每个任务都以 - 开头,每个任务都有自己的名字,任务名使用 name 关键字进行指定,第一个任务使用 ping 模块,使用 ping 模块时没有指定任何参数。第二个任务使用 file 模块,使用 file 模块时,指定了 path 参数与 state 参数的值。

还可使用在单行指定参数,效果和上述配置相同:

---
- hosts: all
  remote_user: root
  tasks:
  - name: ping the host
    ping:
  - name: make directory test
    file: path=/testdir/test state=directory

也可以这样写:

---
- hosts: all
  remote_user: root
  tasks:
  - name: ping the host
    ping:
  - name: make directory test
    file: path=/testdir/test 
          state=directory

运行剧本

运行剧本需要使用 ansible-playbook 命令,示例如下:

$ ansible-playbook test.yml                               

多个 play

一个剧本中也可以存在多个 play,例如:

---
- hosts: B
  tasks:
  - name: ping the host
    ping:
  - name: make directory test
    file:
      path: /testdir/B
      state: directory

- hosts: B,C
  tasks:
  - name: ping the host
    ping:
  - name: make directory test
    file:
      path: /testdir/test
      state: directory

- hosts: 
    B
    C
  tasks:
  - name: ping the host
    ping:

如上所示,上例中有多个 play:

  • 第一个 play 针对 B 执行,这个 play 会执行两个任务。
  • 第二个 play 针对 B 和 C 执行,第二个 play 也包含两个任务,一个是 ping 主机,另一个则是在对应的目标主机上创建 /testdir/test 目录。
  • 第三个 play 同样是针对 B 和 C 执行,细心如你一定发现了,当你需要在 play 中指定多个主机时,有两种语法可以使用,第二个 play 和第三个 play 中的语法都可以指定多个主机,第三个 play 只包含一个任务,即 ping 主机。

检查

语法检查:

$ ansible-playbook --syntax-check test.yml

测试执行(并不是真正执行):

$ ansible-playbook --C test.yml
0

评论区