批量管理剧本编写规范与方法

批量管理剧本编写规范

剧本组成部分:

1)host 定义需要管理主机信息 参照/etc/ansible/hosts

2)task 定义具体需要执行任务信息 需要依靠各种模块功能完成任务

编写语法规范:

3个要求:

1)满足缩进要求:

举例:
host:
  oldboy
  oldgirl
task:
  name:01
  yum:
    name:httpd
    state:installed   

2)满足字典要求(key: value):需要用冒号分割。同一行时冒号后有空格,不同行时冒号后面无需加空格

举例:
host: oldboy
task:
  name: xxx

3)满足列表要求:需要将同级别或功能配置参数前加短横线(空格)

举例:
- host: oldboy
  task:
    - name:01
      yum:
        name:httpd
        state:installed
    - name: 02
      copy:
    - name: 03
      file:

编写简单剧本:一键化部署rsync备份

准备环境:剧本执行过程幂等性不强

客户端主机:web01 web02

服务端主机:backup

第一个历程:定义主机清单信息

[root@m01 scripts]# vim /etc/ansible/hosts

[rsyncserver]
172.16.1.41

[rsynclient]
172.16.1.7
172.16.1.8

PS:提前分发公钥文件

第二个历程:编写剧本文件

cat /etc/ansible/ansible_playbook/test-01.yaml 

- hosts: rsyncserver
  tasks:
    - name: 01-下载软件程序
      yum:
        name: rsync
        state: installed
    - name: 02-发送配置文件
      copy:
        src: /etc/ansible/ansibel_playbook/rsyncd.conf.tmplate
        dest: /etc/rsyncd.conf
    - name: 03-创建虚拟用户信息
      user:
        name: rsync
        shell: /sbin/nologin
        create_home: no
    - name: 04-创建备份存储目录
      file:
        path: /backup
        state: directory
        owner: rsync
        group: rsync
    - name: 05-创建密码文件信息
      copy: 
        content: rsync_backup:zaizai
        dest: /etc/rsync.password
        mode: 0600
    - name: 06-启动服务程序
      service:
        name: rsyncd
        state: started
        enabled: true
        
- hosts: rsynclient
  tasks:
    - name: 01-下载软件程序
      yum:
        name: rsync
        state: installed
    - name: 05-创建密码文件信息
      copy: 
        content: zaizai
        dest: /etc/rsync.password
        mode: 0600

第三个历程:检测剧本文件

监测语法信息:

[root@m01 ansible_playbook]# ansible-playbook --syntax-check /etc/ansible/ansible_playbook/test-01.yaml 

playbook: /etc/ansible/ansible_playbook/test-01.yaml

执行:

[root@m01 ansible_playbook]# ansible-playbook /etc/ansible/ansible_playbook/test-01.yaml 

PLAY [rsyncserver] **************************************************************************

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

TASK [01-下载软件程序] ****************************************************************************
ok: [172.16.1.41]

TASK [02-发送配置文件] ****************************************************************************
changed: [172.16.1.41]


测试执行效果:

[root@web01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 140 bytes  received 43 bytes  366.00 bytes/sec
total size is 158  speedup is 0.86

批量管理剧本编写方法

1)在剧本中设置变量信息

作用说明:可以方便剧本中部分关键信息调整变化

需求:需要创建一个目录,并在创建后目录中创建文件 并设置文件权限

​ 第一种方式:在剧本中直接设置变量
在这里插入图片描述

​ 第二种方式:在主机清单配置文件中设置变量

​ 主机清单自定义变量方法:

1) 单独设置主机变量(/etc/ansible/host)
172.16.1.7 name_info="oldgirl"

2)对主机组设置变量
[oldboy]
172.16.1.7
172.16.1.8

[oldboy:vars]
172.16.1.7 name_info="oldgirl"

​ 第三种方式:在命令执行过程中设置变量

ansible-playbook -e name_info="oldboy" test-02.yaml

2)在剧本中设置注册信息

作用说明:可以对剧本操作任务有提示输出信息

vim test-03-剧本注册功能.yaml

