ansible--变量

ansible中的变量主要来源于以下几种场景:

  1. Inventory(host vars,group vars)
  2. playbook里面
  3. 命令行
  4. playbook执行task过程中产生结果,可以register起来,作为变量给下面的task使用
  5. roles里面
  6. 来自于nodes上面的facts

其中1-4一般来说都是用户自己定义的,而5和facts则主要是ansible从nodes上面拉取过来,当然facts也可以自己定义。

Inventory里面的变量

/etc/ansible/hosts

[salt]

salt-master http_port=80  ##主机变量

10.240.162.112 ansible_connection=paramiko

[salt:vars]  ##组变量

mysql_port=3306

/etc/ansible/host_vars/salt-master  ##定义在文件里主机变量,文件名和主机名要一致

lxc:lixc

/etc/ansible/group_vars/salt  ##定义在文件里的组变量,文件名要和组名一致

lss:

- liss

- ansible

playbooks里面的变量

---

- hosts: all

user: lixc

vars:

time: 120   ##变量

port: 80

keeplive: 100

vars_files:

- /vars/test.yml    ##也可以导入外部的文件里的变量

playbooks里面可以定义变量,也可以导入外部的文件里面的变量

命令行里面的变量

命令行,传递变量给playbooks大概有三种方式

第1种方式,比较简单了。

cat command_vars.yml

---

- hosts: salt-master

remote_user: ‘{{uservar}}‘  ##命令行变量

tasks:

- name: run this command and ignore the result

shell: echo {{echovar}}

- debug: msg=‘{{result.stdout}}‘

ansible-playbook command_vars.yml -e "uservar=lixc echovar=hellomysql"  ##传入变量参数

第2种方式,以json的格式传递变量。

ansible-playbook command_vars.yml -e ‘{"uservar":"lixc", "echovar":"hellomysql"}‘

##变量形式较复杂的时候,用json格式较方便,一般的直接用第一种方式就可以了

第3种方式,传入json文件。第二种,第三种方法,一般用于变量形式较复杂的情况。不过,一般估计很少用,因为在命令行传变量本来就不多用吧,还是第一种命令行传递方式稍微常用点。

cat test.json    ##json文件

uservar: lixc

echocar: hellomysql

ansible-playbook command_vars.yml -e ‘@test.json‘   ##用@加上json文件

第4种方式,register task的结果,作为变量,给下面的task使用

---

- hosts: slat-master

tasks:

- name: test

command: ls /home

register: result

- debug: msg=‘{{result.stdout}}‘

第五种方式,在roles里定义。

├── group_vars   ##全局组变量

│   └── salt

├── hosts

├── roles

│   ├── mysql

│   │   ├── handlers

│   │   │   └── main.yml

│   │   ├── tasks

│   │   │   ├── configure.yml

│   │   │   └── main.yml

│   │   ├── templates

│   │   │   └── my.cnf

│   │   └── vars          ##当前role变量

│   │        └── main.yml

第六种方方式,从nodes获取facts,facts和salt-stack里面的grains差不多,主要是nodes本身的一个系统信息,bios信息,网络,硬盘等等信息。不过,facts比salt-stack中的grains获取的信息。要更多一些。

ansible slat-master -m setup|wc -l  ##查看facts

284

salt ‘*’ grains.items|wc -l       ##查看grains

65

自定义facts

自定义facts有多种方法,有能力的同学,可以直接去修改,setup这个模块。不过官方的东西,咱们还是不要随便改了。

