10.ansible tags handles fact include

1.tags 在剧本中设置标签功能

作用:
在剧本编写的过程中需要不断的执行和调试,但并不是所有的模块都需要执行。可以通过标签指定任务模块执行 指定任务模块跳过 提高剧本的编写效率!

1.1为playbook添加标签的方式有如下几种:
  • 对一个task打一个标签
  • 对一个task打多个标签
  • 对多个task打一个标签
1.2 task打完标签的调用方式

-t tags_name 执行指定的tags
--skip-tags tags_name 跳过指定的tags

- hosts: 192.168.1.43
  tasks:
  - name: Check File
    file: path=/tmp/this_is_{{ ansible_hostname }}_file state=touch
    when: (ansible_hostname == "nfs01") or (ansible_hostname == "backup")
    tags: t1
  - name: bad thing
    command: cmd=echo 123
    tags: t2
  - name: install httpd
    yum: name=httpd state=installed
    when: (ansible_all_ipv4_addresses == ["172.16.1.7","10.0.0.7"])
    tags: t3
  - name: install httpd2
    yum: name=httpd2 state=installed
    when: (ansible_distribution == "ubuntu")
    tags: t4

指定执行哪个标签任务: ansible-playbook --tags=t2 test05.yml
跳过指定标签任务: ansible-playbook --skip-tags=t2 test05.yml
如下例所示,不同的任务可以使用相同的标签。

- hosts: test70
  remote_user: root
  tasks:
  - name: install httpd package
    tags: httpd,package
    yum:
      name=httpd
      state=latest
 
  - name: start up httpd service
    tags: httpd,service
    service:
      name: httpd
      state: started

上例中每个任务都有多个标签,而且上例中两个任务都有一个共同的标签,就是httpd标签,所以,当我们执行'ansible-playbook --tags=httpd testhttpd.yml',上述两个任务都会执行。

案例1-多个项目调用相同task

1.1.1.编写 restart_httpd.yml 文件
#注意这是一个tasks所有没有play的任何信息
[root@ansible project1]#cat restart_httpd.yml

- name: Restart Httpd Server
  service: name=httpd state=restarted

1.1.2.A Project 的 playbook 如下
[root@ansible project1]# cat a_project.yml
- hosts: webserver
  tasks:
    - name: A Project command
      command: echo "A"
    - name: Restart httpd
      include: restart_httpd.yml
1.1.3.B Project 的 playbook 如下
[root@ansible project1]# cat b_project.yml
- hosts: webserver
  tasks:
    - name: B Project command
      command: echo "B"
    - name: Restart httpd
      include: restart_httpd.yml
1.1.4.验证
[root@ansible project1]# ansible-playbook a_project.yml

1.2 案例2-Inlcude结合tags应用

通过指定标签tags,来说明是安装 tomcat8 还是tomcat9
1.2.1.准备入口 main.yml 文件,然后包含install_tomcat8.yml以及install_tomcat9.yml
1.2.2.在执行 main.yml时,需要通过 --tags 指明要安装的版本
1).编写 main.yml 入口文件

[root@ansible ~]# cat main.yml
- hosts: localhost
  tasks:
    - name: Installed Tomcat8 Version
      include: install_tomcat8.yml
      tags: tomcat8
    - name: Installed Tomcat9 Version
      include: install_tomcat9.yml
      tags: tomcat9

2).编写 install_tomcat8.yml

[root@ansible ~]# cat install_tomcat8.yml
- hosts: webservers
  vars:
    - tomcat_version: 8.5.63
    - tomcat_install_dir: /usr/local
  tasks:
    - name: Install jdk1.8
      yum:
        name: java-1.8.0-openjdk
        state: present
    - name: Download tomcat
      get_url:
        url: http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v{{ tomcat_version }}/bin/apachetomcat-{{ tomcat_version }}.tar.gz
      dest: /tmp
    - name: Unarchive tomcat-{{tomcat_version }}.tar.gz
      unarchive:
        src: /tmp/apache-tomcat-{{tomcat_version }}.tar.gz
        dest: "{{ tomcat_install_dir }}"
        copy: no
    - name: Start tomcat
      shell: cd {{ tomcat_install_dir }} && mv apache-tomcat-{{tomcat_version }} tomcat8 && cd tomcat8/bin && nohup ./startup.sh &

3).编写 install_tomcat9.yml

[root@ansible ~]# cat install_tomcat9.yml
- hosts: webservers
  vars:
    - tomcat_version: 9.0.43
    - tomcat_install_dir: /usr/local
  tasks:
    - name: Install jdk1.8
      yum:
        name: java-1.8.0-openjdk
        state: present
    - name: Download tomcat
      get_url:
        url: http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v{{ tomcat_version }}/bin/apachetomcat-{{ tomcat_version }}.tar.gz 
        dest: /tmp
    - name: Unarchive tomcat-{{tomcat_version }}.tar.gz
      unarchive:
        src: /tmp/apache-tomcat-{{tomcat_version }}.tar.gz
        dest: "{{ tomcat_install_dir }}"
        copy: no
    - name: Start tomcat
      shell: cd {{ tomcat_install_dir }} && mv apache-tomcat-{{tomcat_version }} tomcat9 && cd tomcat9/bin && nohup ./startup.sh &

4).执行 main.yml文件,然后通过 --tags 执行对应的版本

[root@ansible ~]# ansible-playbook main.yml --tags tomcat8
[root@ansible ~]# ansible-playbook main.yml --tags tomcat9

2.handlers 触发器

在playbook的任务执行过程中,有些任务的状态每次都会发生变化,当需要根据变化做出响应,而不用更改后续任务时,handlers是一个不错的选择

- hosts: backup
  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
  handlers:
  - name: restart rsync server
    service: name=rsyncd state=restarted   

实践配置:

[root@m01 ansible_playbook]# cat test_触发功能.yaml 
- hosts: 172.16.1.41
  tasks:
    - name: 分发配置文件
      copy: src=./rsyncd.conf dest=/etc
      notify: rsync_server_restart
    - name: 启动服务
      service: name=rsyncd state=started
  handlers:
    - name: rsync_server_restart
      service: name=rsyncd state=restarted

gather_facts 忽略远程主机采集功能

作用:
gather_facts功能可让ansible去收集各机的信息。
开启gather_facts有利有弊,虽然可以看到更多机器的信息,但是也需要更多执行时间。
因此我们需要按照需求决定是否使用。

- hosts: whatever
  gather_facts: no or yes  #决定是否开启收集功能 

实践配置:

- hosts: 172.16.1.7
  gather_facts: no
  tasks:
    - name: create file
      file: path=/etc/oldgirl.txt state=touch
    - name: mount /data
      mount: src=172.16.1.31:/data path=/mnt state=mounted

PS:判断功能会失效
ansible-playbook test_采集功能.yaml -i ./nfs_hosts -vvvv

4. 将多个剧本进行整合

方式一:include_tasks: f1.yml --- roles 汇总多个剧本

- hosts: all
  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: sersync.yml
- import_playbook: web.yml
- import_playbook: php.yml
- import_playbook: mysql.yml
- import_playbook: lb.yml
- import_playbook: keepalived.yml
===================================
- import_playbook: zabbix.yml
- import_playbook: jumpserver.yml  跳板机
- import_playbook: vpn.yml
- import_playbook: ntpserver.yml
- import_playbook: nosql-redis.yml	
posted @ 2021-03-30 13:53  老夫聊发少年狂88  阅读(94)  评论(0编辑  收藏  举报