Ansible-Playbook

剧本编写规范: pyyaml ——三点要求

  1. 合理的信息缩进 两个空格表示一个缩进关系
        标题一
          标题二
            标题三
PS: 在ansible中一定不能用tab进行缩进
  1. 冒号的使用方法
    hosts: 172.16.1.41
    tasks:
      yum: name=xx
PS: 使用冒号时后面要有空格信息
以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格

执行剧本:

第一个步骤: 检查剧本的语法格式
ansible-playbook –syntax-check  rsync_server.yaml

第二个步骤: 模拟执行剧本
ansible-playbook -C rsync_server.yaml

第三个步骤: 直接执行剧本   
ansible-playbook rsync_server.yaml 

配置主机清单

第一种方式: 分组配置主机信息

[web]
172.16.1.7
172.16.1.8
172.16.1.9
 
[data]
172.16.1.31
172.16.1.41

操作过程
[root@m01 ansible-playbook]# ansible data -a “hostname”
172.16.1.31 | CHANGED | rc=0 >>
nfs01
   
172.16.1.41 | CHANGED | rc=0 >>
backup
    
[root@m01 ansible-playbook]# ansible web -a “hostname”
172.16.1.7 | CHANGED | rc=0 >>
web01

第二种方式: 主机名符号匹配配置

[web]
172.16.1.[7:9]

[web]
web[01:03]

第三种方式: 跟上非标准远程端口

[web]
web01:52113
172.16.1.7:52113

第四种方式: 主机使用特殊的变量

[web]
172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
[web]
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456

第五种方式: 主机组名嵌入配置

[rsync:children]    — 嵌入子组信息
rsync_server
rsync_client
    
[rsync_server]
172.16.1.41
    
[rsync_client]
172.16.1.31
172.16.1.7
    
[web]
web01
[web:vars]         — 嵌入式变量信息
ansible_ssh_host=172.16.1.7
ansible_ssh_port=52113
ansible_ssh_user=root
ansible_ssh_pass=123456

变量

方式一:直接在剧本文件编写

vars:
  test01: data01
  test02: data02

方式二:在命令行中进行指定

ansible-playbook rsync.yaml -e test01=/data01,test02=/data02

方式三:在主机清单文件编写

[test]
test01=data01
test02=data02

在剧本中设置注册信息

– hosts: test
   tasks:
     – name: check server port
       shell: netstat -lntup  — 端口信息
       register: get_server_port<–端口信息
    
     – name: display port info
       debug: msg={{ get_server_port.stdout_lines }}
显示进程信息,表示服务已经正常启动
PS: 设置变量不能有空格信息

获取内置变量方法:

ansible test -m setup -a “filter=ansible_hostname”

常见主机信息:
ansible_all_ipv4_addresses:            仅显示ipv4的信息。
ansible_devices:                       仅显示磁盘设备信息。
ansible_distribution:                  显示是什么系统。
ansible_distribution_major_version:    显示是系统主版本。
ansible_distribution_version:          仅显示系统版本。
ansible_machine:                       显示系统类型,例:32位,还是64位
ansible_eth0:                          仅显示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个数(只显示总的个数)。

循环

– name: create user
  gather_facts: false
  hosts: rsync_client
  tasks:
    – name: copy01
      copy: src=/etc/{{ item.src }} dest={{ item.dest }} mode={{ item.mode }}
      with_items:
          – { src: ‘hosts’, dest: ‘/tmp/’, mode: ‘600’ }
          – { src: ‘hostname’, dest: ‘/tmp/’, mode: ‘600’ }
– name: create user
  hosts: rsync_client
  vars:
   createuser:
        – www01
        – www02
        – www03
  tasks:
    – name: create user
      user: name={{ item }} state=present
      with_items: “{{ createuser }}”

错误忽略

默认playbook会检查命令和模块的返回状态,如遇到错误就中断playbook的执行
可以加入ignore_errors: yes忽略错误

#vim test06.yml
– hosts: rsync
   remote_user: root
   tasks:
     – name: Ignore False
       command: /bin/false
       ignore_errors: yes
     – name: touch new file
       file: path=/tmp/test_ignore state=touch

标签

– hosts: rsync
   ignore_errors: yes
   remote_user: root
   tasks:
     – name: bad thing
       command: ech 123
       #ignore_errors: yes
       tags: t1
    
     – name: useradd
       user: name=alice state=present
       tags: t2

指定执行哪个标签任务:

ansible-playbook –tags=t2 xxx.yml 

跳过指定标签任务:

ansible-playbook –skip-tags=t1 xxx.yml 

触发器

– hosts: 172.16.1.41
   remote_user: root
   tasks:
     – name: 01 Install rsync
       yum: name=rsync state=present
        
     – name: 02 push config file
       copy: src=./file/{{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }} 
       with_items:
            – { src: “rsyncd.conf”, dest: “rsyncd.conf”, mode: “0644” }
            – { src: “rsync.password”, dest: “rsync.password”, mode: “0600” }
       notify: restart rsync server
          #当这两个文件发生了改变notify就会通知下面的handlers

  handlers:
      – name: restart rsync server
        service: name=rsyncd state=restarted 
          #当handlers收到了notify的通知信息就会执行重启服务的操作

判断

指定判断条件:
(ansible_hostname == “nfs01”)
(ansible_hostname == “web01”)
setup模块中显示被管理主机系统的详细信息

– hosts: test
   remote_user: root
   tasks:
     – name: Check File
       file: path=/tmp/this_is_{{ ansible_hostname }}_file state=touch
       when: (ansible_hostname == “nfs”) or (ansible_hostname == “backup”)    
    
     – name: install httpd
       yum: name=httpd state=installed
       when: (系统情况 == “CentOS”)
          
     – name: install httpd2
       yum: name=httpd2 state=installed
       when: (系统情况 == “ubuntu”) 

剧本整合

方式一:include_tasks: f1.yml

– hosts: all
   remote_user: root
   tasks:
      – include_tasks: f1.yml
      – include_tasks: f2.yml

方式二:include: f1.yml

– include:f1.yml    
– include:f2.yml

方式三:- import_playbook:

[root@m01 ansible-playbook]# cat main.yml 
– import_playbook: base.yml     
– import_playbook: rsync.yml    
– import_playbook: nfs.yml      
– import_playbook: oxxx.yml
– import_playbook: rsync.yml
– import_playbook: nfs.yml
posted @ 2021-08-25 22:28  Cai_HL  阅读(53)  评论(0编辑  收藏  举报
>