综合架构ansible之playbook

ansible批量管理剧本概念

可以将多个批量操作模块功能整合
简化运维工作复杂度

ansible

ansible剧本编写规范

ymal 语法格式 = python 语法格式

缩进特点: 两个空格表示一个缩进关系

不同的级别都要缩进。
如:主题01
         副标题01
           正文
         副标题02
        正文
       主题02
           副标题01
         #要有一个tasks要进行缩进

(2)冒号用法

冒号后面需要有空格  
冒号结尾不需要有空格
       主机信息: 172.16.1.41   --- key - value (键值写法)
       做什么事:
       01备份数据
       02创建目录

(3)列表用法:

利用短横线加空格构建列表清单
       家务活列表信息: 
       - 扫地
       - 擦桌子
       - 洗床单

ansible剧本内容组成:

演员信息-主机信息
hosts: 管理主机信息
动作信息-任务信息
tasks:
copy: xxx
file: xxx

ansible剧本语法检查方法

[root@m01 ansible_playbook]# cat test01.yaml 
    - hosts: 172.16.1.41
      tasks:
        - file: path=/oldboy/ state=directory
        - copy: content=oldboy62 dest=/oldboy/oldboy.txt

命令

ansible-playbook --syntax-check inotify_server.yaml
ansible-playbook -i /root/hosts test.yaml #指定其他路径的主机配置清单。

ansible剧本执行过程:

如果系统安装了cowsay运行的时候就会出现小牛的形状。

解决办法:进入/etc/ansible/vim ansible.cfg这个文件中,
# don't like cows?  that's unfortunate.
# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1
nocows = 1 #执行的过程中,不会出现小牛的状况。

[root@m01 ansible_playbook]# ansible-playbook -C test01.yaml --- 剧本模拟执行

PLAY [172.16.1.41] ******************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************
ok: [172.16.1.41]

TASK [file] *************************************************************************************************************************
changed: [172.16.1.41]

TASK [copy] *************************************************************************************************************************
changed: [172.16.1.41]

PLAY RECAP **************************************************************************************************************************
172.16.1.41                : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@m01 ansible_playbook]# ansible-playbook  test01.yaml   --- 剧本正式执行

PLAY [172.16.1.41] ******************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************
ok: [172.16.1.41]

TASK [file] *************************************************************************************************************************
changed: [172.16.1.41]

TASK [copy] *************************************************************************************************************************
changed: [172.16.1.41]

PLAY RECAP **************************************************************************************************************************
172.16.1.41                : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0      

题目练习:

  1. 在172.16.1.41主机上操作:
    1) 将定时任务服务停止
    2) 创建一个/etc/目录软连接 在/opt目录中生成
    3) 将本地/etc/hosts文件分发给41主机 保存到/tmp目录中
 - hosts: 172.16.1.41
      tasks:
        - service: name=crond  state=stopped
        - file: src=/etc/ path=/opt/etc_soft_link state=link
        - shell: ln -s /etc/ /opt/etc_soft_link
        - copy: src=/etc/hosts dest=/tmp/
  1. 在172.16.1.31主机上操作:
    1) 将防火墙服务开机自动运行
    2) 将主机上安装keepalived软件
 - hosts: 172.16.1.31
   tasks:
       - service: name=firewalld enabled=yes
       - yum: name=keepalived  state=installed

注意事项:
01. 剧本语法格式 ansible脚本不识别tab空格
02. 模块书写规范
03. 剧本逻辑顺序
04. 尽量少用万能模块 无法重复执行剧本
shell模块没法判断事情是否干过,其他模块会判断。


ansible剧本实现服务一键化部署

rsync服务一键化部署:

第一个历程: 按照模块方式,完成服务每个步骤部署
服务端配置:
01. 安装软件程序
ansible rsync -m yum -a "name=rsync state=installed"
02. 编写配置文件
在管理端准备好服务配置文件
ansible rsync_server -m copy -a "src=/etc/ansible/conf_file/rsyncd.conf dest=/etc/"
03. 创建虚拟用户
ansible rsync_server -m user -a "name=rsync create_home=no shell=/sbin/nologin"
04. 创建密码文件 (授权600)
ansible rsync_server -m copy -a "content='rsync_backup:oldboy123' dest=/etc/rsync.password mode=600"
05. 创建备份目录 (授权 属主 属组)
ansible rsync_server -m file -a "path=/backup state=directory owner=rsync group=rsync"
06. 启动程序服务
ansible rsync_server -m service -a "name=rsyncd state=started enabled=yes"

客户端配置:
01. 创建密钥文件 (授权600)
ansible rsync_client -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
02. 批量测试传输文件
ansible rsync_client -m shell -a "rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password"

