Ansible playbook 根据条件动态设置变量


  1. 首先新建 inventory,主机列表如下:

    node-01 ansible_host=192.168.64.30
    node-02 ansible_host=192.168.64.31 [app]
    node-01 [db]
    node-02
  2. 然后新建一个 test.yml,新增如下内容:

    - hosts: db[0]:app[0]   # 支持索引取值
    vars:
    - Role: "{{ 'db' if 'app' in group_names else 'app' }}" # 动态设置变量
    - Ports:
    app: 4503
    db: 4502 pre_tasks: # 默认tasks只能在roles执行完后才执行,而pre-tasks可以在roles之前执行
    - name: Debug
    debug:
    msg: This is a test message. roles:
    - testrole
  3. 新建 roles/testrole/defaults/main.yml

    ---
    RESTLink: 'http://{{ inventory_hostname }}:{{ Ports[Role] }}'
  4. 新建 roles/testrole/tasks/main.yml

    ---
    - debug:
    msg: "Final URL is {{ RESTLink }}"
  5. 执行该 playbook

    ansible-playbook -i inventory test.yml

    输出结果是:


    PLAY [db[0]:app[0]] ******************************************************************************************************************************************* TASK [Gathering Facts] ****************************************************************************************************************************************
    Tuesday 27 August 2019 18:22:30 +0800 (0:00:00.121) 0:00:00.121 ********
    ok: [node-01]
    ok: [node-02] TASK [debug] **************************************************************************************************************************************************
    Tuesday 27 August 2019 18:22:32 +0800 (0:00:02.242) 0:00:02.363 ********
    ok: [node-02] => {
    "msg": "This is a test message."
    }
    ok: [node-01] => {
    "msg": "This is a test message."
    } TASK [testrole : Debug] ***************************************************************************************************************************************
    Tuesday 27 August 2019 18:22:33 +0800 (0:00:00.255) 0:00:02.620 ********
    ok: [node-02] => {
    "msg": "Final URL is http://node-02:4503"
    }
    ok: [node-01] => {
    "msg": "Final URL is http://node-01:4502"
    } PLAY RECAP ****************************************************************************************************************************************************
    node-01 : ok=3 changed=0 unreachable=0 failed=0
    node-02 : ok=3 changed=0 unreachable=0 failed=0

总结:

1. When used in this manner, the order of execution for your playbook is as follows:

  • Any pre_tasks defined in the play.
  • Any handlers triggered so far will be run.
  • Each role listed in roles will execute in turn. Any role dependencies defined in the roles meta/main.yml will be run first, subject to tag filtering and conditionals.
  • Any tasks defined in the play.
  • Any handlers triggered so far will be run.
  • Any post_tasks defined in the play.
  • Any handlers triggered so far will be run.

Ansible实践总结的更多相关文章

  1. Nebula Graph 的 Ansible 实践

    本文首发于 Nebula Graph 公众号 NebulaGraphCommunity,Follow & 看大厂图数据库技术实践 背景 在 Nebula-Graph 的日常测试中,我们会经常在 ...

  2. ansible实践4- 管理配置文件

    生产环境中大多时候是需要管理配置文件的,安装软件包只是在初始化环境的时候用一下.下面我们来写个管理nginx配置文件的playbook   mkdir  -p /etc/ansible/nginx_c ...

  3. ansible实践3-playbook条件判断

    --- - hosts: testhost   user: root   gather_facts: True   tasks:     - name: use when       shell: t ...

  4. ansible实践2-拷贝文件或目录

      ansible testhost -m copy -a "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mo ...

  5. ansible实践-1

      不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook 支持sudo 有提供UI(浏览器图形化)www.ans ...

  6. ansible实践

    ansible常用module ansible-doc -l List available modules -s Show playbook snippet for specified module( ...

  7. Ansible - 简介和应用自动化基础实践

    installAnsible简介和应用自动化基础实践 一.引入: 1.1  如官方定义,Ansible is The simplest way to automate apps and IT infr ...

  8. 《Ansible自动化运维:技术与佳实践》第二章读书笔记

    Ansible 安装与配置 本章主要讲的是 Ansible 安装与基本配置,主要包含以下内容: Ansible 环境准备 安装 Ansible 配置运行环境 Ansible 环境准备 从 GitHub ...

  9. ansible服务部署与使用

    第1章 ssh+key实现基于密钥连接(ansible使用前提) 说明:    ansible其功能实现基于SSH远程连接服务    使用ansible需要首先实现ssh密钥连接 1.1 部署ssh ...

随机推荐

  1. [leetcode] 134. Gas Station (medium)

    原题 题意: 过一个循环的加油站,每个加油站可以加一定数量的油,走到下一个加油站需要消耗一定数量的油,判断能否走一圈. 思路: 一开始思路就是遍历一圈,最直接的思路. class Solution { ...

  2. PHP正则匹配到2个字符串之间的内容,匹配HTML便签内容

    PHP正则匹配到2个字符串之间的内容 $preg= '/xue[\s\S]*?om/i'; preg_match_all($preg,"学并思网址xuebingsi.com",$r ...

  3. layui上传Excel更新数据并下载

    前言: 最近做项目遇到了一个需求,上传Excel获取数据更新Excel文档,并直接返回更新完的Excel到前端下载:其实需求并没有什么问题,关键是前端用到的是layui上传组件(layui.uploa ...

  4. 逆向MFC程序

    目录 @ 1 MFC执行流程 1.1 环境支持 1.2 分析 1.3 实践探索 1.3.1 创建一个MFC程序 1.3.2 下关键断点并调试 1.4 转向MFC库源文件中观测 2 逆向 2.1 特征码 ...

  5. Python秒算24点,行还是不行?

    周末闲来无事,看到隔壁家的老王在和隔壁家的媳妇玩24点,就进屋看了看.发现老王是真不行啊,那不行,这也不行. 就连个24点都玩不过他媳妇,给他媳妇气的,啥都不能满足,这不能,那也不能. 我坐下来和他媳 ...

  6. 工作笔记--对接三方Http接口遇到的问题

    在使用 HttpClient 4.4 调用第三方 http api 时遇到了很多问题,还好最后都解决了,记录一下遇到的问题及解决办法,希望对同样有此问题的你有所帮助. 环境说明 首先说明一点是,对方的 ...

  7. VSTO之PowerPoint(PPT)插件开发常用API汇总

    VSTO简介 VSTO(Visual Studio Tools for Office )是VBA的替代,使得开发Office应用程序更加简单,并且用VSTO来开发office应用程序可以使用Visua ...

  8. CSS3 filter 模糊滤镜的应用

    CSS3 filter 模糊滤镜的应用   在segmentfault上回答过的一个问题,如何将网页CSS背景图高斯模糊且全屏显示当时没有深入了解,只觉得滤镜应该只是应用于图片上的.而且各大网站的de ...

  9. 通过jmeter发送webservice接口请求

    1.webservice接口地址:http://ip:port/...?wsdl 2.接口数据类型:<cuxGmiChukuRmaTrxV><salesrepId xmlns:xsi ...

  10. 简易数据分析 10 | Web Scraper 翻页——抓取「滚动加载」类型网页

    这是简易数据分析系列的第 10 篇文章. 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到屏 ...