变量、机密

变量(variables)

变量是用来存储和应用数据的;
Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。
变量可能包含下面这些值:

  • 要创建的用户
  • 要安装的软件包
  • 要重新启动的服务
  • 要删除的文件
  • 要从互联网检索的存档

变量命名

变量的名称必须以大写字母开头,并且只能包含字母、数字和下划线。不能以下划线开头。
驼峰体: WebServer
下划线:web_server

定义变量

可以在Ansible项目中的多个位置定义变量。
变量可简化为三个范围级别:

  • 全局范围:从命令行或Ansible配置设置的变量
  • Play范围:在play和相关结构中设置的变量
  • 主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量

playbook中的变量

变量在Ansible Playbook中发挥着重要作用,可以简化playbook中变量数据的管理。

定义变量

常见的方式是将变量放在playbook开头的vars块中:

  vars:      
    ip: 192.168.111.145
    name: hehe

也可以在外部文件中定义playbook变量。playbook中的vars块,改为使用vars_files指令。后面跟上相对于playbook位置的外部变量文件名称列表:

[root@ansible playbook]# vim vars/runtime.yml

ip: 192.168.111.146
name: apei

  vars_files:
    - vars/runtime.yml

使用变量

---
- name: test
  hosts: 192.168.111.142
  become: yes
  vars_files:
    - vars/runtime.yml
  tasks:
    - name: test
      lineinfile:
        path: /etc/hosts
        line: xixi "{
    { ip }} {
    { name }}"
        state: present

主机变量和组变量

直接应用于主机的清单变量分为两在类:

  • 主机变量,应用于特定主机
  • 组管理,应用于一个主机组或一组主机组中的所有主机
    主机变量优先于组变量,但playbook中定义的变量的优先级比这两者更高。
    主机变量:
[webservers]
192.168.111.142 ansible_user=root ansible_password=inux.123

组变量:

[webservers]
192.168.111.142

[webservers:vars]
ansible_user=root
ansible_password=inux.123

使用目录填充主机和组变量

[root@ansible ansible]# vim host_vars/192.168.111.142

ansible_user: root
ansible_password: inux.123

用数组的方式

[root@ansible ansible]# vim host_vars/192.168.111.142
ansible_user: root
ansible_password: inux.123

info:
  gouzi:
    ip: 1.1.1.1
    domain: www.example.com
  qiqi:
    ip: 2.2.2.2
    domain: web.example.com

[root@ansible playbook]# vim user.yml
---
- name: test
  hosts: 192.168.111.142
  become: yes
  tasks:
    - name: test
      lineinfile:
        path: /etc/hosts
        line: "{
    { info.gouzi.ip }} {
    { info.gouzi.domain }}"
        state: present

[root@apache ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
1.1.1.1 www.example.com

使用已注册变量捕获命令输出

级别:

  • 标准输入:STDIN
  • 标准输出:STDOUT
  • 标准错误:STDERR
[root@ansible playbook]# vim user.yml

---
- name: test
  hosts: 192.168.111.142
  become: yes
  tasks:
    - name: test
      command: "echo hello world"
      register: result

    - debug: var=result

[root@ansible ansible]# ansible-playbook playbook/user.yml

PLAY [test] ********************************************************************************

TASK [Gathering Facts] *********************************************************************
ok: [192.168.111.142]

TASK [test] ********************************************************************************
changed: [192.168.111.142]

TASK [debug] *******************************************************************************
ok: [192.168.111.142] => {
    "result": {
        "changed": true, 
        "cmd": [
            "echo", 
            "hello", 
            "world"
        ], 
        "delta": "0:00:00.003238", 
        "end": "2021-07-22 03:12:51.684552", 
        "failed": false, 
        "rc": 0, 
        "start": "2021-07-22 03:12:51.681314", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "hello world", 
        "stdout_lines": [
            "hello world"
        ]
    }
}

PLAY RECAP *********************************************************************************
192.168.111.142            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible playbook]# vim user.yml
---
- name: test
  hosts: 192.168.111.142
  become: yes
  tasks:
    - name: test
      command: "echo hello world"
      register: result

    - name: creat file
      shell: "echo {
    { result['stdout'] }} > /tmp/123"

[root@apache ~]# cat /tmp/123
hello world

group_vars < host_vars < playbook

机密(vault)

创建加密文件

[root@ansible ansible]# ansible-vault create secret.yml

查看加密文件

[root@ansible ansible]# ansible-vault view secret.yml

编辑加密文件

[root@ansible ansible]# ansible-vault edit secret.yml

加密文件

ansible-vault encrypt secret1.yml secret2.yml

解密文件

ansible-vault decrypt secret1.yml --output=secret1-decrypted.yml

更改加密文件密码

ansible-vault rekey secret.yml
ansible-vault rekey --new-vault-password-file=hehe secret.yml

你可能感兴趣的:(变量、机密)