ansible——组织变量

在ansible中有很多种定义变量的方式,我们没必要去关注太多,只需要掌握几个常用的变量定义和应用方式即可,这篇文章记录的是将变量定义在外部文件中,然后去引入这些外部文件中的变量。

引入保存了变量的文件有两种方式:include_vars和vars_files。此外,还可以在命令行中使用“-e”或“--extra-vars”选项来引入。

1、vars_files

vars_files是一个play级别的指令,可用于在解析playbook的截断引入一个或多个保存了变量的外部文件。

例如,pb.yml文件如下:

---
- name: play1
  hosts: node
  gather_facts: false
  vars_files:
    - varfile1.yml
    - varfile2.yml
  tasks:
    - debug:
        msg: "var in varfile1: {{var1}}"
    - debug:
        msg: "var in varfile2: {{var2}}"

pb.yml文件通过vars_files引入了两个变量文件,变量文件的语法格式如下:

[[email protected] roles]# cat varfile1.yml         #第一个变量文件内容如下
---
var1: "value1"
var11: "value11"
[[email protected] roles]# cat varfile2.yml         #第二个变量文件内容如下
---
var2: "value2"
var22: "value22"

注意:vars_files指令是play级别的指令,且是在解析playbook的时候加载并解析的,所以所引入的变量是play范围内可用的,其他play不可使用这些变量。

2、include_vars

include_vars指令也可用于引入外部变量文件,它和vars_files不同,一方面,include_vars是模块提供的功能,它是一个实实在在的任务,所以在这个任务执行之后才会创建变量。另一方面,既然include_vars是一个任务,他就可以被一些task级别的指令控制,如when指令。

栗子如下:

[[email protected] roles]# cat include_vars.yml
---
- name: play1
  hosts: localhost
  gather_facts: false
  tasks:
    - name: include vars from files
      include_vars: varfile1.yml
      when: 3 > 2
    - debug:
        msg: "var in varfile1:{{var1}}"

上面的栗子中引入变量文件的方式是直接指定文件名,include_vars: varfile1.yml,也可以明确使用file参数来指定路径,如下:

    - name: include vars from files
      include_vars:
        file: varfile1.yml

如果想要引入多个文件,可以使用循环的方式,例如:

    - name: include vars from files
      include_vars:
        file: "{{item}}"
      loop:
        - varfile1.yml
        - varfile2.yml

需要注意的是,include_vars在引入文件的时候要求已经存在,如果有多个可能的文件但不确定文件是否已经存在,可以使用with_first_found指令或者lookup的first_found插件,他们的作用相同,都用于从文件列表中找出存在的文件,找到后立即停止。

栗子如下:

  tasks:
    - name: include vars from files
      include_vars:
        file: "{{item}}"
      with_first_found:
        - varfile1.yml
        - varfile2.yml
        - default.yml
#等价于

  tasks:
    - name: include vars from files
      include_vars:
        file: "{{ lookup(‘first_found‘,any_files) }}"
      vars:
        any_files:
          - varfile1.yml
          - varfile2.yml
          - default.yml

此外,include_vars还能从目录中导入多个文件,默认会递归到子目录中,例如:

    - name: include vars from files
      include_vars:
        dir: vars/all

3、--extra-vars选项

ansible-playbook命令的-e选项或者--extra-vars选项也可以用来定义变量或引入变量文件

栗子:

#定义单个变量
ansible-playbook -e ‘var1="value1"‘  xxx.yml
#定义多个变量
ansible-playbook -e ‘var1="value1" var2="value2"‘  xxx.yml
#引入单个变量文件
ansible-playbook -e ‘@varfile1.yml‘  xxx.yml
#引入多个变量文件
ansible-playbook -e ‘@varfile1.yml‘ -e ‘@varfile2.yml‘  xxx.yml

因为是通过选项的方式来定义变量的,所以它所定义的变量是全局的,对所有play都有效。

通常来说,不建议使用-e选项,因为这样既不透明,也不友好,要求我们记住要定义哪些变量。

原文地址:https://blog.51cto.com/14154700/2468386

时间: 2024-10-13 02:07:12

ansible——组织变量的相关文章

nginx+php 完成 kod云搭建(ansible使用变量)

