Ansible中的变量及加密

news/2024/11/25 23:15:49/

目录

一、变量的设定

二、变量的使用方式

1、在playbook中直接定义变量

2、在文件中定义变量 

3、设定主机变量和清单变量

4、目录设定变量

5、用命令覆盖变量

6、使用数组设定变量

7、注册变量

 8、事实变量

9、魔法变量 

三、JINJA2模板 

四、加密控制

1、创建加密文件

2、查看加密文件 

3、编辑加密文件 

4、加密现有文件 

5、更改加密文件密码

6、解密文件

7、执行加密文件


一、变量的设定

1、变量的命名规则:
(1)只能包含数字,下划线,字母;
(2)只能用下划线或字母开头;
(3)ansible内置的关键字不能作为变量名。
2、变量的级别:

3、变量优先级:
全局 > play > 主机

全局从命令行或配置文件中设定的
playplay和相关结构中设定
主机由清单,事实收集或注册的任务

二、变量的使用方式

  • 这里使用循环定义的方式,使用loopitem实现循环执行

1、在playbook中直接定义变量

vim test.yml- name: test varhosts: allvars:TEST: hello aletasks:- name: filedebug:msg: "{{ TEST }}"ansible-playbook test.yml

2、在文件中定义变量 

vim file.ymlTEST: hello alevim test.yml- name: test varhosts: allvars_files:- ./file.ymltasks:- name: filedebug:msg: "{{ TEST }}"

3、设定主机变量和清单变量

[test1]
192.168.67.112[test2]
192.168.67.113[test1:vars]
TEST=hello yyl[test2:vars]
TEST=hello alevim test.yml- name: test varhosts: allvars:tasks:- name: filedebug:msg: "{{ TEST }}"

4、目录设定变量

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

 group_vars和host_vars之前注释inventory   内定义的

mkdir group_vars
cd group_vars/vim test1
TEST: hello yyl
vim test2
TEST: hello alevim test.yml- name: test varhosts: allvars:tasks:- name: filedebug:msg: "{{ TEST }}"

 host_vars:

mkdir host_vars
cd host_vars/vim 192.168.67.112
TEST: hello yyl
vim 192.168.67.113
TEST: hello ale- name: test varhosts: allvars:tasks:- name: filedebug:msg: "{{ TEST }}"

5、用命令覆盖变量

ansible-playbook test.yml -e "TEST=hahahaha"

6、使用数组设定变量

vim user_var.yml- name: test varhosts: allvars:USER1:name: user1id: 123USER2:name: user2id: 456tasks:- name:user:name: "{{USER1.name}}"uid: "{{USER1.id}}"state: present- name:user:name: "{{USER2.name}}"uid: "{{USER2.id}}"state: present

7、注册变量

register:把模块输出注册到指定字符串中    要输出单独参数时,指定输出变量

vim reg.yml- name: test registerhosts: alltasks:- name: hostname commandshell:hostnameregister: info- name: show messagesshell:echo "{{info['stdout']}}"

 

 8、事实变量

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

vim 1.yml- name: test registerhosts: alltasks:- name: show messagesdebug:msg: "{{ansible_facts['architecture']}}"

gather_facts: no ##在playbook中关闭事实变量收集

9、魔法变量 

和事实变量类似,都是真实存在的变量,和ansible有关;直接执行以下变量即可。

 ##ansible软件的内部信息

ansible localhost -m debug -a "var=hostvars"

 

##当前受管主机所在组

ansible all -m debug -a "var=group_names" 

##列出清单中所有的组和主机

ansible localhost -m debug -a "var=groups"

##包含清单中配置的当前授管主机的名称

ansible localhost -m debug -a "var=inventory_hostname"

三、JINJA2模板 

       Jinja2是Python下一个被广泛应用的模版引擎 他的设计思想来源于Django的模板引擎, 并扩展了其语法和一系列强大的功能。 其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能 。  

j2模板书写规则

