1、变量命名
只能包含数字,下划线,字母
只能用下划线或字母开头
2、变量级别
全局:从命令行或配置文件中设定的
play:在play和相关结构中设定的
主机:由清单,事实收集或注册的任务
变量优先级设定:play>主机>全局
3、变量设定和使用方式
1.在playbook中直接定义变量

---
- name: test varhosts: allvars:- NAME: westosusertasks:- name: create useruser:name: "{{NAME}}" NAME的值,变量的表示方式state: present

2.在文件中定义变量

vim user_list.yml
---
NAME:westosuser
vim westos.yml
---
- name: Create Userhosts:172.25.254.100vars_files: ./user_list.ymltasks:- name:create useruser:name:"{{NAME}}"state:present
ansible-playbook westos.yml

3.在清单里定义变量

inventory
[test]
172.25.254.100
[test:vars]
NAME:westoslinux
使清单生效
vim test.yml
---
- name: testhosts:testtasks:- name:create useruser:name:"{{NAME}}"state:present
ansible-playbook test.yml

4.目录设定变量
group_vars 清单变量,目录中的文件名称与主机清单名称一致
host_vars 主机变量,目录中的文件名称与主机名称一致

vim group_vars/test
---
NAME: westoslinux1vim test.yml
---
- name: testhosts: testtasks:- name:create useruser:name:"{{NAME}}"state:presentansible-playbook test.yml
vim test.yml
---
- name: testhosts: testtasks:- name:create userdebug:msg:"{{NAME}}"
vim test.yml
---
- name: testhosts: testtasks:- name:create userdebug:var:NAME
mkdir host_vars
cd host_vars/
ls
vim 172.25.254.100
cd ..
cat host_vars/172.25.254.100
ansible-playbook test.yml
ansible-playbook test.yml -e "NAME=westos"应用范围最小,只针对这条命令

使用数组的方式定义

vim user.yml
USERLIST:lee:age:18obj:linuxwestos:age:20obj:java
vim test.yml
---
- name: testhosts:testvars_files:./user.ymltasks:- name: create userdebug:var:USERLIST['lee']['age']
ansible-playbook test.yml
vim test.yml
---
- name: testhosts:testvars_files:./user.ymltasks:- name: create userdebug:msg: "{{USERLIST['lee']['age']}}"

问题:create web vhost
www.westos.com 80 ----> /var/www/html 其中的默认发布文件 www.westos.com
linux.westos.com 80 ----> /var/www/virtual/westos.com/linux 默认发布文件 linux.westos.com

ansibel test -m lineinfile -a 'path=/mnt/westos line="hello westos\nhello linux" create=yes'

变量注册

ansible主机中
vim test.yml
---
- name: testhosts: 172.25.254.100tasks:- name: shellshell:date
ansible-playbook test.yml
判断命令执行成功与否
ansible-playbook test.yml -v
捕捉rc,如果为0,则执行成功
vim test.yml
---
- name:testhosts:172.25.254.100tasks:- name:shellshell:dateregister: WESTOS- debug:var: WESTOS['rc']把date这个命令的所有输出全部注册成了WESTOS这个变量,这个变量中又有很多字典组成的,要取哪个就写哪个,要写什么东西,可以在执行结果那看到。var: WESTOS['stdout'] 显示时间
把命令的执行结果注册到一个字符串中,接下来就可以使用这个字符串代替这个命令执行结果的某一部分信息了。

事实变量
事实变量是ansible在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息
当需要使用主机相关信息时不需要采集赋值,直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被称为事实变量。

ansible 172.25.254.100 -m setup 这条命令可以采集到这台主机的事实
vim test.yml
---
- name: testhosts: 172.25.254.100tasks:- debug:var: ansible_facts['ens3']['ipv4']['address']#取地址var: ansible_facts['fqdn']#取主机名称
ansible-playbook test.yml
#使用事实变量
vim test.yml
---
- name: testhosts: 172.25.254.100tasks:- lineinfile:path:/mnt/hostnameline:"{{ansible_facts['fqdn']}}"create: yes
ansibel-playbook test.yml
vim test.yml
---
- name: testhosts: 172.25.254.100gather_facts: no #gathering 动作不执行,playbook运行速度会变快,但事实变量就不能用了。tasks:- lineinfile:path:/mnt/hostnameline:"{{ansible_facts['fqdn']}}"create: yes

魔法变量
hostvars: ansible软件的内部信息

ansible localhost -m debug -a "var=hostvars"
ansible 172.25.254.100 -m debug -a "var=group_names" #检测指定的主机在哪些组中。
ansibel 172.25.254.100 -m debug -a "groups" #检测所有的清单中配置的当前受管主机的名称。
ansible westos -m debug -a "var=inventory_hostname" #查看westos组中有多少主机。

j2模板的使用
会按照主机的信息去生成模板内容