第二种方法,定义在nodes上面,默认定义在/etc/ansible/fact.d/*fact里面。

定义文件的格式,大概三种,分别是ini格式,json格式,或者可执行文件,不过他们返回的必须是json格式。

lixc.fact

{"json":["hello","world"]}    ##这个文件内容是json格式

lss.fact

#!/usr/bin/env python   ##这个文件是python脚本,返回json格式的字典

import json

dic = {"ansible_addresses": ["10.240.161.139","192.168.115.164"]}

print json.dumps(dic)

lxc.fact

[ini]      ##ini格式

lixc=hello

lss=world

在node上创建文件夹并把测试的fact文件传送过去。修改lss.fact这个文件的属性为其它组可执行的权限,否则待会执行不了,用-s参数试了下,也执行不了

ansible salt-master -a "mkdir -p /etc/ansible/fact.d" -s

for file in `ls `;do ansible salt-master -m copy -a "src=${file} dest=/etc/ansible/facts.d/" -s;done >/dev/null

ansible salt-master -m file -a "dest/etc/ansible/facts.d/lss.fact mode=755" > /dev/null -s

##上述有修改python脚本属性,待会要执行

ansible salt-master -m setup -a "filter=ansible_local"

自定义模块,只不过这个模块,返回一个facts格式的结果罢了。

在ansible的module里面,自定义一个文件夹,放自己的module,然后丢给自定义的module进去

mkdir /usr/share/ansible/custom

cat  chengge

#!/usr/bin/env python

import json

dic = {"ansible_facts": {‘chengge‘: ‘Hello ansible‘,‘liss‘: "Hello salt=stack"}}

print json.dumps{dic}

##字典的key要为ansible_facts,要不然playbooks里不能用facts了

cp chengge /usr/share/ansible/custom

ansible salt-master -m chengge

具体如何使用自定义模块:

其实,我们想用模块里返回的facts,那么显然,我们使用之前,肯定要先执行以下我们自定义的module

先看看playbooks

---

- hosts: slat-master

tasks:

- name: test custom module

action: chengge           ##先执行下自定义module

- debug: msg=‘{{chengge}}‘  ##使用facts

再看看,执行结果

时间: 2024-11-25 13:40:24

ansible--变量的相关文章

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 变量简明入门

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

三:Ansible变量

三:Ansible变量 一:变量概述 ? 变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲此值设置为变量,然后再在其他的playbook中调用,会方便许多.如此一来还方便维护,减少维护的成本. 1. 定义变量的方式 1.1 通过命令行进行变量定义 [[email protected] ~]# vim test.yml - hosts: web_group tasks: - name:

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 变量定义和引用

cat /etc/ansible/hosts [nodes]10.2.1.232 key=23210.2.1.43 key=43 cat debug.yaml ---- name: test how to use command module hosts: nodes remote_user: root gather_facts: false vars: - content: '20181104' tasks: - name: create a file shell: "echo {{key}}

自动化运维工具ansible详细介绍

在学习批量管理软件时,首先要明确的知道自己需要什么,网上大神很多,他们都研究到源码上了,写了很多介绍绚丽功能的文档,但其实那些功能基本上我们都用不到,经常被各种文档弄得头脑发晕,此文就是为了简单直白的告诉大家ansible的功能,满足大家的基本需求. 首先确认批量管理我们需要什么:无外乎主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 目录 1.      ansible与saltstack对比... 2.      ansible安装... 3.      ans

ansible工作原理以及使用详解

内容: 1.ansible的作用以及工作结构 2.ansible的安装以及使用 3.ansible的playbook使用 一.ansible的作用以及工作结构 1.ansible简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,

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 —

ansible一般使用

ansible可以批量管理多台主机.通过调用各个功能模块.ssh连接.发送python脚本.远程主机上的一些命令来完成管理各被控端,所以不用给各被管理节点专门安装客户端工具. 不过一般需要事先配置ansible端能基于密钥认证的方式联系各被管理节点. 如果要用密码的方式,要启用主配置文件中的ask_pass  = True,并安装上sshpass软件即可. 目录: 一.介绍 二.常用模块介绍 三.playbook 四.roles 想深入了解的朋友请看这里:http://www.ansible.c

ansible自动化运维工具使用详解

一.ansible简介 1.ansible ansible是新出现的自动化运维工具,基于Python研发.糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能.仅需在管理工作站上安装ansible程序配置被管控主机的IP信息,被管控的主机无客户端.ansible应用程序存在于epel(第三方社区)源,依赖于很多python组件 参考站点:http://www.ansible.com.cn 2.ansible特性 模块化设计,调用特定的模块来完成特定任务,本身是核