Ansible Variable

Ansible变量

尽管系统自动化让重复的工作变得更加容易,但是每个系统还是有一些细微的差别,变量就是如何处理系统之间的不同之处。这里将会列出变量的极大部分使用方法。

本文假设:你已经知道如何使用Ansible。知道inventory,facts等概念。

Ansible定义变量的几中方式

1、在清单(inventory)中定义变量

2、在playbook中定义变量,使用var,或var_files:

3、在role中定义变量

4、自定义facts的变量

5、Register facts ,使用task返回结果作为变量

6、从命令行传递变量

使用变量,除了可用使用自定义的变量,还可以使用facts和其它主机的变量。

一、合法变量名

1、必须是字符,数字,下划线组成,变量必须以字符开头。

2、变量支持字典形式的映射。

3、有时候引用变量,使用小数点形式的引用方法可能会和Python内置的属性和方法冲突。建议使用[]形式。

二、开始定义与使用变量

1、清单变量

1.1定义清单主机变量,格式如下

[webserver]
172.16.1.10 ansible_ssh_user=root inventory_host_var="Host_vars"
172.16.1.20 ansible_ssh_user=root

1.2定义清单组变量

[webserver:vars]
inventory_group_var="Group_vars"

1.3 可以根据对应的inventory创建文件,写入变量

mkdir /etc/ansible/host_vars
mkdir /etc/ansible/group_vars
vim  /etc/ansible/host_vars/all 或者 vim  /etc/ansible/host_vars/hostname
vim /etc/ansible/group_vars/groupname

在文件中写入变量即可。

2、在playbook中定义变量

---
- hosts: hostname or groupname
  vars:
   playbook_var: Playbook_vars
  var_files:                  #使用变量文件
   - filename.yml 
  tasks:
  - name: Copy Jinja2 file to remote host
    template: src=/home/aheahe/var_tu.j2 dest=/root/var.conf

3、在role中定义变量

mkdir roles/test/{vars,files,templates,tasks,defaults,handlers} -p  #创建role结构
vim roles/test/vars/main.yml     #编辑task文件
---
role_vars_var: Role_vars_var
vim roles/test/defaults/main.yml   #编辑默认变量文件
---
role_defaults_var: Role_default_var
vim roles/test/tasks/main.yml     #编辑roles var文件
--- 
- name: Learn role vars
  template: src=1.j2 dest=/root/1
vim roles/test/templates/1.j2    #编辑模板文件
{{ role_vars_var }}
{{ role_defaults_var }}
vim site.yml                   #编辑执行文件
---
- hosts: 172.16.1.10
  roles:
  - /home/aheahe/roles/test
ansible-playbook site.yml   #执行

#在被管理节点上查看结果

[172.16.1.10~]# cat 1    #可以看到生效了。
 
Role_vars_var
Role_default_var

4、自定义Facts变量。

如果在被管理的主机上存在/etc/ansible/facts.d 目录,其中的以.fact 为文件结尾的JSON格式或者YML格式文件都会当做自定义facts。

[172.16.1.10]# vim /etc/ansible/facts.d/local.fact  #编辑自定义facts文件
[general]
Aheahe=aihe
local="Local facts"
[ansible ~]$ansible 172.16.1.10 -m setup -a ‘filter=ansible_local‘  #在ansible控制节点查看自定义facts变量是否生效
172.16.1.10 | success >> {
    "ansible_facts": {
        "ansible_local": {
            "local": {
                "general": {
                    "aheahe": "aihe",
                    "local": "\"Local facts\""
                }
            }
        }
    },
    "changed": false
}

可以像fact一样使用,自定义的fact变量。

vim roles/test/templates/1.j2   #使用刚才的角色
{{ role_vars_var }}
{{ role_defaults_var }}
{{ ansible_local.local.general.local }}
ansible-playbook site.yml   #执行刚才的site.yml
[172.16.1.10 -]# cat /root/1    #被管理节点查看结果,显示正确
Role_vars_var
Role_default_var
"Local facts"

5、定义Register变量

在任务的执行结果后面加上register 关键字。

vim study.yml 
---
- hosts: 172.16.1.10
  vars:
   playbook_var: Playbook_vars
  tasks:
  - name: Learn Register
    shell: ifconfig
    register: command_result
 
  - name: Test register
    shell: date
    when: command_result.rc == 0
ansible-playbook study.yml -v   #执行的时候加上-v 选项。查看输出信息

6、从命令行传递变量,相信这点对大家来说已经不成问题了

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
--extra-vars ‘{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}‘
--extra-vars "@some_file.json"

三、使用变量

上面在举例子的时候,已经说明如何使用了。下面介绍如何使用fact变量和一台主机使用另外一台主机的变量。

