首页 > 其他分享 >3、Ansible高级功能--loop、until循环,with_lines逐行处理,条件判断when等

3、Ansible高级功能--loop、until循环,with_lines逐行处理,条件判断when等

时间:2023-06-02 23:03:11浏览次数:42  
标签:tasks name -- changed when cat nginx yml 逐行

ansible的高级功能
1、loop循环
迭代:当有需要重复性执行的任务时,可以使用迭代机制

范例:初始化安装软件包

--- 
- hosts:webservers 
  remote_user: root   
  tasks    
    - name: install some packages     
      yum: name={{ item }} state=present     
      with_items:       
        - nginx       
        - memcached       
        - php-fpm
2、until循环
#until为false时才会执行循环,为true则退出循环
cat until.yml
- Hosts: localhost 
  gather _ facts: false 
  
  tasks: 
    - debug: msg = "until" 
      until: false 
      retries: 3 #默认值即为3次 
      delay: 1
3、with_lines逐行处理
cat with_lines.yml 
- hosts: localhost 
  tasks:    
    - debug: msg={{ item }}     
    with_lines: ps aux
4、条件判断when

范例: 判断OS版本

cat when.yml 
- hosts: all   
  tasks:    
    - name: install httpd     
      yum:
        name: "httpd"     
      when:
        - ansible_distribution_file_variety  == "RedHat"    
    - name: install package     
      apt:       
        name: "apache2"     
      when:        
        - ansible_distribution_file_variety == "Debian"
5、分组block
当想在满足同样条件下,执行多个任务时,就需要分组.而不再针对每个任务都是用 when

范例:

cat block.yml  
- hosts: localhost   
  tasks:    
    - block:        
      - debug: msg="first"        
      - debug: msg="second"     
      when:        
        - ansible_facts['distribution'] == "CentOS"       
        - ansible_facts['distribution_major_version'] == "8"
6、changed_when
1、关闭 changed 状态 
当确定某个task不会对被控制端做修改时但执行结果却显示是黄色的changed状态 
可以通过 changed_when: false 关闭changed状态

cat test_changed.yml
- hosts: webservers 
  tasks: 
    - name: check sshd service 
      shell: ps aux | grep sshd changed_when: false #关闭changed状态
      
2、利用changed_when检查task返回结果
changed_when 检查task返回结果,决定是否继续向下执行

cat test_changed_when.yml 
- hosts: webservers 
  tasks:   
    - name: install nginx     
      yum: name=nginx   
    - name: config file     
      template: src="nginx.conf.j2" dest="/etc/nginx/nginx.conf"     
      notify: restart nginx   
    - name: check config     
      shell: /usr/sbin/nginx -t     
      register: check_nginx_config     
      changed_when:       
        - check_nginx_config.stdout.find('successful')#如果执行结果中有successful字 符串,则继续执行,如果没有则停止向下执行
        - false     #nginx -t 每次成功执行是changed状态,关闭此changed状态
    - name: start service    
      service: name=nginx state=started enabled=yes 
  handlers:   
    - name: restart nginx     
      service: name=nginx state=restarted
7、滚动执行
管理节点过多导致的超时问题解决方法 
默认情况下,Ansible将尝试并行管理playbook中所有的机器.对于滚动更新用例,可以使用serial关键 字定义Ansible一次应管理多少主机,还可以将serial关键字指定为百分比,表示每次并行执行的主机数占总数的比例

vim test_serial.yml 
- hosts: all 
  serial: 2   #每次只同时处理2个主机,将所有task执行完成后,再选下2个主机再执行所有task,直至所有主机
  gather_facts: False 
  
  tasks:   
    - name: task one 
      command: hostname   
    - name: task two    
      command: hostname
8、委派至其它主机执行
利用委托技术,可以在非当前被控主机的其它主机上执行指定操作 
注意: 当前执行的被管理端主机需要实现到被委派主机的ssh key验证才能实现委派 

范例: 将任务委派给指定的主机执行
# 在10.0.0.8上执行hostname -I, 而非当前主机localhost 
cat delegate.yml 
- hosts: localhost 
  tasks: 
    -name: show ip address 
      command: hostname-I 
      delegate_to: 10.0.0.8   #指定当前任务被委派给的目标主机
      delegate_facts: true    #收集被委派的目标主机的facts信息

范例: 将任务被委派给控制端ansible主机执行
#在本地执行ifconfig,而非10.0.0.8
cat delegate2.yml 
- hosts: 10.0.0.8   
  tasks:  
    - name: show ip address     
    delegate_to: localhost  #被委派给控制端ansible主机执行
    run_once: true          #委派任务只执行一次
9、只执行一次
利用 run_once 指令可以只执行一次,而非在所有被控主机都执行

cat run_once.yml 
- hosts: webservers 
  tasks:    
    - command: hostname    
      run_once: true
