ansible变量与机密

ansible变量与机密

1. 变量

1.1 ansible变量的作用

在Ansible中支持设置主机变量、组变量,变量支持嵌套使用,定义好了的变量可以在playbook中引用。由于Ansible实在每个主机上单独运行命令,所以不同的主机去调用同样的变量,也可以取到不同的值,这样进行一些配置就会更加灵活合理

1.2 变量的命名规范

变量的命名应该符合以下两个规范:

  • 变量应该由字母、数字、下划线组成
  • 变量应该以字母开头

例如:host_port、HOST_PORT、var5是符合命名规范的,host-port、HOST PORT、var.2都不符合命名规范

变量的定义通常是YAML格式,在inventory host文件中也可以使用INI格式

anisble变量不仅可以支持简单的key=value格式,而且也支持更复杂的数据结构,例如字典类型等

1.3 变量的作用域

变量的作用域可以分为三种:

  • 作用于全局的变量:从命令行或Ansible配置设置的变量

  • 作用于play的变量:在play和相关结构中设置的变量

  • 作用于host的变量:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量

在变量中,窄范围优先于更广泛的范围:由清单定义的变量将被playbook定义的变量覆盖,后者将被命令行中定义的变量覆盖

1.3.1 作用于全局的变量
  1. ansible配置文件会定义一些变量信息,主要是对执行环境,连接信息变量的定义
    例如inventory目录,library目录、与目的主机连接方式、越权信息、连接超时时间等

  2. 系统环境变量
    在ansible连接到目的主机时,会以nologin shell登录到目的主机,此时目的主机的/etc/bashrc和~/.basrc的环境变量会被加载,所以这两个文件中设置的环境变量会作用于playbook全局

  3. 命令行变量

    我们可以在执行playbook的命令行指定变量,需要注意的是,**命令行指定的变量在所有其他变量中优先级是最高的。**也就是说如果命令行指定的变量和其他地方指定的变量有冲突时,那么ansible最终会采用命令行定义的变量

    ansible-playbook test.yml --extra-vars "IP=192.168.100.110"
    
1.3.2 作用于play的变量

vars语句定义全局变量

我们可以在playbook中使用vars语句定义变量,该变量作用于整个play

---
- hosts: node1
  vars:
    http_port: 80

上面的http_port是一个作用于整个play的变量,对这个play中的tasks、roles、import、include等等之下定义的task均生效

引用变量文件

除了将变量写在playbook中,我们也可以将变量放在一个单独的YAML文件中,通过vars_files语句来导入

vars_files变量只能作用于play全局,不能在某个task中单独被引用。vars_files参数可以使用系统绝对路径或playbook文件的相对路径。

例如:

我们在playbooks目录下创建一个vars-files.yml文件:

---
age=100

在playbook中使用vars_files语句引用该变量文件:

---
- hosts: node2
  vars_files: ./vars-files.yaml
  tasks:
  - debug:
      msg: "My age is {{ age }}"
1.3.3 作用于host的变量
  1. 主机变量

主机变量是指作用在某一台主机上的变量。位置可以与主机清单写在一起也可以写在inventory/host_vars/a_host_name.yml文件里。通常前者使用INI格式,后者使用YAML格式。

如果组变量和主机变量都对同一个主机定义了相同的变量,那么ansible最终会采用主机变量而放弃组变量

  1. 组变量

和主机变量类似,组变量作用于主机组,即多个主机。位置可以与主机组定义写在一起也可以写在inventory/group_vars/a_group_name.yml文件里。

1.4 变量的使用

一个变量被定义后,在它的作用域内的play可以直接调用, 例如:

我们定义了整个play作用域的变量nameage,那么在之后的两个debug模块内可以直接调用

---
- hosts: node2
  vars:
    name: sunquan
    age: 21
  tasks:
    - debug:
        msg: "My name is {{ name }} and I'm {{ age }} years old"

2. 管理机密

2.1 ansible vault

什么是ansible vault

  • ansible提供的ansible vault可以加密和解密任何由ansible使用的结构化数据文件

  • 若要使用ansible vault,可通过一个名为ansible-vault的命令行工具创建、编辑、加密、解密和查看文件

  • ansible vault可以加密任何由ansible使用的结构化数据文件

    • 包括清单变量、playbook中含有的变量文件、以及在执行playbook时作为参数传递的变量文件,或者ansible角色中定义的变量