vim var.j2
{{ ansible_hostname  }}   #这里是使用fact变量,两个主机的结果不一样
{{ hostvars[‘172.16.1.10‘][‘ansible_hostname‘] }}  #这里两台主机的结果一样,node2>使用node1的变量
vim test.yml   #提供剧本
---
- hosts: webserver
  tasks:
  - name: Use fact and other host vars
    template: src=/home/aheahe/playbook/var.j2 dest=/root/var.conf
ansible-playbook test.yml  #执行
[[email protected]]# cat /root/var.conf     #这里可以看到node2使用node1的变量。
node1   #这里是使用fact变量,两个主机的结果不一样
node1  #这里两台主机的结果一样,node2使用node1的变量

三、变量的优先级。处理同一个变量名多处定义的问题。

3.1、在1.x版本里面,越靠下优先级越高,可以覆盖上面的

1、role defaults 中定义的变量,优先级最低

2、从被管理系统中收集的facts信息

3、inventory中定义的变量

4、在playbook中的vars: 或者 roles 中的vars

5、一些连接变量,例如ansible_user 。

6、命令行的变量  ansible-playbook -e 选项的变量, 优先级别最高。

3.2 ,在2.x系列的版本中调整变量优先级的顺序为如下。优先级由低到高

  1. role defaults
  2. inventory vars
  3. inventory group_vars
  4. inventory host_vars
  5. playbook group_vars
  6. playbook host_vars
  7. host facts
  8. registered vars
  9. set_facts
  10. play vars
  11. play vars_prompt
  12. play vars_files
  13. role and include vars
  14. block vars (only for tasks in block)
  15. task vars (only for the task)
  16. extra vars

参考:

http://docs.ansible.com/ansible/playbooks_variables.html

时间: 2024-07-29 18:13:13

Ansible Variable的相关文章

[email protected]一个高效的配置管理工具--Ansible configure management--翻译(六)

无书面许可请勿转载 高级playbook Finding files with variables All modules can take variables as part of their arguments by dereferencing them with {{ and }} . You can use this to load a particular file based on a variable. For example, you might want to select a

20分钟教你学会熟练使用ansible

运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配置的文档供新手参阅. 一.安装1.安装第三方epel源centos 6的epel    [[email protected] ~]# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm    [

ansible变量

    ansible变量的使用方法 1.主机变量:直接在/etc/ansible/hosts文件中,主机的后边设置key=value的格式 注:inventory_hostname是ansible自带的变量,代表组中的每个主机 #在配置文件中定义主机变量 [[email protected] playbook]# cat /etc/ansible/hosts [webservers] 192.168.2.101 key=101 192.168.2.111 key=111 #写playbook,

ansible 学习笔记(上)

运维工具 当前常见的运维工具(Configuration)有以下一种puppret(ruby)saltstack(python)chefcfengine.... Command and Control; fabricfunc 程序发布: 手动发布 脚本发布 发布程序(运维程序) 程序发布要求:1.不能影响用户体验:2.系统不能停机:3.不能导致系统故障或造成系统完全不可用: 灰度发布模型(考虑以下两种维度):1.主机:2.用户: 发布思路: /webapps/tuangou /webapps/t

ansible的playbook组件

playbook的核心元素: tasks: 任务 variables: 变量 templates: 模板 handlers: 处理器 roles: 角色 组织格式:YAML(被称为另外一种标记语言) 语法:(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) 例如: name:tom age:21 gender:Male spourse: name:lily gender:female children: —  name:susan age: 2 gender:female —

[email protected]一个高效的配置管理工具--Ansible configure management--翻译(七)

如无书面授权,请勿转载 Larger Projects Until now, we have been looking at single plays in one playbook file. This approach will work for simple infrastructures, or when using Ansible as a simple deployment mechanism. However, if you have a large and complicated

自动化运维工具Ansible实战(三)常用的配置和相关命令

Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码.是否开启sudo认证.action_plugins插件的位置.hosts主机组的位置.是否开启log功能.默认端口.key文件位置等等. 具体如下:     [defaults]     # some basic default values...     #inventory      = /etc/ansible/hosts

Ansible自动化运维工具阐述及配置实现

什么是ansible ansible是一个轻量级的运维管理工具 , 基于Python研发 .可实现对系统的批量管理配置.程序的批量部署.批量的运行命令等功能. 仅需在任意管理主机安装 ansible 程序即可实现批量管理被管控主机且被管控的主机无需客户端. 我们在安装ansible时一定要依托epel源来安装(推荐阿里云),并且在线用yum安装.它基于python开发所以得解决ansible对python编程的各种依赖. ansible 特性 1.模块化:调用特定的模块,完成特定的任务: 2.基

Ansible 的角色定义及调用

ansible 角色定义及调用 ==========================================================================  概述:    本章是上篇ansible的后续,将主要介绍ansible中角色的定义和调用,内容如下: 角色目录的定义方法 在playbook中调用角色的方法: 示例: ·定义nginx角色并调用: ·定义memcached角色并调用: ·定义mysql角色并调用: =========================