playbook的编写(一)

 

playbook使用空格进行缩进,来表示数据结构,空格的数量没有严格要求

play主要由三个键值组成: name  hosts  tasks

name:自定义描述信息 (可以不写但要注意格式)

hosts:指定在哪些主机上运行play

tasks:定义该play要执行哪些任务

 

简单的playbook格式如下:

 

当一个playbook写完后不要急着执行:

1 检测下语法是否正常

# ansible-playbook --help | grep syntax

# ansible-playbook --syntax-check  xxx.yml

2 空运行(没有在控制主机上运行playbook)

# ansible-playbook --help | grep check

# ansible-playbook -C xxx.yml    -C  ==  --check

3 执行playbook 

# ansible-playbook xxx.yml 

显示任务执行的过程和执行时所需的配置和清单文件

# ansible-playbook xxxyml -vv    (会显示详细的信息,当执行playbook报错误时加上-vv查看详细进行判断)

 

 

 

二 管理变量 %%

命名变量:变量要以字母开头,包含字母数字下划线等

定义变量: 

1 全局范围:从命令行或ansible主配置文件中定义变量

2 play范围:在playbook中定义变量

3 主机范围:清单文件

注:如果在多个级别定义了相同名称的变量,则采用优先级最高的变量

  清单定义的变量将被playbook定义的变量覆盖,后者将被命令行中定义的变量覆盖

 

在playbook中定义变量 (playbook中定义变量都是:)

方式一: 将变量放在playbook开头的vars块中

- hosts: all
  vars:
    user: job
    home: /home/job

方式二:使用外部文件中定义playbook变量vars_files

- hosts: all
  vars_files:
    - vars/users.yml

#在users.yml中已经定义的变量
user: job
home: /home/job

 

在playbook中使用变量

引用变量可将变量名在花括号"{{ }}"内,ansible会将变量替换为其值 

vars:
    user: job
tasks:
    - name: create the user {{ user }}
      user:
        name: "{{ user }}"

清单中的变量 (清单中定义的变量都是= )

# 定义demo.example.com的ansible_user主机变量
demo.example.com  ansible_user=job
demo.example.com  ansible_ssh_pass=Admin123

# 定义servers 主机组的user组变量
[servers]
demo1.example.com
demo2.example.com

[servers:vars]
user=job

# 主机组嵌套引用变量
[servers:children]
production
backup

[servers:vars]
ansible_user=job

注: 以上写法不推荐,推荐用下面的写法

 

使用目录填充主机或主机组变量

host_vars

group_vars

创建 host_vars/${主机名}
$ cat host_vars/demo1.example.com user: job package: httpd

创建 host_vars/${组名}
$ cat group_vars/backup
user: natasha

 

 

从命令行覆盖变量

 

命令变量优先级最高 ---> playbook ---> 全局变量(ansible.cfg)

 

使用注册变量捕获命令输出

debug: 调试模块

  常用参数:

  msg: 调试输出消息

  var: 把变量值显示出来

 

LAB:安装apache并配置好firewalld (用变量)

---
- name: Deplay and start Apache HTTPD service
  hosts: webserver
  vars:
        web_pkg: httpd
        firewall_pkg: firewalld
        web_service: httpd
        firewall_service: firewalld
        rule: http
  tasks:
        - name: install packages
          yum:
                name:
                    - "{{ web_pkg }}"
                    - "{{ firewall_pkg }}"
                state: latest
        - name: start service httpd
          service:
                name: "{{ web_service }}"
                state: started
        - name: start service firewalld
          service:
                name: "{{ firewall_service }}"
                state: started
    - name: the firewall port for http is open 
      firewalld:
          service:
"{{ rule }}"
          permanent: yes
          immediate: yes     #立即生效
          state: enabled

service+loop 实现循环

 

加密 解密 查看 变量文件(管理机密) %%

创建加密文件

ansible-vault 

 

vault-pass 首先将密码写进去

 

 

编辑现有的加密文件

 

 

 

加密现有文件

 

 

更改加密文件的密码

 

 

解密 文件

 

ansible 2.4之前:

ansible-playbook --ask-vault-pass  package.yml

ansible 2.4之后:

ansible-playbook --vault-id @密码文件  package.yml

注: 用于加密一些敏感信息如密码文件等,然后通过 变量调区文件中的内容

posted @ 2020-05-18 09:18  鄢笑  阅读(692)  评论(0编辑  收藏  举报