Ansible - [07] 定义变量的几种方式
题记部分
Ansible 支持十几种定义变量的方式
- Inventory 变量
- Host Facts 变量
- Register 变量
- Playbook 变量
- Playbook 提示变量
- 变量文件
- 命令行变量
一、Inventory 变量
1、定义变量(在主机清单配置文件中进行定义)
[root@control ansible]# cat ~/ansible/hosts
[test]
node1 myvar1="hello world" myvar2="content"
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
yourname="jacob"
2、使用变量(以下是以playbook的场景演示变量的使用)
[root@control ansible]# cat ~/ansible/inventory_var.yml
---
- hosts: test
tasks:
- name: create a file with var.
shell: echo {{ myvar1 }} >/tmp/{{myvar2}}
- hosts: webserver
tasks:
- name: create a user with var.
user:
name: "{{ yourname }}"
第11行
以双花括号开始的时候,需要用双引号引起来,第6行
如果不是以双花括号开头则不需要加引号。
二、Host Facts 变量
Host Facts 变量(可以直接调用ansible收集的系统信息)
[root@control ansible]# cat ~/ansible/facts_var.yml
---
- hosts: test
tasks:
- name: Use facts info.
copy:
content: "{{ansible_hostname}}:{{ansible_bios_version}}"
dest: /tmp/facts.txt
上述playbook可以将目标主机名及其bios版本号输出到目标主机/tmp/facts.txt文件中
三、Register 变量
register语句可以将某个命令的执行结果保存到变量中
[root@control ansible]# cat ~/ansible/register.yml
---
- hosts: agent
tasks:
- name: save shell result to a variable.
shell: hostname
register: myvar
- name: print the variable's value through debug
debug:
msg: "{{ myvar.stdout }}"
如果(使用debug模块)在msg直接获得myvar,则会将所有输出信息到保存在myvar中,可以通过myvar.stdout
获取提取部分数据(如:输出结果 stdout
)
四、Playbook 变量
使用 vars 关键词可以在playbook内定义变量(注意密码必须是字符串,需要加引号)
[root@control ansible]# cat ~/ansible/playbook_var.yml
---
- hosts: agent
vars:
iname: heal
ipass: '123456'
tasks:
- name: Use variables create user.
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
五、Playbook 提示变量
根据提示输入变量的值
[root@control ansible]# cat ~/ansible/prompt_var.yml
---
- hosts: agent
vars_prompt:
- name: iname
prompt: "请输入用户名:"
private: no
- name: ipasswd
prompt: "请输入密码:"
private: yes
tasks:
- name: create a user.
user:
name: "{{ iname }}"
password: "{{ ipasswd | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook prompt_var.yml
请输入用户名: xyz
请输入密码:
六、变量文件(vars_files)
单独定义一个变量文件,在playbook中用vars_files调用该文件
[root@control ansible]# cat ~/ansible/varibales.yml
---
iname: cloud
ipass: '123456'
[root@control ansible]# cat ~/ansible/file_var.yml
---
- hosts: test
vars_files: variables.yml
tasks:
- name: create user.
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
七、命令行定义变量
执行ansible-playbook命令时使用-e
参数定义变量
[root@control ansible]# cat ~/ansible/command_var.yml
---
- hosts: agent
tasks:
- name: create user
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook command_var.yml -e iname=jack -e ipass=123456
— 要养成终身学习的习惯 —
Ansible - [07] 定义变量的几种方式的更多相关文章
- JN_0003:JS定义变量的3种方式
js中三种定义变量的方式const, var, let的区别. 1,const定义的变量不可以修改,而且必须初始化. 2,var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3 ...
- js中定义变量的三种方式const,val,let 的区别
js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始 ...
- PHP定义字符串的四种方式
1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...
- js声明变量的三种方式及作用域
js声明变量的三种方式及作用域 CreateTime--2017年9月11日17:19:11 Author:Marydon 一.参考链接 本篇文章的创作灵感来源于博主-奔跑的铃铛关于js中cons ...
- js声明变量的三种方式
JS 声明变量的三种方式 (1)使用变量步骤:a.声明-->b.赋值-->3.调用 正确用法: <script type="text/javascript"> ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- JavaScript学习12 JS中定义对象的几种方式【转】
avaScript学习12 JS中定义对象的几种方式 转自: http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...
- (六)javascriptJS中定义对象的几种方式(转)
JavaScript学习12 JS中定义对象的几种方式 转自: http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象 ...
- CentOS添加环境变量的三种方式
CentOS添加环境变量的三种方式,以添加php环境变量为例,假定php的安装目录为 /usr/local/php5 一.仅对当前会话临时生效 [root@bogon ~]# export PATH= ...
- ansible中定义变量的若干方法
Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...
随机推荐
- C++顺序结构(1)任务
1.下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2.两项照着做的任务
- Flutter Stream的使用
Flutter Stream的使用 首先,来了解一下stream是什么 异步数据事件的来源. 流提供了一种接收一系列事件的方法.每个事件要么是一个数据事件,也称为流的元素,要么是一个错误 事件,即某事 ...
- 【PHP】读取本地文件夹中所有图片并显示
<? //获取文件夹下的所有文件 $dir_str = ''; $imgType = array('gif','png','jpg','jpeg','bmp'); $handle = opend ...
- 转载 mybatis-plus配置控制台打印完整带参数SQL语句
问题背景 通常我们开发的时候,需要联合控制台和Navicat/PLSQL等工具进行语句的拼接检查,如果只是输出了一堆???,那么将极大降低我们的效率.因此我们需要输出完整的SQL语句以便调试. Upd ...
- Mac idea 打不开
从官网上刚下载的idea,安装完成之后,双击打开,只见一闪而过,软件没有打开. 打开 访达->应用程序->IntelliJ IDEA ->显示包内容 : image.png 显示 ...
- Qt编写视频播放器(支持pbonon/qmediaplayer/ffmpeg/vlc/mpv等多种内核)
一.前言 花了一年多的时间,终于把这个超级播放器做成了自己想要的架构,用户的需求是一方面,自己架构方面的提升也是一方面,最主要是将界面和解码解耦了,这样才能动态的挂载不同的解码内核到不同的视频监控窗体 ...
- Qt编写地图综合应用43-点聚合
一.前言 点聚合的出现就是为了减少一个可视区域内,密密麻麻绘制的太多的标注点.在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产 ...
- FFmpeg命令行示例
1 提取视频流/音频流 // 分离视频流和音频流 ffmpeg -i input_file -vcodec copy -an output_file_video ffmpeg -i input_fil ...
- Ubuntu 20.04编译opencv-3.1.0时报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope
Ubuntu 20.04源码编译安装opencv320 报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope的解决办法 ...
- ESLint is disabled since its execution has not been approved or denied yet
VS Code 装好ESLint 插件报黄线的问题,具体解决方法如下所示: ESLint is disabled since its execution has not been approved o ...