在这里插入图片描述
在这里插入图片描述

3)在剧本中设置判断信息

作用说明:可以根据识别不同主机硬件信息或不同主机系统情况,做不同的处理
如何判断:setup模块收集到网络信息做判断

常用判断条件信息:

ansible_all_ipv4_addresses:				仅显示ipv4的信息。
ansible_devices:						仅显示磁盘设备信息。
ansible_distribution:					显示是什么系统,例:centos, suse等。
ansible_distribution_major_version:		显示是系统主版本。
ansible_distribution_version:			仅显示系统版本。
ansible_machine:						显示系统类型,例:32位,还是64位。
ansible_ethx:							仅显示eth0的信息。
ansible_hostname:						仅显示主机名。
ansible_kernel:							仅显示内核版本。
ansible_lvm:							显示lvm相关信息。
ansible_memtotal_mb:					显示系统总内存。
ansible_memfree_mb:						显示可用系统内存。
ansible_memory_mb:						详细显示内存情况。
ansible_swaptotal_mb:					显示总的swap内存。
ansible_swapfree_mb:					显示swap内存的可用内存。
ansible_mounts:							显示系统磁盘挂载情况。
ansible_processor:						显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:				显示cpu个数(只显示总的个数)。

例如:不同主机创建不同目录

web
172.16.1.7				创建一个web01目录
172.16.1.8				创建一个web02目录
172.16.1.9				创建一个web03目录
vim test-04-剧本判断功能.yaml

- host: web
  tasks:
    - name: 不同主机创建不同目录-web01
    file:
      path: /web01
      state: directory
    when: ansible_eth37.ipv4.address == "172.16.1.7"
    - name: 不同主机创建不同目录-web02
    file:
      path: /web02
      state: directory
    when: ansible_eth37.ipv4.address == "172.16.1.8"
    - name: 不同主机创建不同目录-web03
    file:
      path: /web03
      state: directory
    when: ansible_eth37.ipv4.address == "172.16.1.9"
    

vim /etc/ansible/hosts
[web]
172.16.1.7
172.16.1.8
172.16.1.9
vim test-04-剧本判断功能.yaml

- host: web
  tasks:
    - name: 不同主机创建不同目录-web01
    file:
      path: /web01
      state: directory
    when: ansible_eth37.ipv4.address == "172.16.1.7"
    - name: 不同主机创建不同目录-web02
    file:
      path: /web02
      state: directory
    when: ansible_eth37.ipv4.address == "172.16.1.8"
    - name: 不同主机创建不同目录-web03
    file:
      path: /web03
      state: directory
    when: ansible_eth37.ipv4.address == "172.16.1.9"
    

vim /etc/ansible/hosts
[web]
172.16.1.7
172.16.1.8
172.16.1.9

在这里插入图片描述单一条件做判断:

when: ansible_eth1.ipv4.address == "172.16.1.7"

多个条件做判断:与 或 关系

ansible_eth1.ipv4.address == "172.16.1.7"
ansible_distribution == "CentOS"

when:(ansible_eth1.ipv4.address == "172.16.1.7") and (ansible_distribution == "CentOS")
when:(ansible_eth1.ipv4.address == "172.16.1.7") or (ansible_distribution == "CentOS")

4)在剧本中设置循环信息

作用说明:可以利用循环功能简化剧本编辑信息

在被管理主机上 创建3个用户  oldbaby01  oldbaby02  oldbaby03

单一变化信息进行循环:

vim test-05-剧本循环功能.yaml
- hosts: 172.16.1.7
  tasts:
    - name: 创建用户
      user:
        name: "{{ item }}"
        with_items:
        - oldbaby01
        - oldbaby02
        - oldbaby03

在被管理主机上 创建3个用户

olddog01	uid=7771	shell=/bin/bash
olddog02	uid=7772	shell=/sbin/nologin
olddog03	uid=7773	shell=/bin/sh

多个变化信息进行循环