nginx+php 完成 kod云搭建(ansible使用变量) [[email protected] project1]# vim kod.yml - hosts: web #1.卸载php低版本 #2.安装nginx1.12 php5.4 tasks: - name: Installed Nginx yum: name=nginx,php,php-fpm,php-pdo,php-gd,php-mbstring state=present #4.创建组和用户 www - name: Creat

ansible之变量使用与playbook的设置(重点)

ansible之playbook 1.playbook的语法格式如下:  - hosts:  webservers 是定义的主机组 也就是playbook中的 play 角色的意思 注意":" 冒号后面也必须价格空格不然就报错 tasks: 注意 他前面是有2个空格的, ansible 是用空格来区分规格的, 记住不能使用tab按键 [[email protected] ~]# mkdir project1 [[email protected] ~]# cd project1/ [[e

Ansible系列(六):各种变量定义方式和变量引用

本文目录:1.1 ansible facts1.2 变量引用json数据的方式 1.2.1 引用json字典数据的方式 1.2.2 引用json数组数据的方式 1.2.3 引用facts数据1.3 设置本地facts1.4 输出和引用变量1.5 注册和定义变量的各种方式 1.5.1 register注册变量 1.5.2 set_fact定义变量 1.5.3 vars定义变量 1.5.4 vars_files定义变量 1.5.5 roles中的变量 1.5.6 命令行传递变量 1.5.7 inve

【Android】UI组件变量组织

说明 这不是一篇技术文章,而是因为最近项目新来了几个android新人,所以我琢磨在代码风格上进行一下统一,所以有了以下以及后面的几篇文章. java文件内部UI组件变量组织 UI组件使用小写字母"v"作为前缀. v主要表示"View",android源码中,变量前缀主要是"m",但是个人觉得对于UI变量,还是用"v"比较清晰 意图导向,最小化抽象 UI变量的"声明类型"应该是能够实现意图的最小化抽象类型,

ansible 变量简明入门

ansible 为什么需要变量? ansible 是用 python 语言编写的,如果连变量都不支持,要它何用? ansible 的变量用在什么地方? 我们在安装 ansible 后,最常使用它的方式就是 ansible 和 ansible-playbook.在这两种方式,都可以使用变量. ansible 的变量从哪里来? 例如: 1. 用户自定义的变量,在playbook 里定义的 vars 关键字,或者在其他文件定义的变量. 2. 无需用户自定义,而是来自远程主机收集到的 facts 变量.

Ansible变量嵌套解析

有时候需要用到ansible的变量的嵌套解析,就是“变量中嵌套变量”.例子如下: 假设有一个外部传递的变量,system_code = CRM,而我们同时有一系列类似的变量,如: ABS_port=10000 ETL_port=5678 CRM_port=1234 想通过system_code变量来决定我要用哪个xxx_port,所以需要变量嵌套. ansible yaml写法如下,在ansible 2.2中通过.(在2.5版本后有新的写法) - hosts: remote_node vars:

自动化运维-Ansible (第三部:Playbook 介绍)

前言 之前有两篇文章分别讲了 Ansible 的部署.Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook.需要了解 Ansible 的部署请点击:Ansible 第一部 :部署需要了解 Ansible 的模块庆典节:Ansible 第二部:模块使用 Playbook 介绍 Playbook 是由一个或多个play 组成的列表,主要功能是将task 定义好的角色归并为一组进行统一管理,也就是通过task 调用 Asible 的模板将多个 pl

ansible+jenkins实现zabbix维护模式添加

##主要过程## 1. zabbix 维护模式通过ansible的 zabbix_maintenance 模块来实现 2. jenkins 调用ansible执行playbook ##最终效果##用户可多选应用组,设置维护时长,最终确认操作. ##具体实现##1.一些安全选项,和丢弃策略: 2.设置参数Influence,用来提供多选项,最终用户可选择业务范围,此处插件名称是:Extended Choice Parameter 3.设置文本参数Periods,用来提供时长,文本参数的用意在于让用

ansible核心模块playbook介绍

ansible的playbook采用yaml语法,它简单地实现了json格式的事件描述.yaml之于json就像markdown之于html一样,极度简化了json的书写.在学习ansible playbook之前,很有必要把yaml的语法格式.引用方式做个梳理. 1.1 初步说明 以一个简单的playbook为例,说明yaml的基本语法. --- - hosts: 192.168.100.59,192.168.100.65 remote_user: root pre_tasks: - name