Ansible核心功能点就在于playbook,Ansible主要的工作都是在于配置管理,它在实际的工作中会大量编写和使用剧本。

如果说ansible 模块 是你车间里的工具,那么playbooks 是你的说明书/使用手册,并且资源清单上的主机是你的原材料。

在ansible 上使用Playbooks是一种完全不同于adhoc的任务执行模式,并且特别强大。

简单地说,playbooks是一个非常简单的配置管理和多机器部署系统的基础,以及非常适合部署复杂应用程序的系统。

Playbooks可以对任务进行编排,就像我们要安装一个程序,写个安装shell脚本一样,在哪一步复制配置文件,最后一步启动服务。

虽然/usr/bin/ansible 可以运行一些临时任务,但是针对复杂的配置,并且可以将配置标准化,这个时候就需要Playbooks了。

【Anisble剧本】
ansible软件playbook编写需要遵循YAML语法

playbook安装nginx
1.批量卸载所有的nginx

[root@m01 ~]# ansible chaoge -m yum -a "name=nginx state=absent"
[root@m01 ~]# ansible chaoge -m shell -a "rpm -qa nginx warn=false"
192.168.178.110 | CHANGED | rc=0 >>

192.168.178.111 | CHANGED | rc=0 >>

2.查看一个YAML文件,请严格注意
语法的对齐,不得多一个少一个空格
输入法保证英文

[root@m01 scripts]# cat nginx.yaml -n
     1    # install nginx yaml ,by chaoge
     2    - hosts: all
     3      tasks:
     4          - name: Install nginx Package
     5            yum: name=nginx state=present
     6          - name: Copy Nginx.conf
     7            copy: src=./nginx.conf dest=/etc/nginx/nginx.conf mode=0644

3.解释如上的playbook代码,按行解释:

1.表示注释信息,可以用#,也可以用 — 三个短横线
2.定义playbook管理的目标主机,all表示所有的主机,也可以写 主机组名
3.定义playbok所有的任务集合信息,比如该文件,定义了2个任务 ,安装nginx,拷贝nginx配置文件
4.定义了任务的名词,自定义的帮助信息
5.定义任务的具体操作,比如这里用yum模块实现nginx的安装
6.
7.第六、第七两行作用是使用copy模块,把本地当前的nginx.conf配置文件,分发给其他所有客户端机器,且授权

playbook最基本的两个部分

在这里插入图片描述
hosts定义剧本管理的主机信息

#方式一:定义所管理的主机IP地址

  • hosts: 192.168.178.111
    tasks:
    动作…

#方式二:定义所管理主机的名字

  • hosts: backup01
    tasks:
    动作…

#方式三:定义管理主机

  • hosts: 192.168.178.111, rsync01
    tasks:
    动作…

#方式四:管理所有主机

  • hosts: all
    tasks:
    动作…

task定义被管理的主机需要执行的任务

#方式一:采用变量格式设置任务

tasks:

  • name: make sure apache is running
    service: name=https state=running
    #当传入的参数列表过长时,可以将其分割到多行
    tasks:
  • name: copy ansible inventory(清单) file to client
    copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
    owner=root group=root mode=0644

#方式二:采用字典格式设置多任务

tasks:

  • name: copy ansible inventory file to client
    copy:
    src: /etc/ansible/hosts
    dest: /etc/ansible/hosts
    owner: root
    group: root
    mode: 0644

yaml语法解释
在学习saltstack过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。

json xml yaml 数据序列化格式
yaml容易被解析,应用于配置文件

salt的配置文件是yaml配置文件,不能用tab
saltstack,k8s,ansible都用的yaml格式配置文件

#语法规则
大小写敏感
使用缩进表示层级关系
缩进时禁止tab键,只能空格
缩进的空格数不重要,相同层级的元素左侧对其即可
# 表示注释行

yaml支持的数据结构
对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict 冒号表示 key: value key冒号后必须有
数组: 一组按次序排列的值,又称为序列sequence 列表list 短横线 - list1
纯量: 单个不可再分的值

对象:键值对 yaml
first_key:
second_key:second_value

