管理变量 事实

管理变量
Ansible变量简介
Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。

通过变量,可以轻松地在Ansible项目中管理给定环境的动态值。例如:

要创建的用户
要安装的软件包
要重新启动的服务
要删除的文件
要从互联网检索的存档
命名变量
变量的名称必须以字母开头,并且只能包含字母、数字和下划线。
示例:web server:错误的变量名 web_server:正确的变量名

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

全局范围:从命令行或Ansible配置设置的变量
play范围:在play和相关结构中设置的变量
主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
如果在多个级别定义了相同名称的变量,则采用优先级别最高的变量。窄范围优先于更广泛的范围:由清单定义的变量将被playbook定义的变量覆盖,后者将被命令行中定义的变量覆盖。

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

在Playbook中定义变量

Playbook变量可以通过多种方式定义。一种常见的方式是将变量放在playbook开头的vars块中:

---
- hosts: 192.168.194.138
  vars:
     user: joee
     home: /home/joee

[root@localhost ~]# ansible-playbook -C h.yml 

PLAY [192.168.194.138] *********************************************************

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

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

也可以在外部文件中定义playbook变量。不使用playbook中的vars模块,可以改为使用vars_files指令,

---
- hosts: 192.168.194.138
 vars_files:
    - vars/users.yml

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

[root@localhost ~]# vim uo.yml 

- name: installs a package and prints  the result
  hosts: 192.168.194.139
  tasks:
  - name: install the package
    yum:
        name: httpd
        state: installed
    register: install_result

  - debug: var=install_result

运行该playbook时,debug模块用于将install_result注册变量的值转储到终端。

[root@localhost ~]# ansible-playbook -C uo.yml 

PLAY [installs a package and prints  the result] *******************************

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

TASK [install the package] *****************************************************
ok: [192.168.194.139]

TASK [debug] *******************************************************************
ok: [192.168.194.139] => {
    "install_result": {
        "changed": false,
        "failed": false,
        "msg": "",
        "rc": 0,
        "results": [
            "httpd-2.4.6-93.el7.centos.x86_64 providing httpd is already installed"
        ]
    }
}

PLAY RECAP *********************************************************************
192.168.194.139            : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
---
- name: Fact dump
  hosts: all
  tasks:
     - name: Print all facts
       debug:
         var: ansible_facts
  [root@localhost ~]# ansible-playbook hy.yml 
   

管理变量
Ansible可能需要访问密码或API密钥等敏感数据,以便能配置受管主机。

[root@localhost ~]# mkdir /opt/taobao
[root@localhost ~]# cd /opt/taobao
[root@localhost taobao]# touch playbook.yml
[root@localhost taobao]# touch inveentory
[root@localhost taobao]# ls
inveentory  playbook.yml
[root@localhost taobao]# mkdir files
[root@localhost taobao]# mkdir group_vars
[root@localhost taobao]# mkdir host_vars
[root@localhost taobao]# cd
[root@localhost ~]# tree /opt/taobao
/opt/taobao
├── files
├── group_vars
├── host_vars
├── inveentory
└── playbook.yml

3 directories, 2 files
[root@localhost ~]# 
创建加密文件
[root@localhost ~]# ansible-vault  create htt.yml
New Vault password: 
Confirm New Vault password: 
[root@localhost ~]# 

查看加密的文件

[root@localhost ~]# ansible-vault view htt.yml 
Vault password: 

编辑现有的加密文件
要编辑现有的加密文件,Ansible Vault提供了ansible-vault edit filename命令。此命令将文件解密为一个临时文件,并允许编辑。保存时,它将复制其内容并删除临时文件。

[root@localhost ~]# ansible-vault edit htt.yml 
Vault password:            // 编辑时需要密码

解密现有的文件

[root@localhost ~]# ansible-vault decrypt htt.yml --output=secretl-decrypted.yml
Vault password:

更改加密文件的密码


[root@localhost ~]# ansible-vault rekey htt.yml 
Vault password:       //当前密码
New Vault password:   //输入要更改的新密码
Confirm New Vault password:  //再次输入要更改的新密码
Rekey successful
管理事实

描述Ansible事实
Ansible事实是Ansible在受管主机上自动检测到的变量。事实中包含有与主机相关的信息,可以像play中的常规变量、条件、循环或依赖于从受管主机收集的值的任何其他语句那样使用。

为受管主机收集的一些事实可能包括:

主机名称
内核版本
网络接口
IP地址
操作系统版本
各种环境变量
CPU数量
提供的或可用的内存
可用磁盘空间
借助事实,可以方便地检索受管主机的状态,并根据该状态确定要执行的操作。例如:

可以根据含有受管主机当前内核版本的事实运行条件任务,以此来重启服务器
可以根据通过事实报告的可用内存来自定义MySQL配置文件
可以根据事实的值设置配置文件中使用的IPv4地址
通常,每个play在执行第一个任务之前会先自动运行setup模块来收集事实

[root@localhost ~]# vim h.yml 
- name: Fact dump
  hosts: 192.168.194.139
  tasks:
    - name: Print all facts
      debug:
        var: ansible_facts                         
事实变量
短主机名ansible_facts[‘hostname’]
完全限定域名ansible_facts[‘fqdn’]
IPv4地址ansible_facts[‘default_ipv4’][‘address’]
所有网络接口的名称列表ansible_facts[‘interfaces’]
/dev/vda1磁盘分区的大小ansible_facts[‘devices’][‘vda’][‘partitions’][‘vda1’][‘size’]
DNS服务器列表ansible_facts[‘dns’][‘nameservers’]
当前运行的内核版本ansible_facts[‘kernel’]

如果变量的值为散列/字典类型,则可使用两种语法来获取其值。比如:

ansible_facts['default_ipv4']['address']也可以写成ansible_facts.default_ipv4.address
ansible_facts['dns']['nameservers']也可以写成ansible_facts.dns.nameservers

[root@localhost ~]# ansible-playbook  h.yml 
PLAY [192.168.194.139] 
---
- hosts: 192.168.194.139
  tasks:
  - name: Prints various Ansible facts
    debug:
      msg: >
       The de fault IPv4 address of {{ ansible_facts.fqdn }}
       is {{ ansible_facts.default_ipv4.address }}
~                                                      *************************************************************************************************************************************************

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

TASK [Prints various Ansible facts] ************************************************************************************************************************************
ok: [192.168.194.139] => {
    "msg": "The de fault IPv4 address of localhost.localdomain is 192.168.194.139\n"
}

PLAY RECAP *************************************************************************************************************************************************************
192.168.194.139            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值