美文网首页
综合架构之playbook剧本扩展功能

综合架构之playbook剧本扩展功能

作者: 一只打不死的小强 | 来源:发表于2019-07-27 17:55 被阅读0次
  • 1剧本扩展的6个功能
  • 2优化之前写过的剧本
ansible

1.剧本判断功能说明

之所以能判断是因为在运行这个脚本的时候它在收集远程主机的信息
但同时也是坑 但如nfs服务停的时候运行剧本的时候会夯住,centos7.6可以自动停掉。centos6会夯一段时间然后报错。
TASK [Gathering Facts] *********************************************************

   三台主机:
    NFS服务客户端(nfs服务启动)          NFS服务端
   centos7  10.0.0.7                centos7 10.0.0.31
   centos6  10.0.0.8 
   centos7  10.0.0.9
  如何判断三台主机哪台是centos6,centos7?

   - hosts: nfs_client
     tasks:
       - name: create file for 41 host
         file: path=/tmp/172.16.1.41 state=directory
         when: (ansible_hostname == "backup")
       - name: create file for 7 host
         file: path=/tmp/172.16.1.7  state=directory
         when: (ansible_hostname == "web01")
         #判断主机名是否为自己对应的主机名 最好先用ansible命令测试一下。
   - hosts: 172.16.1.41
     tasks:
       - name: create file for 41 host
         file: path=/tmp/centos state=directory
         when: (ansible_distribution == "CentOS")
         #判断系统是为是centos

补充:如何对主机信息进行判断-----对主机信息进行收集
setup --- 收集远程主机信息

   ansible_all_ipv4_addresses:                  仅显示ipv4的信息。
   ansible_devices:                         仅显示磁盘设备信息。
   ansible_distribution:                        显示是什么系统,例:centos,suse等。
   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个数(只显示总的个数)。

问题: 获取主机信息,以及子信息?

方法一:
- hosts: rsync
  tasks:
    - name: touch file
      file: path=/etc/oldboy01.txt state=touch
      when: (ansible_eth1.ipv4.address == "172.16.1.41")
方法二:
- hosts: rsync
  tasks:
    - name: touch file
      file: path=/etc/oldboy01.txt state=touch
      when: (ansible_eth1["ipv4"]["address"] == "172.16.1.41")

2.剧本信息循环功能

   循环创建多个用户
   - hosts: 172.16.1.41
     tasks:
       - name: create user
         user: name={{ item }}
         with_items:
           - oldgirl01
           - oldgirl02
           - oldgirl03
           - oldgirl04
           - oldgirl05
       - name: check create user info
         shell: lls -l home|grep oldgril
       - debug: msg={{ user_info.stdout_lines }}

     循环创建多个用户  多个用户uid数值是不同的
   - hosts: 172.16.1.41
     tasks:
       - name: create user
         user: name={{ item.name }} uid={{ item.uid }}
         with_items:
           - {name: "oldgirl06", uid: "3006"}
           - {name: "oldgirl07", uid: "3007"}
           - {name: "oldgirl08", uid: "3008"}
           - {name: "oldgirl09", uid: "3009"}
       - name: check create user info
         shell: grep oldgirl0 /etc/passwd 
       - debug: msg={{ user_info.stdout_lines }}

3.剧本编写忽略错误 调试剧本

不会使用模块,使用shell模块的报错问题

   cat test_忽略错误.yaml
   - hosts: 172.16.1.41
     tasks:
       #- name: install rsync
       #  shell: yum install -y rsync
       - name: create rsync user
         shell: useradd rsync -M -s /sbin/nologin
         ignore_errors: yes
       - name: create backup dir
         shell: mkdir /backup
         ignore_errors: yes
       - name: boot server
         shell: systemctl start rsyncd
         ignore_errors: yes

4.剧本标签设置功能

   # cat test_标签功能.yaml 
   - hosts: 172.16.1.41
     tasks:
       - name: 01:安装软件
         yum: name=rsync state=installed
         ignore_errors: yes
       - name: 02:创建用户
         user: name=rsync create_home=no shell=/sbin/nologin
         ignore_errors: yes
         tags: create_user //设置的标签  得记住标签的名字。
       - name: 03:创建目录
         file: path=/backup state=directory

   ansible-playbook -t create_user test_标签功能.yaml  

执行剧本中标签任务

   ansible-playbook --skip-tags create_user test_标签功能.yaml    --- 跳过指定标签任务,执行其他任务
     ansible-playbook -t create_user test_标签功能.yaml 
   ansible-playbook -t create_user,create_dir test_标签功能.yaml  --- 执行多个标签

5.剧本忽略采集功能

   cat test_忽略采集.yaml 
   - hosts: 172.16.1.41
     gather_facts: no//关闭采集功能
     tasks:
       - name: 01:安装软件
         yum: name=rsync state=installed
         ignore_errors: yes 
       - name: 02:创建用户
         user: name=rsync create_home=no shell=/sbin/nologin
         ignore_errors: yes
         tags: create_user
       - name: 03:创建目录
         file: path=/backup state=directory
         tags: create_dir   
   #说明: 可以提升剧本执行效率; 如果剧本中有判断功能,不能使用此参数

6.剧本信息触发功能

   cat test_触发功能.yaml
   - hosts: 172.16.1.41
     tasks:
       - name: 01:传输配置文件
         copy: src=/etc/ansible/ansible_playbook/rsyncd.conf dest=/etc/
         notify: rsync_restart //配置的参数 监控有没有变化 当由变化的时候进行重启。
       - name: 02:启动服务程序
         service: name=rsyncd state=started //第一次配置文件编好了正常启动
     handlers:
       - name: rsync_restart
         service: name=rsyncd state=restarted
 //整体任务执行完毕,才会执行触发功能

二、多个剧本如何进行整合

  • 第一个历程: 确保每个剧本执行成功
  • 第二个历程: 进行剧本整合
  • 方式一: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

相关文章

网友评论

      本文标题:综合架构之playbook剧本扩展功能

      本文链接:https://www.haomeiwen.com/subject/avwerctx.html