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. JVM调优之探索CMS和G1的物理内存归还机制

    前言: 公司有一个资产统计系统,使用频率很低,但是要求在使用时查询速度快,因此想到做一些缓存放在内存中,在长时间没有使用,持久化到磁盘中,并对垃圾进行回收,归还物理内存给操作系统,从而节省宝贵资源给其 ...

  2. [PTA] 数据结构与算法题目集 6-1 单链表逆转

    List Reverse(List L) { List p, q; p = L; q = L; L = NULL; while (p) { p = p->Next; q->Next = L ...

  3. C# backgroundwork的使用方法

    引言:在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应.解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作 ...

  4. vue教程(四)--其他实用用法补充

    一.vue生命周期简单介绍 var App={ template:'', data(){ }, beforeCreated:function(){ //不能操作数据,只是初始化了事件等.. }, cr ...

  5. 摘录C#代码片段

    1.保存数据到指定文件String response = "";//数据 byte[] bytes = response.getBytes();//转化Byte string fi ...

  6. Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别

    本篇博客主要讲解List接口的三个实现类ArrayList.LinkedList.Vector的使用方法以及三者之间的区别. 1. ArrayList使用 ArrayList是List接口最常用的实现 ...

  7. Ubuntu启动Apache

    划重点:最重要的是找到一个文件--------startup.sh 如果你是按照百度上的方法下载的Apache2,那么就按照百度的方式来 但是异曲同工 如果你是自己在网上下载的Apache到的磁盘 找 ...

  8. java抽奖思路

    现在在做一个有关抽奖的活动,将我自己所做的抽奖思路书写一下 1.项目奖项的配置存储在MongoDB 配置的参数为 奖项的等级(prizeLevel).数量(prizeNum).奖项的名称(prizeN ...

  9. macvtap使用教程

    kubernetes一键安装 macvtap是虚拟机网络虚拟化常用的一种技术,当然容器也可以用. MACVTAP 的实现基于传统的 MACVLAN. 和 TAP 设备一样,每一个 MACVTAP 设备 ...

  10. Golang版本的rocksdb-对gorocksdb的封装

    rocksdb的优秀特性不用多说,但是它是用c++语言写的,就是这一个特点就把很多人拦住了.虽然rocksdb官方也有Java版本,但是Golang的发展速度让人不容小觑,而且由于golang原生对高 ...