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模板使用等,图文详解)相关推荐

  1. Ansible中的变量及加密

    一.变量命名 只能包含数字,下划线,字母 只能用下划线或字母开头 二.变量级别 全局:    从命令行或配置文件中设定的 paly:    在play和相关结构中设定的 主机:    由清单,事实收集 ...

  2. 如何对加密PDF进行注释(图文详解)

    精简文字版请访问 https://blog.csdn.net/henbile/article/details/79539434 . 首先打开加密pdf所在的文件夹,并打开任意浏览器. 将pdf拖到浏览 ...

  3. Android中Canvas绘图之Shader使用图文详解

    概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什 ...

  4. 【图文详解】JDK1.8的安装与环境变量配置(win10)

    本例以win10(64位)下JDK1.8的安装为例 JDK1.8的安装与环境变量配置 一.JDK1.8安装过程详解 二.JDK1.8环境变量配置详解 三.检查JDK安装与配置是否成功 一.JDK1.8 ...

  5. c++中.dll与.lib文件的生成与使用的详解

    c++中.dll与.lib文件的生成与使用的详解 --------------------------------------------------------------------------- ...

  6. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  7. java none怎么用tomcat_在docker中部署tomcat并且部署java应用程序的步骤详解

    先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是 ...

  8. java中String s=abc及String s=new String(abc)详解

    java中String s="abc"及String s=new String("abc")详解 1.   栈(stack)与堆(heap)都是Java用来在R ...

  9. JDK安装和环境变量配置(Win10图文详解)

    JDK的安装和环境变量配置(Win10,图文详解) 操作系统 JDK的安装 JDK下载 系统环境变量配置 验证JDK和环境变量配置 Eclipse安装 Java小白入门项目代码参考 结语 操作系统 W ...

最新文章

  1. 最全的 Spring 依赖注入方式,你都会了吗?
  2. 玩转mini2440开发板之【tekkamanninja版的u-boot的编译和烧录】
  3. Blender建模与游戏换装(转载文)
  4. 《大数据时代》读后感,维克托
  5. RGB颜色透明度转换
  6. css实现渐变色遮罩层(模糊毛边)
  7. rtl语言_21个最佳RTL WordPress主题(从右到左语言)
  8. 二叉树的基本概念以及性质
  9. python 自定义 计算向量投影 正交 函数
  10. 关于条形码的属性与一些自定义操作
  11. 在 Lenovo G360 笔记本上安装 Debian Squeeze AMD64
  12. html js 修改img 图片不拉伸,防止图片拉伸的自适应处理
  13. Vue3究竟好在哪里?
  14. (纪中)2419. Grass Planting
  15. MAVEN环境搭建中遇到的问题及解决方案
  16. SafeSignCertReg.exe导致系统工作异常
  17. 百度飞桨PP-YOLOE ONNX 在LabVIEW中的部署推理(含源码)
  18. GitHub热榜:来膜拜这个流弊的AI框架!
  19. question,problem,issue,matter,区别和用法
  20. 计算机网络---DHCP和自动配置

热门文章

  1. js计算贷款金额怎么算
  2. PDF转换成word免费版网页版哪个好?办公就用它
  3. java基础-初学者理解对象初始化的最佳方案
  4. 企业如何才能发挥出知识管理真正的价值
  5. 专业尖端远心光学,高精度视觉检测解决者
  6. 虚拟机和容器有什么不同
  7. android2.3 如何生成编译odex,dex,odex,热更新原理简述
  8. 字节跳动青训营--前端day2
  9. “张扬体”走红,网友评论:形容大妈最恰当
  10. 论文笔记——Deep Residual Learning for Image Recognition(论文及相关代码)