vim test.j2
{# /etc/hosts line #} #注释说明文件用途
172.0.0.1 localhost  #文件内容
{{ ansible_facts['ens3']['ipv4']['address']}} {{ansible_facts['fqdn']}} #使用事实变量vim westos.yml
---
- name: test j2hosts: 172.25.254.100tasks:- name: test j2template:src: ./test.j2dest:/mnt/hosts
ansible-playbook westos.yml
172.25.254.100主机中
vim /mnt/hosts
ansible主机中
设置清单
vim inventory
[test]
172.25.154.100
[westos]
172.25.254.200
for循环
vim westos.yml
---
- name: test j2hosts: westosvars:users:- westos- linux- leetasks:- name: test j2template:src: ./test.j2dest: /mnt/hostsvim test.j2
{% for NAME in users %}
{{NAME}}
{% endfor %}
ansible-playbook westos.ymlif 判定
{% for NAME in users if not NAME == "linux" %}
{{loop.index}} - {{ NAME }}
{%endfor%}loop.index #循环迭代记数从1开始
loop.index0 #循环迭代记数从0开始
vim userlist
userlistname age
lee  18
test 20
linux xvim westos.yml
---
- name: test j2hosts: westosvars:users:- name: westosage: 18- name: linux- name:leeage: 20tasks:- name: test.j2template:src:./test.j2dest: /mnt/hostsvim test.j2
{% for NAME in users %}
name: {{NAME['name']}}
{%if NAME['age'] is defined%}#NAME相当于之前的users。
age:  {{NAME['age']}}
{%endif%}
{%if NAME['age'] is not defined%}
age: x
{%endif%}
{%endfor%}
ansible-playbook westos.yml在100主机上
cat /mnt/hosts

yml加密

先删除之前所做的文件
vim westos.yml
---
- name:testhosts:westostasks:- debug:msg: hello westos
加密
ansible-vault create westos1.yml
- name:testhosts:westostasks:- debug:msg: hello westos
cat westos1.yml
非交互式的加密
vim password
westos
ansible-vault create --vault-password-file=password westos2.yml
hello westos
加密已有的文件
ansible-vault encrypt westos.yml --vault-password-file=password
查看加密内容
ansible-vault view westos.yml #需要输密码
ansibel-vault view westos.yml --vault-password-file=password #不需要输密码
ansible-vault edit westos.yml 编辑这个文件
执行加密文件
ansible-playbook westos.yml --ask-vault-pass
解密文件
ansible-vault decrypt westos.yml --vault-password-file=password
ansible-vault decrypt westos.yml --vault-password-file=password --output=linux #文件解密保存为linux
更改密码
ansible-vault rekey westos.yml #需要输密码
ansible-vault rekey westos.yml --vault-password-file=password

playbook变量相关推荐

  1. Ansible Playbook 变量与 register 详解

    ansible 定义变量方式与[多层]变量引用,以及 register 详解 主机规划 主机名称 操作系统版本 内网IP 外网IP(模拟) 安装软件 ansi-manager CentOS7.5 17 ...

  2. playbook 变量

    playbook 变量 文章目录 playbook 变量 1. 变量介绍 2. 定义变量 2.1 可以在Ansible项目中的多个位置定义变量.为三个范围级别: 2.2 定义 3. 主机变量和组变量 ...

  3. Linux运维-day44-综合架构-playbook剧本的变量、条件语句及循环语句

    环境准备: m01管理服务器(外网:10.0.0.61:内网:172.16.1.61) backup(外网:10.0.0.41:内网:172.16.1.41) nfs01(外网:10.0.0.31:内 ...

  4. SUDO提权-Ansible配置-变量-Playbook应用案例

    返回 文章目录 1 案例1:配置sudo权限 1.1 问题 1.2 方案 步骤一:配置sudo提权 2 案例2:修改Ansible配置 2.1 问题 步骤一:配置普通用户远程管理其他主机 1)修改主配 ...

  5. Ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢? 根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断 ...

  6. 1. ansible-playbook 变量定义与引用

    简单的playbook playbook 是ansible的核心组件,使用的是YAML语法. 下面请看简单的playbook代码 [root@LeoDevops playb]# cat nginx.y ...

  7. Ansible之Playbook使用

    一.Playbook是什么 playbook-剧本(也称编排) 介绍 playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单 ...

  8. Ansible Playbook剧本

    编写Ansible Playbook剧本,使用Playbook完成自动化操作 熟悉Playbook语法格式 编写Playbook管理系统账户 编写Playbook管理逻辑卷 编写Playbook管理软 ...

  9. ansible之playbook角色

    ansible之playbook&角色 playbook-剧本 简介 playbook组件用法 playbook变量 playbook语句 roles-角色 简介 用法 实战 playbook ...

最新文章

  1. 【观影】摩托日记、盲井
  2. Spring之LoadTimeWeaver——一个需求引发的思考---转
  3. Oracle笔记(3):数据库启动原理
  4. Redis之java操作篇(数据对象的存取)
  5. 作家百态之一:作家、批评家与酒
  6. 刚刚,Python内幕被爆出!老码农:没控制住,心态已崩!
  7. 如何走出物联网死亡之井?
  8. 关于三层交换机的智能流技术
  9. ELK(elasticsearch5.0)head插件安装配置
  10. udp buffer 和reassemble buffer
  11. 全面详解互联网企业开放API的 “守护神”
  12. 可以实现psd转png转换器有哪些?这些工具能让你轻松转换图片格式
  13. linux下查看巨杉数据库,SequoiaDB巨杉数据库入门:快速搭建流媒体服务器
  14. Linux rm/rmdir 命令使用介绍
  15. 学习游戏开发,有哪些常识需要了解
  16. 淘宝订单详情(插旗)API操作 API 返回值说明
  17. Kotlin学习笔记(二)——函数操作符内置函数
  18. dede栏目添加自定义字段方法
  19. zz 彩色转灰度算法
  20. 10-1 查询没有课程成绩的学生学号、姓名、性别。

热门文章

  1. 43 迷宫问题(避免走重复路径)
  2. 今日新闻快讯10条 每天一分钟 知晓天下事 4月28日
  3. ajax下拉 加载 下一页,jQuery滑动到底部加载下一页数据的实例代码
  4. Win7 XP mode忘记密码或者清空密码后不能登录的处理方法
  5. 日本野村综合研究所与SBInbsp;Sum…
  6. GRU(Gated recurrent unit)
  7. 机器人也能拥有人类情感:“情感计算”让机器人学会“读心术”
  8. 面试结束后应该说的那句话?
  9. 备战数学建模37-遗传算法GA(攻坚战1)
  10. 编程突然光标变粗变黑解决办法