10、Yaml 文件的相互调用
1、include
利用include 或 include_tasks 可以在某个task中调用其它的只有task内容的yaml文件
范例:
cat a.yml
- hosts: webservers   
  tasks:   
    - name: run a job     
      command: wall run a job  
    - name: excute b.yml     
      include: b.yml   #调用另一个yaml文件
      #include_tasks: b.yaml  #另一种写法
      
cat b.yml 
- name: run b job 
  command: wall run b job
  
  
2、import_playbook
还可以将多个包含完整内容的yml文件由一个yml统一调用
cat main.yml 
- import_playbook: tasks1.yml 
- import_playbook: tasks2.yml 

cat tasks1.yml 
--- 
- hosts: webservers 
  tasks:    
    - name: run task1 job     
      command: wall run task1 job 
      
cat tasks2.yml 
--- 
- hosts: dbservers 
  tasks:   
    - name: run task2 job    
      command: wall run task2 job 
      
ansible-playbook main.yml

标签:tasks,name,--,changed,when,cat,nginx,yml,逐行
From: https://blog.51cto.com/mfc001/6405628

相关文章

  • 4、Ansible模板--用于根据每个主机的不同环境而为生成不同的文件
    ansible模板模板是一个文本文件,可以用于根据每个主机的不同环境而为生成不同的文件模板文件中支持嵌套jinja2语言的指令,来实现变量,条件判断,循环等功能需要使用template模块实现文件的复制到远程主机,但和copy模块不同,复制过去的文件每个主机可以会有所不同jinja2语言http:......
  • 众惠生活:让生活更加便利和舒适
    近年来,随着社会经济的不断发展,人们对于生活品质的要求也越来越高。为了满足大众的需求,众惠生活应运而生。众惠生活是一家致力于提供便利、舒适生活的企业,通过打造一个多元化的服务平台,为用户提供全方位的生活服务。众惠生活的服务范围非常广泛,包括外卖配送、家政服务、快递代收、洗......
  • 众惠生活:致力于为用户提供便利、优质的生活服务
    随着社会不断发展,人们对于生活品质的要求也越来越高。为了满足大众的需求,众惠生活应运而生。众惠生活是一家专注于提供便利、优质生活服务的企业,通过多元化的服务平台,为用户提供全方位的生活服务。众惠生活的服务范围非常广泛,包括外卖配送、家政服务、快递代收、洗衣服务、保洁清洗......
  • m基于高斯滤波和八方向sobel边缘提取的道路检测和提取算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要点和线是做图像分析时两个最重要的特征,而线条往往反映了物体的轮廓,对图像中边缘线的检测是图像分割与特征提取的基础。边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明......
  • 浪潮信息发布G7系列SAP HANA一体机,挑战内存计算极限性能
    2023年5月30日,浪潮信息“智算开新局·创新机”全国巡展济南站正式启航。会上,浪潮信息重磅发布基于G7算力平台的新一代SAPHANA一体机,为企业提供高性能、高可靠、高稳定性和绿色节能的数据平台。该方案针对 SAPHANA应用进行了深入优化,在SAP最新发布的IntelSapphireRapids双路计......
  • 众惠生活:为用户提供优质的生活服务
    近年来,随着社会经济的不断发展,人们对于生活品质的要求也越来越高。为了满足大众的需求,众惠生活应运而生。众惠生活是一家致力于提供便利、舒适生活的企业,通过打造一个多元化的服务平台,为用户提供全方位的生活服务。众惠生活的服务范围非常广泛,包括外卖配送、家政服务、快递代收、洗......
  • 浪潮信息发布两项服务器创新技术,为用户提供超强算力
    近日,浪潮信息正式发布两项服务器新技术,为其全新上市的G7算力平台提供更优的性能、可靠性和易维护性支撑。服务器NVH(Noise噪声、Viberation振动、Harshness声振粗糙度)技术让服务器计算满负载时的磁盘读写性能翻倍,并且防止数据中心各类高频噪音对磁盘产生不可逆的损失;智能听音诊断技......
  • 众惠生活——让生活更美好!
    随着中国社会的不断发展,人们对于生活质量的要求也越来越高。现代化的城市生活节奏快,起居饮食日益单一,造成了很多健康问题和精神压力,降低了日常生活品质和幸福感。为解决这一问题,众惠生活应运而生。众惠生活是一家集休闲、娱乐、购物、健康、美容、教育等多种服务于一身的综合性生活......
  • 本地化语音转文字模型
    开源大模型,实现本地化语音转文字下载GUI  whisperdesktopWhisperDesktop下载WhisperDesktop(电脑音频转文字软件)V1.8汉化免费版下载-脚本之家(jb51.net)下载模型ggml-medium.bin·ggerganov/whisper.cppatmain(huggingface.co)......
  • Muesli: Combining Improvements in Policy Optimization
    发表时间:2021(ICML2021)文章要点:这篇文章提出一个更新policy的方式,结合regularizedpolicyoptimization以及modellearningasanauxiliaryloss。最后直接用policynet输出动作,不做搜索,就能有很好的效果。具体的,作者提出了clippedMPO(CMPO)regularizer的更新方式。Regula......