题记部分

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. docker安装配置redis

    ​ 安装redis docker pull redis 配置数据路径 mkdir -p /home/redis/data docker启动 docker run -d -v /home/redis/d ...

  2. PHP 简易的BASE64加密

    有这样一个有趣的公式:x<100;  (x*53*17)%100 = x;这个公司的原理:53*17=901,x*901,的数后2位数还是x:任何符合 a * b = 100 * n +1 的值 ...

  3. EverEdit插件-CHM助手:一种免费、高效的CHM手册制作方式

    1 EverEdit插件-CHM助手:一种免费.高效的CHM手册制作方式 1.1 前言   业界制作CHM手册的工具多如牛毛,高贵的商业工具如:HelpNDoc.Help+Manual.HelpSmi ...

  4. JavaWeb HttpSession

    /** * 使用session共享数据 */ public class SessionDemo1 extends HttpServlet { @Override protected void doPo ...

  5. 2024年1月Java项目开发指南19:Vue动态页面渲染

    以文章为例子,我们获取了文章列表. 现在想实现,点击文章列表里面的某一篇文章,跳转页面,这个页面显示文章的具体内容. 那么应该怎么实现. 首先,你要创建一个文章详情页的组件(article.vue) ...

  6. 【Linux】课堂练习作业

    # 作业Day01-关机练习作业 查询在线用户 who -H 查询服务状态 systemctl status sshd 停止服务 systemctl stop sshd 停止后再次检查服务状态 方法一 ...

  7. _findnext()调试中断,发生访问错误,错误定位到ntdll.dll

    问题: 采用_findfirst和_findnext获取指定的文件夹下的文件时,_findnext()函数在调试时发生中断,发生访问错误,错误定位到ntdll.dll.错误提示如下所示: _findn ...

  8. 即时通讯框架MobileIMSDK的H5端开发快速入门

    ► 相关链接: ① MobileIMSDK-H5端的详细介绍 ② MobileIMSDK-H5端的开发手册new(* 精编PDF版) 一.技术准备 您是否已对Web端即时通讯技术有所了解? 1)新手入 ...

  9. VEP注释文件下载网址

    Ensembl提供多个物种的注释文件: ftp://ftp.ensembl.org/pub/release-96/variation/VEP

  10. 树莓派cm4更新bootloader(eeprom)

    cm4不能在系统里通过 rpi-eeprom-update 指令进行升级,也不能通过 update 进行更新,只能通过recovery模式进行更新. 以下为Windows的升级方式. Setp 1:下 ...