Ansible运维自动化工具(playbooks应用)

  • A+
所属分类:自动化工具

Ansible传送门

Ansible运维自动化工具(简介)

Ansible运维自动化工具(安装)

Ansible运维自动化工具(主机组)

Ansible运维自动化工具(模块)

Ansible运维自动化工具(playbooks简介)

Ansible运维自动化工具(playbooks应用)

Ansible运维自动化工具(roles进阶)

plabooks应用

运行playbook,使用ansible-playbook命令

(1) 检测语法

ansible-playbook –syntax-check /path/to/playbook.yaml

(2) 测试运行

ansible-playbook -C /path/to/playbook.yaml
    –list-hosts
    -list-tasks
    –list-tags

(3) 运行

ansible-playbook /path/to/playbook.yaml
    -t TAGS, –tags=TAGS
    –skip-tags=SKIP_TAGS
    –start-at-task=START_AT

示例1:定义一个playbook任务来新增用户和组、拷贝文件

[root@py ~]# cat group.yml
- hosts: all
  remote_user: root
  tasks:
  - name: add a group
    group: name=testgroup system=true
  - name: add a user
    user: name=testuser group=testgroup system=true
 
- hosts: webserver
  remote_user: root
  tasks:
  - name: copy file to webserver
    copy: src=/etc/inittab dest=/tmp/inittab.ansible

检查语法错误

[root@py ~]# ansible-playbook --syntax-check group.yml
playbook: group.yml

-C表示仅测试跑一边,但是不会实际操作

[root@py ~]# ansible-playbook -C group.yml

查看仅影响的主机

[root@py ~]# ansible-playbook -C group.yml --list-hosts
playbook: group.yml
play #1 (all): all TAGS: []
pattern: [u'all']
hosts (1):
192.168.1.3
play #2 (webserver): webserver TAGS: []
pattern: [u'webserver']
hosts (1):

查看哪些任务

[root@py ~]# ansible-playbook -C group.yml --list-task
playbook: group.yml
play #1 (all): all TAGS: []
tasks:
add a group TAGS: []
add a user TAGS: []
play #2 (webserver): webserver TAGS: []
tasks:
copy file to webserver TAGS: []

查看哪个任务打标

[root@py ~]# ansible-playbook -C group.yml --list-tags
playbook: group.yml
play #1 (all): all TAGS: []
TASK TAGS: []
play #2 (webserver): webserver TAGS: []
TASK TAGS: []

开始正式运行该任务

[root@py ~]# ansible-playbook group.yml

handlers的使用示例

定义一个playbook任务,安装apache服务,Handlers的使用:由特定条件触发的Tasks;notify指定触发handler的名字,handlers的name必须和notify指定的名称一致。

[root@py ~]# vim web.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: install httpd package
    yum: name=httpd state=latest
  - name: install conf file
    copy: src=/test/httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:
  - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
  service: name=httpd state=restarted

运行任务

[root@py ~]# ansible-playbook web.yml

playbook中定义变量

示例1:vars 定义变量名,引用变量用两个花括号

[root@py ~]# vim web.yml
- hosts: webserver
  remote_user: root
  vars:
  - pkgname: httpd
  tasks:
  - name: install httpd package
    yum: name={{ pkgname }} state=latest
  - name: install conf file
    copy: src=/test/httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: start httpd service
    service: name=httpd state=started

示例2:在hosts Inventory中为每个主机定义专用变量值

[root@py ~]# vim /etc/ansible/hosts
[webserver]
192.168.1.3 pkname=vsftpd
192.168.1.4 pkname=samba
[root@py ~]# vim install.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: install package
    yum: name={{ pkname }} state=latest

示例3:在hosts Inventory中为webserver主机组定义变量httpd

[root@py ~]# vim /etc/ansible/hosts
[webserver]
192.168.1.3
192.168.1.4
 
[webserver:vars]
pkname=httpd
[root@py ~]# vim install.yml
- hosts: webserver
  remote_user: root
  tasks:
    - name: install package
      yum: name={{ pkname }} state=latest

条件测试

when语句:在task后添加when子句即可使用条件测试;when语句支持Jinja2表达式语法。例如:

示例:利用Ansible条件测试在RedHat关闭系统

setup模块获取系统信息

[root@py ~]# ansible all -m setup|grep ansible_os_family
"ansible_os_family": "RedHat",
[root@py ~]# vim install.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: "shutdown systems"
    command: /sbin/shutdown -h now
    when: ansible_os_family == "RedHat"

迭代

当有需要重复性执行的任务时,可以使用迭代机制。

其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句来指明迭代的元素列表即可。

示例1:基于列表的方式安装多个安装包

[root@py ~]# vim web.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: install server package
    yum: name={{ item }} state=latest
    with_items:
    - httpd
    - php
    - php-mysql

示例2:基于字典列表给元素方式创建用户

[root@py ~]# vim user.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: create groups
    group: name={{ item }} state=present
    with_items:
    - group1
    - group2
    - group3
  - name:create users
    user: name={{ item.name}} group={{ item.group }} state=present
    with_items:
    - {name: 'user1', group: 'group1'}
    - {name: 'user2', group: 'group2'}
    - {name: 'user3', group: 'group3'}

tags标识

给指定的任务定义一个调用标识;

示例1:定义install、copyfile 两个标签

[root@py ~]# vim web.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: install httpd package
    yum: name=httpd state=latest
  tags: install
  - name: install conf file
    copy: src=/test/httpd.conf dest=/etc/httpd/conf/httpd.conf
  tags: copyfile
  - name: start httpd service
    service: name=httpd state=started

指定install标签运行,所以此处不会显示拷贝文件和启动服务。

[root@py ~]# ansible-playbook -t install web.yml

指定install copyfile标签运行,所以此处不会显示启动服务。

[root@py ~]# ansible-playbook -t install,copyfile web.yml

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: