ansible进阶

系列文章目录

第一章 ansible入门
第二章 ansible变量
第三章 ansible剧本



前言

为了写出更强大的剧本文件,因此需要学习接入更多的ansible高阶模块用法,使自己写的自动化运维工具不再单一,技术得到提升。


一、register 注册模块

	tasks:
	  - name: get variable
	    command: echo "{{name}}{{id}}.{{domain}}"
	    register: result  #将上述command执行的结果注册到临时变量result中
	  - name: print variable
	    debug:  #使用debug模块进行显示输出
	      msg: "{{result.stdout}}" #此处通过result.stdout将上述结果进行输出

二、when条件

	tasks:
	  - name: get variable
	    command: /sbin/shutdown -h now
	    when: ansible_os_family == "RedHat"  #当系统是RedHat时执行关机操作
when高级条件使用见引用文件包含 
(exists、not exists、defined、undefined、none、success、failure、change、skip)
https://blog.csdn.net/weixin_43384009/article/details/105212822?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-105212822-blog-109605435.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-105212822-blog-109605435.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=2

三、循环模块

with_items示例:
- name: copy rpm package
  copy:
    src: '{{ item.src }}'
    dest: '{{ item.dest }}'
  with_items:
    - { src: '{{src_dir }}',dest: '{{ dest_dir}}'}

loop示例:
- name: Execute Script and add 7005 7006 port
  shell: '{{ create_port_sh }} {{ item }}'
  loop:
    - '7005 yes'
    - '7006 yes'
  when: ansible_hosts == 'Redis03'

四、触发器notify

- name: add file
  lineinfile:
    path: '{{ redis_conf }}'
    line: '{{ item }}'
    insertafter: 'AFTER THIS FILE'
    state: present
  with_items:
    - 'requirepass {{ redis_passwd}}'
    - 'masterauth {{redis_passwd}}' #设定redis密码并将密码添加到redis.conf配置文件的末尾
  notify: #写入完成后,触发器执行开始,分布重启3个节点中的redis notify要与handler遥相呼应
    - restart redis service 7001
    - restart redis service 7002
    - restart redis service 7003
    - restart redis service 7004
    - restart redis service 7005
    - restart redis service 7006
在handler目录中实现触发器功能
---
#7001
- name: restart redis service 7001 #此处必须与notify呼应
  shell: '{{ service_port_7001}} {{item}}'
  loop:
    - restart
  when: ansible_hosts == 'Redis01'
- name: check redis 7001 if already started
  shell: "netstat -antp | grep 7001 | awk 'NR==1' | awk -F':' '{print $2}' | awk '{print $1}'" 
  register: port #将上述shell执行结果注册到port变量中
  until: port == '7001' #当port等于7001时代表执行成功
  retries: 2 #重试次数,与 until 配合适用
  delay: 5 #延迟的秒数
  ignore_errors: true # true 将会忽略任务失败使下面的任务继续运行 反之则停止
	....

五、tags

在playbook可以为某个或某些任务定义一个“标签”,在执行playbook的时候,
可以通过ansible-playbook 使用--tags选项,实现仅允许指定的tags
示例:
 - name: install configuration file for httpd
   templete: src=/root/templates/httpd.conf.js dest=/etc/httpd/conf/httpd.conf
   tags:
      - conf
执行指定的tags
ansible-playbook --tags="conf" ./tag_test.yml #有多个tags则使用--tags="conf,xx" 逗号分隔

排除tags
--skip-tags 执行除 --skip-tags 标签之外的所有任务

查看yml中所有的tags
ansible-playbook install_httpd.yml --list-tags

六、assert模块

检查所有主机是否都可以连接到指定的主机组
- hosts: graylogHost  #主机组
  pre_tasks: #在运行 roles 部分之前需要执行的一些任务,例如检查所有主机是否都可以连接到 graylogHost 主机。
    - name: Check ALL hosts are reacheable before doing the release
      assert: #这个模块用于进行断言判断。
        that: #这个参数传递一个 True 或 False 的条件表达式,用于测试条件是否成立
          - ansible_play_hosts == groups.graylogHost  #判断Ansible内置变量是否等于主机组
        fail_msg: 1 or more host is UNREACHABLE #如果检测到有一个或多个主机无法连接,则会输出此失败消息
        success_msg: ALL hosts are REACHABLE, go on  #如果所有主机都能连接,则会输出此成功消息
      run_once: yes #这个参数表示只在第一个主机上运行此任务列表。
  roles:
    - graylog

七、facts组件

facts组件是Ansible用于采集被管理机器设备信息的一个功能。

gathering:facts的开关,默认是开启的;有以下三个取值:
	smart:开启facts信息收集,但是会优先使用facts缓存信息,可以使用gather_facts: False禁用facts收集;
	implicit:开启facts信息收集,要禁止收集,必须使用gather_facts: False;
	explicit:关闭facts信息收集,要显式收集,必须使用gather_facts: Ture。
	
fact_caching:缓存facts信息的方式;可以配置成jsonfile或者redis;
fact_caching_connection:缓存插件的配置,针对不同的fact_caching方式,取值含义则不同:

	如果fact_caching为jsonfile,则此处应配置存储缓存文件的目录;
	如果fact_caching为redis,则此处应按照host:port:database的格式配置redis的信息。
	gather_timeout:收集超时时间,默认为86400;
	fact_caching_timeout:设置facts缓存的过期时间,默认是86400
切记:当gather_facts: Ture 整个yml文件执行会很慢

八、debug模块

- name: 输出变量的值
  debug:
    var: my_variable- name: 输出任务执行结果
  debug:
    msg: "任务执行成功"- name: 输出复杂变量的特定属性
  debug:
    var: my_dict.my_key- name: 输出循环中的每个项
  debug:
    msg: "当前项是 {{ item }}"
  loop:
    - item1
    - item2
    - item3
  debug:
    msg: "debug message"
  verbosity: 2
  
  shell: "grep pattern file.txt | head -1"
  register: result
  debug:
    var: result.stdout
在上面的示例中,我们使用debug模块输出了不同类型的调试信息。
1、可以使用var参数来输出变量的值
2、使用msg参数来输出自定义消息
3、还可以使用loop参数在循环中输出每个项的值
4、使用verbosity参数可以指定输出的调试级别 【0:输出所有调试信息(默认)1:不输出变量值等详细信息 2:只输出关键信息 3:只输出指定的信息】
5、在第一个任务中,使用shell模块执行命令,并将命令的输出注册为一个新的变量result。然后在第二个任务中,使用Debug模块输出result.stdout变量的值

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值