【ansible4】Ansible中的变量及加密(jinjia模板使用等,图文详解)
Ansible中的变量及加密
- 一、变量的设定
- 一、变量命名规则
- 二、变量级别
- 三、变量设定和使用方式
- 二、JINJIA2模板
- 一、简介
- 二、使用方法
- 三、jinjia2模板的for循环,if用法
- 一、for循环
- 二、if判断语句
- 三、练习
- 四、文件加密
一、变量的设定
一、变量命名规则
只能包含数字,下划线,字母
只能用下划线或字母开头
二、变量级别
全局:
从命令行或配置文件中设定的
paly:
在play和相关结构中设定的
主机:
由清单,事实收集或注册的任务
三、变量设定和使用方式
这里使用循环定义的方式,使用loop和item实现循环执行
1、在playbook中直接定义变量
---
- name: testhosts: 172.25.42.200vars:user:- ttt- qqq tasks: - name: useruser:name: "{{ item }}" 代表循环的每一个变量state: presentloop: 定义循环"{{ user }}"
2、在文件中定义变量
定义变量
[ck@ansible ansible]$ cat westos.yml
---
westos:- hhh- kkk
使用变量、建立多个用户
[ck@ansible ansible]$ cat test1.yml
---
- name: testhosts: 172.25.42.200vars_files: - ./westos.yml 定义文件位置tasks: - name: useruser:name: "{{ item }}" 每次执行一个westos的值state: presentloop: 循环定义语句,定义westos的值为多个个"{{ westos }}"
3、清单使用变量
清单中直接给出变量,yml文件直接执行清单即可引用清单中的变量
清单内容
[westos:vars]
USER=test 直接给予变量
文件内容
[ck@ansible ansible]$ cat test2.yml /
---
- name: create userhosts: westos 执行清单,将会直接执行清单的变量tasks: - name: user modeuser:name: "{{ USER }}"state: present
//
修改清单路径
执行ymal文件,得到结果
4、针对清单生效
设定清单里面的变量
主机的执行清单
[ck@ansible ansible]$ cat westos
[westos]
172.25.42.200
建立用户yml文件
[ck@ansible ansible]$ cat useradd.yml
---
- name: create userhosts: westos 执行westos清单tasks: - name: user modeuser:name: "{{ USER }}"state: present
但是目前没有定义USER的变量,可以直接新建特定名称的group_vars文件,系统会自动识别此目录。在文件里设定执行清单westos里的变量USER,注意定义变量清单的名字和定义执行的清单名称必须一致
建立清单、设定清单变量
[ck@ansible ansible]$ mkdir group_vars
[ck@ansible ansible]$ cd group_vars
[ck@ansible group_vars]$ vim westos 此文件必须和执行清单的名字保持一致///
USER: ppppppp
/
5、针对主机生效
可以针对特定的主机设定特定变量
建立特定的host_vars文件,ansible会自动读取。注意目录中的文件名称与主机名称一致。
[ck@ansible ansible]$ mkdir host_vars
[ck@ansible ansible]$ cd host_vars/
[ck@ansible host_vars]$ vim 172.25.42.200///
---
USER: ckckckck
///
yml文件为
[ck@ansible ansible]$ cat useradd.yml ---
- name: create userhosts: westos tasks: - name: user modeuser:name: "{{ USER }}"state: present
//
6、针对列表生效
单独建立列表,使用数组设定变量。
建立列表
[ck@ansible ansible]$ cat list.yaml ---
LIST:- name: user1path: /home/user1- name: user2path: /home/user2
设定yml执行文件
[ck@ansible ansible]$ cat test3.yml ///
---
- name: testvars_files:- ./list.ymlhosts: westostasks:- name: testdebug:msg: "{{ item.name }} {{ item.path }}"loop:"{{ LIST }}"
7、变量覆盖
使用时加上参数则会覆盖掉yml文件里面变量的设定
ansible-playbook user.yml -e "USER=hello"
8、变量注册
将运行输出的值通过register注册输出给一个变量
[ck@ansible ansible]$ cat test2.yml ///
---
- name: test registerhosts: westostasks: - name: shellshell: echo hello worldregister: westos 将输出全部注册给变量westos- name: show debug: debug输出模块msg: "{{westos}}" msg展示返回的变量westos
当需要输出某个具体的参数时:需要具体指定输出变量
9、事实变量
事实变量是ansible在受控主机中自动检测出的变量,和采集到的主机信息有关
事实变量中还有与主机相关的信息,其变量都是真实存在的,不需要赋值,直接调用即可。
(1)、查看所有的值
[root@ansible ansible] ansible localhost -m setup
(2)、用yml文件看具体值
注意事实变量不用写变量参数前面的ansible
[ck@ansible ansible]$ cat test2.yml ///
---
- name: test facthosts: westostasks: - name: showdebug:msg: "{{ansible_facts['nodename']}}" 修改[]里面参数即可
//
10、魔法变量
和事实变量类似,都是真实存在的变量,和ansible有关
直接执行以下变量即可
列如:
1、ansible软件的内部信息(hostvars:)
ansible localhost -m debug -a "var=hostvars"
2、当前受管主机所在组 (group_names:)
ansible localhost -m debug -a "var=group_names"
3、列出清单中所有的组和主机 (groups:)
ansible localhost -m debug -a "var=groups"
4、包含清单中配置的当前授管主机的名称(inventory_hostname:)
ansible localhost -m debug -a "var=inventory_hostname"
令var变量等于某个参数即可获得该参数信息
二、JINJIA2模板
一、简介
Jinja2是Python下一个被广泛应用的模版引擎
并扩展了其语法和一系列强大的功能。
其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,可以实现所有变量的运用
二、使用方法
1、jinjia模板的实现
建立yml文件,采用j2模板
[ck@ansible ansible]$ cat test4.yml //
- name: test j2hosts: westostasks: - name: create test filetemplate:src: ./test.j2 j2文件来源dest: /mnt/test 被控端执行文件地址
///
建立jtest.j2模板
[ck@ansible ansible]$ cat test.j2 ///
{ # test file }
hello world
//
实现了文件的创造
2、jinjia模板实现变量输出
输出被控主机地址解析文件到指定位置
[ck@ansible ansible]$ cat test5.yml //
- name: test j2hosts: westostasks: - name: create test filetemplate:src: ./hosts.j2dest: /mnt/test
//
建立hosts.j2文件
[ck@ansible ansible]$ cat hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{{ ansible_facts['ens3']['ipv4']['address'] }} {{ ansible_facts['fqdn'] }} {{ ansible_facts['hostname'] }}
成功在受控主机端查看到变量生成的解析地址
三、jinjia2模板的for循环,if用法
一、for循环
设定变量
[ck@ansible ansible]$ cat user.yml
users:- westos- linux- ansible
设定jinjia2模板
变量用{{ }}括起来
[ck@ansible ansible]$ cat test1.j2
{% for NAME in users %} for循环设定变量NAME,值来源于变量文件
{{ NAME }} 变量用{{}},每次循环NAME的值都不同
{% endfor %} for循环结束
设定yaml文件
[ck@ansible ansible]$ cat test5.yml
- name: test j2vars_files: ./user.yml 变量文件hosts: westostasks: - name: create listtemplate: src: ./test1.j2 j2文件来源dest: /mnt/user_list
成功输出结果
二、if判断语句
当变量等于linux时,只显示记数,不等于linux时,显示记数和变量名称。
设定变量
[ck@ansible ansible]$ cat user.yml
users:- westos- linux- ansible
设定j2文件
loop.index ##循环迭代记数从1开始
loop.index0 ##循环迭代计数从0开始
[ck@ansible ansible]$ cat test1.j2
{% for NAME in users %}
{% if NAME in "linux"%} in 代表“是否等于”
{{ loop.index0 }}
{% endif %}
{% if NAME not in "linux"%}
{{ loop.index0 }} {{ NAME }}
{% endif %}
{% endfor %}
设定yml文件
[ck@ansible ansible]$ cat test5.yml
- name: test j2vars_files: ./user.ymlhosts: westostasks: - name: create listtemplate:src: ./test1.j2dest: /mnt/user_list
三、练习
在被控主机端生成所有ansible主机的全部地址解析文件
[ck@ansible ansible]$ cat create.yml //
- name: create hostshosts: westostasks:- name: create hoststemplate:src: ./hosts.j2dest: /mnt/reslove
/
jinjia2模板
在for循环下,利用魔法变量和事实变量结合
[ck@ansible ansible]$ cat hosts.j2 ///
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for WESTOS in groups['all'] %}
{{ hostvars[WESTOS]['ansible_facts']['ens3']['ipv4']['address'] }} {{ hostvars[WESTOS]['ansible_facts']['fqdn'] }} {{ hostvars[WESTOS]['ansible_facts']['hostname'] }}
{% endfor %}
四、文件加密
1、创建加密文件、给予密码
[ck@ansible ansible]$ ansible-vault create westos111///
hello
///
2、普通查看、发现文件已经加密,查看不到密码
3、使用加密的方式查看文件内容
[ck@ansible ansible]$ ansible-vault view westos111
4、编辑加密文件、输入密码更改文件
[ck@ansible ansible]$ ansible-vault edit westos111
可以更改位文件
5、永久解密文件
[ck@ansible ansible]$ ansible-vault decrypt westos111
解密成功,可以直接查看到文件
6、加密现有文件
对刚才解密的文件进行加密
[ck@ansible ansible]$ ansible-vault encrypt westos111
7、更改密码
[ck@ansible ansible]$ ansible-vault encrypt westos111
8、执行加密文件
[ck@ansible ansible]$ ansible-vault encrypt westos111
【ansible4】Ansible中的变量及加密(jinjia模板使用等,图文详解)相关推荐
- Ansible中的变量及加密
一.变量命名 只能包含数字,下划线,字母 只能用下划线或字母开头 二.变量级别 全局: 从命令行或配置文件中设定的 paly: 在play和相关结构中设定的 主机: 由清单,事实收集 ...
- 如何对加密PDF进行注释(图文详解)
精简文字版请访问 https://blog.csdn.net/henbile/article/details/79539434 . 首先打开加密pdf所在的文件夹,并打开任意浏览器. 将pdf拖到浏览 ...
- Android中Canvas绘图之Shader使用图文详解
概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什 ...
- 【图文详解】JDK1.8的安装与环境变量配置(win10)
本例以win10(64位)下JDK1.8的安装为例 JDK1.8的安装与环境变量配置 一.JDK1.8安装过程详解 二.JDK1.8环境变量配置详解 三.检查JDK安装与配置是否成功 一.JDK1.8 ...
- c++中.dll与.lib文件的生成与使用的详解
c++中.dll与.lib文件的生成与使用的详解 --------------------------------------------------------------------------- ...
- python中的json函数_python中装饰器、内置函数、json的详解
装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...
- java none怎么用tomcat_在docker中部署tomcat并且部署java应用程序的步骤详解
先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是 ...
- java中String s=abc及String s=new String(abc)详解
java中String s="abc"及String s=new String("abc")详解 1. 栈(stack)与堆(heap)都是Java用来在R ...
- JDK安装和环境变量配置(Win10图文详解)
JDK的安装和环境变量配置(Win10,图文详解) 操作系统 JDK的安装 JDK下载 系统环境变量配置 验证JDK和环境变量配置 Eclipse安装 Java小白入门项目代码参考 结语 操作系统 W ...
最新文章
- 最全的 Spring 依赖注入方式,你都会了吗?
- 玩转mini2440开发板之【tekkamanninja版的u-boot的编译和烧录】
- Blender建模与游戏换装(转载文)
- 《大数据时代》读后感,维克托
- RGB颜色透明度转换
- css实现渐变色遮罩层(模糊毛边)
- rtl语言_21个最佳RTL WordPress主题(从右到左语言)
- 二叉树的基本概念以及性质
- python 自定义 计算向量投影 正交 函数
- 关于条形码的属性与一些自定义操作
- 在 Lenovo G360 笔记本上安装 Debian Squeeze AMD64
- html js 修改img 图片不拉伸,防止图片拉伸的自适应处理
- Vue3究竟好在哪里?
- (纪中)2419. Grass Planting
- MAVEN环境搭建中遇到的问题及解决方案
- SafeSignCertReg.exe导致系统工作异常
- 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)
- GitHub热榜:来膜拜这个流弊的AI框架!
- question,problem,issue,matter,区别和用法
- 计算机网络---DHCP和自动配置