2.1.1 使用ansible-vault创建加密文件
  1. ansible-vault create命令创建加密的文件,该文件在执行时会提示输入新的vault密码,然后利用vi编辑器打开文件

    [root@node1 ~]# ansible-vault create test.yml
    New Vault password: 
    Confirm New Vault password: 
    [root@node1 ~]# cat test.yml 
    $ANSIBLE_VAULT;1.1;AES256
    3530393933383336666261613563326561326263333261376130623232663236626433666136653
    3561393334386561633137356266383866323362666130660a62303064363139636334623039633
    6266636533656435343762333934383162623331346538343234396631616438303432643836646
    345313866386462610a303033373666313736666665343435623230383631306165323762613632
    6663
    
  2. 使用vault密码文件来存储vault密码,而不是通过标准输入途径输入vault密码

    //首先创建密码文件
    [root@node1 ~]# cat password.txt 
    123456
    
    //创建加密的YAML文件
    [root@node1 ~]# ansible-vault create --vault-password-file=./password.txt test1.yml
    [root@node1 ~]# cat test1.yml 
    $ANSIBLE_VAULT;1.1;AES256
    3364613832386331656462653764373532316337616465373038346336303362343230643130376
    6632626436366337646561333936653339303239346436640a35623537393136373735313439613
    6566613530303239353435323964643538626364386639616365353235653331343565323238656
    6262613335373830360a31303739633135626231376633636535346232336165393433363766303
    3234
    //已经加密完成
    
2.1.2 查看已经加密的文件
  1. 使用ansible-vault view命令查看ansible vault加密的文件,而不必打开它进行编辑

    //查看文件内容
    [root@node1 ~]# cat test.yml 
    $ANSIBLE_VAULT;1.1;AES256
    3530393933383336666261613563326561326263333261376130623232663236626433666136653
    3561393334386561633137356266383866323362666130660a62303064363139636334623039633
    6266636533656435343762333934383162623331346538343234396631616438303432643836646
    346313866386462610a303033373666313736666665343435623230383631306165323762613632
    6663
    
    //[root@node1 ~]# ansible-vault view test.yml 
    Vault password: 			//这里输入加密的密码
    123456
    
2.1.3 编辑已经加密的文件
  1. ansible vault提供ansible-vault edit命令继续编辑已经加密的文件;工作时将文件解密为一个临时文件,并允许编辑;保存时,它将复制其内容并删除临时文件

    //查看已经加密的文件内容
    [root@node1 ~]# ansible-vault view test.yml 
    Vault password: 
    123456
    
    //继续编辑文件内容
    [root@node1 ~]# ansible-vault edit test.yml 
    Vault password: 
    [root@node1 ~]# ansible-vault view test.yml 
    Vault password: 
    123456
    654321
    
2.1.4 加密和解密现有的未加密文件
  1. 使用ansible-vault encrypt加密现有的未加密的文件;此命令可以一次加密多个现有的未加密文件

    //查看现有的未加密的文件
    [root@node1 ~]# cat jiami.yml 
    1234567
    
    //加密该文件
    [root@node1 ~]# ansible-vault encrypt jiami.yml 
    New Vault password: 
    Confirm New Vault password: 
    Encryption successful
    [root@node1 ~]# cat jiami.yml                   
    $ANSIBLE_VAULT;1.1;AES256
    6538306336666336396237306534613765323661323737323465613735626663306165336265323
    3633626566336438636264316637343435396338373534640a34363134646135356164373732313
    3739323837613034386433643036636630646439383235333535653765653664653762383366376
    3361393539376336610a38356631396664313736323335313161643931353236326466343866316
    3136
    
  2. 使用ansible-vault decrypt解密现有的已加密的文件;并且是永久解密

    //查看刚刚加密的文件
    [root@node1 ~]# cat jiami.yml                   
    $ANSIBLE_VAULT;1.1;AES256
    6538306336666336396237306534613765323661323737323465613735626663306165336265323
    3633626566336438636264316637343435396338373534640a34363134646135356164373732313
    3739323837613034386433643036636630646439383235333535653765653664653762383366376
    3361393539376336610a38356631396664313736323335313161643931353236326466343866316
    3136
    
    //对文件进行解密
    [root@node1 ~]# ansible-vault decrypt jiami.yml 
    Vault password: 
    Decryption successful
    
    //查看该文件
    [root@node1 ~]# cat jiami.yml                   
    1234567
    

161643931353236326466343866316
3136

//对文件进行解密
[root@node1 ~]# ansible-vault decrypt jiami.yml
Vault password:
Decryption successful

//查看该文件
[root@node1 ~]# cat jiami.yml
1234567



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值