rsync服务一键化还原:

- hosts: rsync_server
  tasks:
    - name: 01:delete conf file
      file: path=/etc/rsyncd.conf state=absent
    - name: 02:delete rsync user
      user: name=rsync state=absent 
    - name: 03:delete password file
      file: path=/etc/rsync.password state=absent
    - name: 04:delete backup dir
      file: path=/backup/ state=absent
    - name: 05:boot rsync server
      service: name=rsyncd state=stopped enabled=no

客户端一键还原

- hosts: rsync_client
  tasks:
    - name: 01:delete password file
      file: path=/etc/rsync.password state=absent

nfs服务一键化部署:

nfs服务一键化部署:(解析)

第一个历程: 按照模块方式,完成服务每个步骤部署
服务端配置: 
01. 安装部署软件程序: rpcbind nfs-utile
ansible nfs_server -m yum -a "name=rpcbind state=installed"
ansible nfs_server -m yum -a "name=nfs-utile state=installed"
02. 编写配置文件:   
/etc/ansible-playbook/nfs.conf 
ansible nfs_server -m copy -a "src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/exports"
03. 创建共享目录:
ansible nfs_server -m file -a "path=/data/ state=directory owner=nfsnobody group=nfsnobody"
04. 启动程序服务:
ansible nfs_server -m service -a "name=rpcbind state=started enabled=yes"
ansible nfs_server -m service -a "name=nfs state=started enabled=yes"

客户端配置:(分析)

01. 安装部署软件 
ansible nfs_client -m yum -a "name=nfs-utile state=installed"
02. 挂载共享目录
ansible nfs_client -m mount -a "src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted"

编写NFS服务部署剧本

- hosts: nfs_server
  tasks:
    - name: 01:install nfs rpcbind
      yum:
        name:
          - rpcbind
          - nfs-utils
        state: installed   //saltstack语言
    - name: 02:copy conf file
      copy: src=/etc/ansible/ansible_playbook/nfs.conf  dest=/etc/exports
    - name: 03:create data dir
      file: path=/data/ state=directory owner=nfsnobody group=nfsnobody
    - name: 04:boot server rpcbind
      service: name=rpcbind state=started enabled=yes
    - name: 04:boot server nfs
      service: name=nfs state=restarted enabled=yes
- hosts: nfs_client
  tasks:
    - name: 01:install nfs
      yum: name=nfs-utils state=installed
    - name: 02:mount data dir
      mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=mounted

nfs恢复环境剧本

- hosts: nfs_server 
  tasks:
    - name: 01:install nfs rpcbind
      yum:
        name:
          - rpcbind
          - nfs-utils
        state: removed
    - name: 02:copy conf file
      shell: echo "" >/etc/exports
    - name: 03:create data dir
      file: path=/data/ state=absent
- hosts: nfs_client
  tasks:
    - name: 01:install nfs
      yum: name=nfs-utile state=removed
    - name: 02:mount data dir
      mount: src=172.16.1.31:/data/ path=/mnt fstype=nfs state=unmounted(anbsent自动挂载取消)

04. ansible剧本编写扩展功能

  • a 剧本变量编写功能
  • b 剧本信息通知功能
  • c 剧本信息判断功能
  • d 剧本信息循环功能
  • e 剧本编写忽略错误
  • f 剧本标签设置功能
  • g 剧本忽略采集功能
  • h 剧本信息触发功能

剧本变量编写功能

设置变量方法一: 在剧本中设置变量 命令变量>剧本变量>主机清单变量

- hosts: 172.16.1.41
      vars:
        dir: /etc
        file: rsyncd.conf
      tasks:
        - name: copy file 
          copy: src={{ dir }}/{{ file }} dest={{ dir }}/

设置变量方法二: 在主机清单中设置变量 主机清单变量最不优先

    172.16.1.41 ansible_user=root ansible_password=123456
    172.16.1.31
    [rsync_server:vars]   --- 给指定主机组统一设置变量
    dir=/etc
    file=rsyncd.conf

设置变量方法三: 在剧本执行命令参数中设置变量 命令行最优先

ansible-playbook -e dir=/etc -e file=rsyncd.conf test_变量功能.yaml

剧本信息通知功能(会将执行的结果输出到屏幕)

- hosts: 172.16.1.41
  tasks:
    - name: boot server
      service: name=rsyncd state=started
    - name: check server boot
      shell: netstat -lntup|grep 873
      register: oldboy
    - debug: msg={{ oldboy.stdout_lines }} debug: msg{{  }}

你可能感兴趣的:(综合架构ansible之playbook)