- hosts: 172.16.1.7
  tasts:
    - name: 创建用户
      user:
        name: "{{ item.info }}"
        uid: "{{ item.id }}"
        shell: "{{ item.login }}"
      loop:
        - { info: 'olddog01', id: '7771', login; '/bin/bash' }
        - { info: 'olddog02', id: '7772', login; '/sbin/nologin' }
        - { info: 'olddog03', id: '7773', login; '/bin/sh' }

5)在剧本中设置错误忽略

作用说明:提高剧本执行的幂等性

ignore_errors: yes

- hosts: 172.16.1.7
  tasts:
    - name: 创建用户
      user:
        name: "{{ item.info }}"
        uid: "{{ item.id }}"
        shell: "{{ item.login }}"
      loop:
        - { info: 'olddog01', id: '7771', login; '/bin/bash' }
        - { info: 'olddog02', id: '7772', login; '/sbin/nologin' }
        - { info: 'olddog03', id: '7773', login; '/bin/sh' }
        ignore_errors: yes
      - name:创建目录信息
        file:
          path: /oldboy
          state: directory

6)在剧本中设置标签信息

作用说明:可以对指定任务信息做标记

- hosts: 172.16.1.7
  tasts:
    - name: 创建用户
      user:
        name: "{{ item.info }}"
        uid: "{{ item.id }}"
        shell: "{{ item.login }}"
      loop:
        - { info: 'olddog01', id: '7771', login; '/bin/bash' }
        - { info: 'olddog02', id: '7772', login; '/sbin/nologin' }
        - { info: 'olddog03', id: '7773', login; '/bin/sh' }
        ignore_errors: yes
        tags: create_user
      - name:创建目录信息
        file:
          path: /oldboy
          state: directory
      - name: 安装软件程序
        yum:
          name: nginx
          state: installed
      - name: 启动服务程序
        service:
          name: nginx
          state: started

方式一:选择标记的任务进行执行

ansible_playbook -t create_user test-07-剧本标签功能.yaml

在这里插入图片描述
方式二:跳过标记功能

ansible_playbook --skip-tags create_user test-07-剧本标签功能.yaml

在这里插入图片描述

7)剧本执行加速功能

当剧本有判断功能时不能使用该功能

- hosts: web
  gather_facts: no
  tasts:
    - name: 创建用户
      user:
        name: "{{ item.info }}"
        uid: "{{ item.id }}"
        shell: "{{ item.login }}"
      loop:
        - { info: 'olddog01', id: '7771', login; '/bin/bash' }
        - { info: 'olddog02', id: '7772', login; '/sbin/nologin' }
        - { info: 'olddog03', id: '7773', login; '/bin/sh' }
        ignore_errors: yes
        tags: create_user
      - name:创建目录信息
        file:
          path: /oldboy
          state: directory
      - name: 安装软件程序
        yum:
          name: nginx
          state: installed
      - name: 启动服务程序
        service:
          name: nginx
          state: started

8)在剧本中设置触发信息

作用说明:当某个任务信息执行时,才会执行其他某个任务,当某个任务未操作时,其他任务无需执行

需求:创建备份服务剧本:

如果配置文件改动,就需要重启服务程序(A任务执行,B任务才执行)

- hosts: rsyncserver
  tasks:
    - name: 01-下载软件程序
      yum:
        name: rsync
        state: installed
    - name: 02-发送配置文件
      copy:
        src: /etc/ansible/ansibel_playbook/rsyncd.conf.tmplate
        dest: /etc/rsyncd.conf
      notify: restarted_rsync
    - name: 03-创建虚拟用户信息
      user:
        name: rsync
        shell: /sbin/nologin
        create_home: no
    - name: 04-创建备份存储目录
      file:
        path: /backup
        state: directory
        owner: rsync
        group: rsync
    - name: 05-创建密码文件信息
      copy: 
        content: rsync_backup:zaizai
        dest: /etc/rsync.password
        mode: 0600
    - name: 06-启动服务程序
      service:
        name: rsyncd
        state: started
        enabled: true
  handler:
    name: restarted_rsync
    service:
    name:rsyncd
    state:restarted  

效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值