题记部分

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] 定义变量的几种方式的更多相关文章

  1. JN_0003:JS定义变量的3种方式

    js中三种定义变量的方式const, var, let的区别. 1,const定义的变量不可以修改,而且必须初始化. 2,var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 3 ...

  2. js中定义变量的三种方式const,val,let 的区别

    js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始 ...

  3. PHP定义字符串的四种方式

    1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...

  4. js声明变量的三种方式及作用域

      js声明变量的三种方式及作用域 CreateTime--2017年9月11日17:19:11 Author:Marydon 一.参考链接 本篇文章的创作灵感来源于博主-奔跑的铃铛关于js中cons ...

  5. js声明变量的三种方式

    JS 声明变量的三种方式 (1)使用变量步骤:a.声明-->b.赋值-->3.调用 正确用法: <script type="text/javascript"> ...

  6. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  7. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  8. (六)javascriptJS中定义对象的几种方式(转)

    JavaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象 ...

  9. CentOS添加环境变量的三种方式

    CentOS添加环境变量的三种方式,以添加php环境变量为例,假定php的安装目录为 /usr/local/php5 一.仅对当前会话临时生效 [root@bogon ~]# export PATH= ...

  10. ansible中定义变量的若干方法

    Ansible支持十几种定义变量的方式 根据优先级排序的定义方式: Inventory变量 Host Facts变量 Playbook变量 Playbook提示变量 变量文件 命令行变量 1.Inve ...

随机推荐

  1. C++顺序结构(1)任务

    1.下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2.两项照着做的任务

  2. Flutter Stream的使用

    Flutter Stream的使用 首先,来了解一下stream是什么 异步数据事件的来源. 流提供了一种接收一系列事件的方法.每个事件要么是一个数据事件,也称为流的元素,要么是一个错误 事件,即某事 ...

  3. 【PHP】读取本地文件夹中所有图片并显示

    <? //获取文件夹下的所有文件 $dir_str = ''; $imgType = array('gif','png','jpg','jpeg','bmp'); $handle = opend ...

  4. 转载 mybatis-plus配置控制台打印完整带参数SQL语句

    问题背景 通常我们开发的时候,需要联合控制台和Navicat/PLSQL等工具进行语句的拼接检查,如果只是输出了一堆???,那么将极大降低我们的效率.因此我们需要输出完整的SQL语句以便调试. Upd ...

  5. Mac idea 打不开

    从官网上刚下载的idea,安装完成之后,双击打开,只见一闪而过,软件没有打开. 打开 访达->应用程序->IntelliJ IDEA ->显示包内容 :   image.png 显示 ...

  6. Qt编写视频播放器(支持pbonon/qmediaplayer/ffmpeg/vlc/mpv等多种内核)

    一.前言 花了一年多的时间,终于把这个超级播放器做成了自己想要的架构,用户的需求是一方面,自己架构方面的提升也是一方面,最主要是将界面和解码解耦了,这样才能动态的挂载不同的解码内核到不同的视频监控窗体 ...

  7. Qt编写地图综合应用43-点聚合

    一.前言 点聚合的出现就是为了减少一个可视区域内,密密麻麻绘制的太多的标注点.在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产 ...

  8. FFmpeg命令行示例

    1 提取视频流/音频流 // 分离视频流和音频流 ffmpeg -i input_file -vcodec copy -an output_file_video ffmpeg -i input_fil ...

  9. 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的解决办法 ...

  10. 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 ...