Playbook特殊用法

playbook语法变化

  • YAML注释

注释可以用于提高可读性,在yaml中 编号或井号字符(#)右侧的所有内容都是注释,如果注释的左侧有内容,请在该编号符合前面加个空格

# 注释内容
编辑内容

编辑内容  # 注释内容   (不建议使用这种注释)
  • YAML字符串

YAML中的字符串通常不需要放在引号里,即使字符串中包含空格。字符串可以用双引号或单引号括起。

编写多行字符串有两种方式。可以使用管道符表示要保留字符串中的换行字符

- name: apache配置
  hosts: apache
  tasks:
    - name: 添加虚拟配置文件
      lineinfile:
        path: /etc/httpd/conf.d/httpd-vhosts.conf
        line: |
          <VirtualHost *:80>
          DocumentRoot "/var/www/html/"
          ServerName example.com
          ProxyRequests Off
          ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.47.129:9000/var/www/html/$1
          <Directory "/var/www/html/">
          Options none
          AllowOverride none
          Require all granted
          </Directory>
          </VirtualHost>
        create: yes   

要编写多行字符串,还可以使用大于号字符来表示换行字符转换成空格并且行内的引导空白将被删除。这种方法通常用于将很长的字符串在空格字符处断行,使它们跨占多行来提高可读性

[root@master playbook]# cat ll.yml 
---
- hosts: apache
  gather_facts: on
  tasks:
  - name: 
    lineinfile:
      path: /opt/ll
      line: >
        wqts
        yyds
        sssxxhhjkk
      create: yes
  • YAML字典
    简单的字典形式:
name: test
svcservice: httpd
svcport:80
字典也可以使用以大括号括起的内联块格式编写 
{name: test,svcservice: httpd,svcport:80}

大多数情况下应避免内联块格式,因为其可读性较低。不过,至少有一种情形中会较常使用它。当playbook中包含角色列表时,较常使用这种语法,从而更加容易区分play中包含的角色和传递给角色的变量

  • YAML列表

简单的列表

hosts:
  - servera
  - serverb
  - serverc
以中括号括起的内联格式,
hosts: [servera,serverb,serverc] 避免使用这种形式
  • 过时的“键=值”playbook简写

某些playbook可能使用较旧的简写方法,通过将模块的键值对放在与模块名称相同的行上来定义任务。

例:
tasks:
  - name: 安装
    yum: name=httpd state=present

通常我们应该将该语法编写成这种形式
tasks:
  - name: 安装
     yum: httpd
     state: present

通常我们应避免简写形式,而使用普通形式。普通形式的行数较多,但更容易操作。任务的关键字垂直堆叠,更容易区分。阅读play时,眼睛直接向一扫视,左右运动较少。而且,普通语法是原生的YAML。

上一篇:Ansible中的playbook


下一篇:Playbook变量