ansible中定义变量的若干方法
Ansible支持十几种定义变量的方式
根据优先级排序的定义方式:
- Inventory变量
- Host Facts变量
- Playbook变量
- Playbook提示变量
- 变量文件
- 命令行变量
1.Inventory变量(在主机清单配置文件中定义变量)。
# vim ~/ansible/inventory
[test]
node1 iname="nb"
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
iname="dachui"
#备注,在node1主机后面给该主机添加变量iname,值为nb.
#给webserver组定义变量,vars是关键词不可以改变,webserver是上面定义的组
#给这个组定义变量iname="dachui"
下面编写剧本调用刚才的变量:(在剧本中需要调用变量是要使用{{}})
vim inventory_var.yml
---
- hosts: test #定义需要远程管理的主机是谁
tasks: #剧目要完成哪些任务
- name: create a user with var #剧目中的第一个任务描述信息
user: #调用user模块创建用户
name: "{{ iname }}" #需要创建的用户名是iname这个变量
- #注意事项:
- #在ansible剧本中当调用变量时,开始位置就调用变量,就需要在{{}}外面加双引号
- #如果是在后面或者中间位置调用变量{{}}外面可以不加双引号
2.Host Facts变量
- vim ~/ansible/facts_var.yml
- ---
- - hosts: test
- tasks:
- - name: create user.
- user:
- name: "{{ansible_hostname}}"
- #定义剧本,远程所有被管理主机,调用user模块,创建用户
- #需要创建的用户名ansible_hostname是一个ansible_facts变量
- #验证: 到node1主机查看是否有一个与主机名同名的用户
3)Playbook变量(使用vars关键词可以在playbook内定义变量)。
# vim ~/ansible/playbook_var.yml
---
- hosts: test
vars: #vars是关键词,用来定义变量用的
iname: heal #具体变量名是iname,值是heal
ipass: '123456' #再定义一个变量名是ipass,值是123456
#注意密码必须是字符串,需要引号
tasks: #tasks定义需要执行的任务
- name: Use variables create user. #给任务写个描述信息
user: #调用user模块创建用户
name: "{{ iname }}" #用户名的是前面定义的变量
password: "{{ ipass | password_hash('sha512') }}"
#密码是前面定义好的ipass,管道给password_hash把密码加密.
4)Playbook提示变量(根据提示输入变量的值)。
# vim ~/ansible/prompt_var.yml
---
- hosts: test
vars_prompt: #vars_prompt是关键词,定义提示变量
- name: iname #通过name定义变量名为iname
prompt: "请输入用户名" #执行剧本时提示信息
private: no #是否是隐私数据,no代表不是(屏幕可以显示)
- name: ipasswd #通过name再定义变量,变量名为ipasswd
prompt: "请输入密码" #执行剧本时提示信息
private: yes #是否是隐私数据,yes代表是(隐私数据屏幕不显示)
tasks: #定义剧本需要执行的任务
- name: Create a user. #定义第一个任务的描述信息
user: #调用user模块创建用户,设置用户密码
name: "{{ iname }}" #用户名是前面创建的变量iname
password: "{{ ipasswd | password_hash('sha512') }}"
#密码是前面定义的变量ipasswd,密码管道给password_hash加密.
执行ansible-playbook命令时使用-e参数定义变量
5.单独定义个变量文件,在playbook中用vars_files调用该文件。
vars_files: variables.yml #当变量比较多时,专门定义一个文件用来存变量
tasks:
- name: create user.
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
#调用user模块创建用户
#用户名是变量文件variables.yml中定义的变量iname,密码也是变量文件中定义的变量
[root@control ansible]# vim ~/ansible/variables.yml
---
iname: cloud
ipass: '123456'
tasks:
- name: create user
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook command_var.yml -e iname="beth" -e ipass="123456"
ansible中定义变量的若干方法的更多相关文章
- JavaScript 中定义变量时有无var声明的区别
关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...
- stm32存储器映像和标准库中定义外设地址的方法
结合存储器映像理解stm32标准库中定义外设地址的方法. stm32f103zet6是32位的.它所能访问的地址空间范围为2^32=4GB,把4GB分为8个block,分别为block0-block- ...
- C++中输出变量类型的方法
C++中输出变量类型的方法 在c++中输出变量或者数据类型,使用typeid().name()的方法.如下例子: #include <iostream> #include <stri ...
- case中定义变量
1.c语言switch/case中定义变量 case 0: int b = 0 ; printf("0");break; case 1: printf("1" ...
- (转载)JavaScript中定义变量
(转载)http://blog.163.com/xuxiaoqianhz@126/blog/static/165190577201061594421870/ JavaScript中定义变量有两种方式: ...
- WebApi一个控制器中定义多个Get方法。
问题:怎样解决一个ApiController中定义多个Get方法或者Post方法? 答:要想实现一个ApiController中定义多个Get方法或者Post方法,则需要在WebApiConfig类中 ...
- 在C++Builder中定义事件的实现方法
++Builder是由Borland公司推出的一款可视化集成开发工具.C++Builder的集成开发环境(IDE)提供了一系列可视化快速应用程序开发(RAD)工具,让程序员可以很轻松地建立和管理自己的 ...
- 不要在.h文件中定义变量
今天在头文件.h中初始化了一个数组和函数,在编译的时候提示这个数组和函数重新定义了,检查后发现,犯了一个致命的错误,在头文件中定义变量... 以下引用别人的一篇说明,警示自己. C语言作为一种结构化的 ...
- css中定义变量
css中定义变量 定义变量可分多种情况: 1.定义全局变量 :root { --borderColor: #ccc;} 2.定义某元素下的变量 .look{ --borderColor: #ccc;} ...
随机推荐
- notepad++ 设置支持golang语法高亮
see https://stackoverflow.com/questions/27747457/golang-plugin-on-notepad
- CPU:别再拿我当搬砖工了!
数据搬运工 Hi,我是CPU一号车间的阿Q,有段日子没见面了. 还记得上回说到咱们厂里用上了DMA技术(太慢不能忍!CPU又拿硬盘和网卡开刀了!)之后,我们总算解放了,再也不用奔波于网卡.硬盘与内存之 ...
- golang 整型
目录 前言 整型 1.分类 2.类型 3.类型补充 4.补充: 跳转 前言 不做文字的搬运工,多做灵感性记录 这是平时学习总结的地方,用做知识库 平时看到其他文章的相关知识,也会增加到这里 随着学习深 ...
- Java indexof
java中字符串方法 indexof() indexof()可以返回输入的字符串在目标字符串中第一次出现的位置,如果没有出现返回int 0:
- python设计模式之模型-视图-控制器模式
python设计模式之模型-视图-控制器模式 关注点分离( Separation of Concerns, SoC)原则是软件工程相关的设计原则之一. SoC原则背后的思想是将一个应用切分成不同的部分 ...
- 遍历数组,对象和JSON
遍历数组 var arr2 = [3,4,5,6,7,8]; //第一种方法 for(var i =0;i<arr.length;i++){ console.log(arr2[i]); } // ...
- JavaScript学习系列博客_15_栈内存、堆内存
栈内存 - JS中的变量都是保存到栈内存中的,- 基本数据类型的值直接在栈内存中存储,- 值与值之间是独立存在,修改一个变量不会影响其他的变量 堆内存 - 对象是保存到堆内存中的,每创建一个新的对象, ...
- Leecode统计子串个数(java)
/** 获取一个字符串在另一个字符串中出现的次数.判断str2在str1中出现的次数 */ public class StringExer2 { public static void main(Str ...
- await,async 我要把它翻个底朝天,这回你总该明白了吧
一:背景 1. 讲故事 await,async 这玩意的知识点已经被人说的烂的不能再烂了,看似没什么好说的,但我发现有不少文章还是从理论上讲述了这两个语法糖的用法,懂得还是懂,不懂的看似懂了过几天又不 ...
- react+antd的todolist开发
使用localStorage缓存在cookie里刷新不会充重置 参考链接 create-react-app入门教程https://www.jianshu.com/p/77bf3944b0f4 http ...