Ansible教程(3)playbook的基本使用

Tanglu 系统运维 2020-09-22 10473 0

一、什么是Playbook

如果基于AD-Hoc去执行多任务(如安装Nginx、修改配置文件、启动服务),需要先使用yum或command模块安装程序,再使用copy模块复制配置文件,最后使用service模块启动服务。为了解决这种多任务繁琐的情况,可以使用Ansible的playbook(剧本)功能。


二、Ansible playbook的构成

Inventory:主机列表,表示剧本中的任务要应用在哪些主机上

Tasks:具体任务,即调用哪些模块完成操作,可以配置多个任务

Variables:变量,包含内置变量和自定义变量

Templates:模板,即使用模板语法来灵活变更的配置文件

Handlers与notify:触发器,由某事件触发执行的操作,比如修改配置文件后自动重启服务


三、Playbook的语法要求

1、playbook本质是包含了一个或多个play的YAML配置文件,通常以.yaml或者.yml结尾

2、在单一的一个playbook文件中,使用连续的三个中横线(---)作为每个play的区分

3、缩进必须统一,不能空格和tab混合使用,缩进级别需要一致,同样的缩进代表同样的级别


四、Ansible playbook示例说明

cat playbook01.yml
---                       #固定格式
- hosts: 192.168.1.31     #定义需要执行的主机或主机组
  remote_user: root       #远程用户
  vars:                   #定义变量
    http_port: 8088       #变量
  tasks:                  #定义一个任务
    - name: create new file          #定义任务的名称
      file: name=/tmp/playtest.txt state=touch   #调用模块,具体要做的事情
    - name: install package
      yum: name=httpd
    - name: config httpd
      template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify:   #触发器,当条件触发后需要做的操作,配合handlers使用
        - restart apache  #需要引用的handlers的名字
    - name: copy index.html
      copy: src=/var/www/html/index.html dest=/var/www/html/index.html
    - name: start httpd
      service: name=httpd state=started
  handlers:   #notify定义的触发执行相应的处理动作
    - name: restart apache                     #要与notify定义的内容相同
      service: name=httpd state=restarted      #触发要执行的动作


hosts:指定远程主机(多个主机用逗号分隔)或主机组

remote_user:指定执行任务的用户(也可单独给每个task定义),通常是root用户,也可指定非root用户使用sudo方式执行任务

---
- hosts: 192.168.1.31
  remote_user: root  #定义全局用户


tasks: 
  - name: run df -h
    remote_user: test  #单独为task定义用户
    shell: name=df -h


sudo(可省略):如果设置为yes,那么sudo_user指定的用户在执行任务时会获得root权限

sudo_user(可省略):指定需要使用sudo执行操作的用户

tasks: 
  - name: run df -h
    sudo_user: test
    sudo: yes
    shell: name=df -h


connection(可省略):通过什么方式连接到远程主机,默认为SSH    

gather_facts(可省略):如果明确不需要通过setup模块来获取远程主机facts信息,可以使用这个选项


五、运行Ansible playbook

当playbook运行后在PLAY RECAP(汇总报告)一列将返回返回的结果包含了任务ok的数量(已经达到任务要求,无需再次处理)、changed数量(经过了ansible的处理,再次执行则会发现这些信息也变成了ok

playbook1.png


ansible-playbook命令示例与常用选项

ansible-playbook -t tag_name httpd.yml #-t指定标签名,多个标签用逗号分隔
ansible-playbook playbookname.yml --list-task #列出该playbook中的任务

# --check | -C:只检测可能会发生的改变,但不真正执行操作
# --list-hosts:列出运行任务的主机
# --list-tags:列出playbook文件中定义的所有tags
# --list-tasks:列出playbook文件中定义的所有任务
# --limit:主机列表 只针对主机列表中的某个主机或者某个组执行
# -f:指定并发数,默认为5个
# -t:指定tags运行,运行某一个或者多个tags。前提是playbook中有定义tags
#  -e:声明变量和值


六、使用ansible-vault加密Playbook

ansible-vault encrypt hello.yml  #加密playbook,加密否的文件无法直接执行和查看
ansible-vault view hello.yml  #查看加密后的文件
ansible-vault edit hello.yml  #查看加密后的文件
ansible-vault decrypt hello.yml  #解密playbook

评论