python
{
‘first_key’:{
‘second_key’:‘second_value’,
}
}

playbook执行命令
加载剧本中的功能,可以使用ansible-playbook命令

ansible-playboook nginx.yaml

查看剧本执行详细输出

ansible-playbook nginx.yml --verbose

查看剧本执行影响的主机列表

ansible-playbook nginx.yml --list-hosts

执行playbook指定加载的主机清单文件

ansible-playbook nginx.yml -i /etc/ansible/hosts

执行playbook时检查剧本语法

ansible-playbook nginx.yml --syntax-check

调试playbook时检查剧本语法

ansible-playbook nginx.yml --syntax-check

调试playbook任务,模拟执行,不影响主机配置

ansible-playbook nginx.yml -C

playbook的输出信息
剧本执行过程中会产生响应的输出,根据输出的信息可以掌握剧本是否正确执行,根据输出的措施信息,可以掌握剧本中编写的逻辑错误。

在这里插入图片描述
当本地执行了任务,会得到返回值changed
如果不需要执行了,得到返回值ok

1.准备一个copy剧本

[root@m01 scripts]# cat copy_hosts.yml
- hosts: all
  tasks:
      - name: copy the /etc/hosts
        copy: src=/etc/hosts dest=/etc/hosts

2.第一次执行结果

[root@m01 scripts]# ansible-playbook copy_hosts.yml

PLAY [all] ***************************************************************************

TASK [Gathering Facts] ***************************************************************
ok: [192.168.178.111]
ok: [192.168.178.110]

TASK [copy the /etc/hosts] ***********************************************************
ok: [192.168.178.110]
changed: [192.168.178.111]

PLAY RECAP ***************************************************************************
192.168.178.110            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.178.111            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

3.第二次执行

[root@m01 scripts]# ansible-playbook copy_hosts.yml

PLAY [all] ***************************************************************************

TASK [Gathering Facts] ***************************************************************
ok: [192.168.178.111]
ok: [192.168.178.110]

TASK [copy the /etc/hosts] ***********************************************************
ok: [192.168.178.110]
ok: [192.168.178.111]

PLAY RECAP ***************************************************************************
192.168.178.110            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.178.111            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

由于第一次执行剧本文件,已经复制过,第二次执行,ansible会根据文件属性避免重复复制。

【剧本输出的字段信息】
在这里插入图片描述

playbook一键部署rsync

  • 编写剧本
#定义剧本,功能是安装部署rsync的几个步骤
#看好,左侧对其的元素,就是属于同级的关系,例如 hosts和tasks
#tasks定义了多个任务,分别使用不同的模块去执行,多个任务都是平级关系      
#要注意剧本使用的文件,源文件要提前准备好,由src参数定义的是源文件绝对路径

#playbook rsync
#rsync server   
- hosts: 192.168.178.110    
  tasks:
    - name: step01 install rsync
      yum: name=rsync state=installed
    - name: step02 edit rsync conf file
      copy: src=/etc/ansible/conf/rsync_conf/rsyncd.conf dest=/etc/
    - name: step03 create rsync user
      user: name=rsync state=present createhome=no shell=/sbin/nologin
    - name: step04 create auth file
      copy: src=/etc/ansible/conf/rsync_conf/rsync.passwd dest=/etc/ mode=600
    - name: step05 create backup dir
      file: dest=/backup state=directory owner=rsync group=rsync
    - name: step06 boot rsync server
      shell: rsync --daemon creates=/var/run/rsyncd.pid

#rsync client  nfs01
 - hosts: 192.168.178.111    
  tasks:
    - name: step01:create auth file
      copy: src=/etc/ansible/conf/rsync_conf/rsync_client.password dest=/etc/rsync.password mode=600
  • 执行剧本

#测试一下脚本是否正确

ansible-playbook -C /etc/ansible/ansible-playbook/build_rsync.yml

#通过测试,执行一键部署脚本

ansible-playbook /etc/ansible/ansible-playbook/build_rsync.yml
Logo

一站式 AI 云服务平台

更多推荐