{# /etc/hosts line #}  ##注释说明文件用途
127.0.0.1 localhost  ##文件内容
{{ ansible_facts['all_ipv4_addresses'] }} {{ansible_facts['fqdn']}}  ##使用事实变量

j2模板的实现:

vim jinja.yml---
- name: testjinjahosts: server2tasks:- name: create filetemplate:src: ./test.j2  ##j2模板来源dest: /mnt/test  ##远程主机执行文件地址

for循环和 if 的用法:

for循环:

设定j2模板,变量要用{{ }}括起来

{% for NAME in users %}  ##for循环设定变量NAME,变量来源于变量文件
{{ loop.index }} {{ NAME  }}  ##变量用 {{ }} 括起来
{% endfor %}  ##for循环结束

if判断:

{% for NAME in users %}
{% if NAME in "linux"%}  ##in表示等于时
{{ loop.index0 }}  ##等于时只记数
{% endif %}
{% if NAME not in "linux"%}  ##not in表示不等于时
{{ loop.index0 }} {{ NAME }}  ##不等于时记数加变量
{% endif %}
{% endfor %}

练习:

使用j2模板 写hosts解析文件

vim hosts.yml- name: create hostshosts: alltasks:- name: create hosts filetemplate:src: ./hosts.j2dest: /mnt/hostsvim hosts.j2{% for HOST in groups['all'] %}
{{hostvars[HOST]['ansible_facts']['ens33']['ipv4']['address'] }} {{hostvars[HOST]['ansible_facts']['hostname']}}
{% endfor %}

四、加密控制

1、创建加密文件

ansible-vault create yyl
cat yyl

2、查看加密文件 

vim authyyl  123
ansible-vault view yyl
ansible-vault view --vault-password-file=authyyl  yyl

3、编辑加密文件 

ansible-vault edit --vault-password-file=authyyl yyl
ansible-vault view --vault-password-file=authyyl  yyl

4、加密现有文件 

ansible-vault encrypt yyl.yml

 5、更改加密文件密码

ansible-vault rekey yyl文件更改密码
vim authyyl  123456
ansible-vault rekey yyl --new-vault-password-file=authyyl
ansible-vault view yyl

 

6、解密文件

ansible-vault decrypt yyl
ansible-vault decrypt test.yml

7、执行加密文件

ansible-playbook test.yml --ask-vault-pass


http://www.ppmy.cn/news/1192455.html

相关文章

【Acwing170】加成序列(dfs+迭代加深+剪枝)题解和一点感想

本思路来自acwing算法提高课 题目描述 看本文需要准备的知识 1.dfs算法基本思想 2.对剪枝这个词有个简单的认识 迭代加深思想和此题分析 首先,什么是迭代加深呢?当一个问题的解有很大概率出现在递归树很浅的层,但是这个问题的解本身存在…

数字化时代,谈谈数据资产这件事

在全球数字化转型的大趋势下,数据交易市场有望推动数据要素价值的开放共享和流通。据信通院测算,2021年全球47个重要经济体的数字经济增加值规模高达 38.1 万亿美元,我国2021年数字经济规模也已达到7.1万亿美元。数据之于数字经济的价值不言而…

S32K312 DTCM在代码中使用示例

TCM是一种被直接集成在CPU芯片中的高速缓存,TCM又分为ITCM(Instruction TCM)和DTCM(Data TCM)。ITCM是用来存储代码段的,DTCM是用来存储数据的。 为什么要使用DTCM来存储数据?1)频繁…

uniapp在APP端使用swiper进行页面不卡顿滑动

uniapp在APP端使用swiper进行页面会卡顿&#xff0c;主要是渲染的数据有点多&#xff0c;这里只渲染三个数据就不好那么卡顿了&#xff0c;每次滑动后更新数据 <view><swiper change"changePoint" circular :disable-touch"disableTouch"><…

Java——java.time包使用方法详解

Java——time包使用方法详解 java.time 包是 Java 8 引入的新日期和时间 API&#xff08;JSR 310&#xff09;&#xff0c;用于替代旧的 java.util.Date 和 java.util.Calendar 类。它提供了一组全新的类来处理日期、时间、时间间隔、时区等&#xff0c;具有更好的设计和易用性…

详解Java经典数据结构——HashMap

Java 的 HashMap 是一个常用的基于哈希表的数据结构&#xff0c;它实现了 Map 接口&#xff0c;可以存储键值对。下面我们进行详细介绍&#xff1a; 基本结构&#xff1a;HashMap 底层是基于哈希表来实现的&#xff0c;每次插入一个键值对时&#xff0c;会先对该键进行 Hash 运…

ElasticSearch搜索技术深入与聚合查询实战

ES分词器详解 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 分词发生时…

API对接中需要注意到的问题

一、引言 在数字化时代&#xff0c;应用程序接口&#xff08;API&#xff09;已经成为不同软件应用程序之间进行数据交互和信息交流的重要桥梁。通过API&#xff0c;开发者可以方便地访问和集成不同平台、系统的数据和功能&#xff0c;以实现更高效、更灵活的业务流程和功能扩…