ansible定义变量和管理事实

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: ansible定义变量和管理事实

一、ansible playbook

1.编写Playbook:具备两个play, 每个Play具备两个任务

[root@good ~]# vim first_playbook.yml

PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [start httpd server] ******************************************************
changed: [rhce]
TASK [stop firewalld server] ***************************************************
ok: [rhce]
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [file] ********************************************************************
ok: [rhce]
TASK [user] ********************************************************************
changed: [rhce]
PLAY RECAP *********************************************************************
rhce                       : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

2.在play中定义变量: play_var = play_var -> 使用debug模块输出

[root@good ~]# vim first_playbook.yml
[root@good ~]# ansible-playbook first_playbook.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [user] ********************************************************************
changed: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce                       : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

3.在文件中定义变量: file_var = file_var -> 使用debug模块输出

[root@good ~]# vim var.yml

[root@good ~]# ansible-playbook var.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [user] ********************************************************************
changed: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce                       : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

4.在清单文件中定义主机变量和主机组变量:

inventory_host_var = inventory_host_var -> 使用debug模块输出

[root@good ~]# vim .ansible/inventory

[root@good ~]# vim hostname.yml

[root@good ~]# ansible-playbook hostname.yml -C
PLAY [inventory_host_var] ******************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

inventory_group_var = inventory_group_var -> 使用debug模块输出

[root@good ~]# ansible-playbook hostname.yml -C
PLAY [inventory_group_var] ******************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

5.在host_vars和group_vars中定义文件:在文件中定义变量使用debug模块输出(要求定义单个变量,数组变量,和字典变量)

例如,假设下列代码片段:
user1_first_name: Bob
user1_last_name: Jones
user1_home_dir: /users/bjones
user2_first_name: Anne
user2_last_name: Cook
user2_home_dir: /users/acook
这将可以改写成名为users的数组:
users:
  bjones:
    first_name: Bob
    last_name: jones
    home_dir: /users/bjones
  acook:
    first_name: Anne
    last_name: Cook
    home_dir: /users/acook
然后可以使用以下变量来访问用户数据:
# Returns 'Bob'
users.bjones.first_name
# Returns '/users/acook'
users.acook.home_dir

二、vault加密

1.创建加密文件(注意提供密码的方式:键盘输入,文件读取)

#ansible-vault create  secret.yml

2.加密已有文件

#ansible-vault  encrypt secret.yml secret1.yml

3.解密文件

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

4.使用--vault-id选项来对已有文件进行加密

ansible-vault encrypt --vault-id  secret2.yml secret3.yml

三、事实:facts

1.使用debug模块输出:收集事实的hostname, default_address, fqdn, kernel

hostname

[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "hostname rhce"
}
PLAY RECAP *********************************************************************
rhce                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

kernel

[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "kernel 4.18.0-147.el8.x86_64"
}
PLAY RECAP *********************************************************************
rhce                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

fqdn

[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "msg": "fqdn rhce"
}
PLAY RECAP *********************************************************************
rhce                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

default_address

[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
    "default_address": "VARIABLE IS NOT DEFINED!"
}
PLAY RECAP *********************************************************************
rhce                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

2.关闭事实:两种方式:

针对单个play的关闭

针对所有play的关闭

要为play禁用事实收集功能,可将gather_facts关键字设置为no

[root@good ~]# ansible-playbook fact.yml -C
PLAY [gather_facts] ************************************************************
TASK [debug] *******************************************************************
ok: [rhce] => {
    "ansible_facts": {}
}
PLAY RECAP *********************************************************************
rhce                       : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

3.自定义事实:使用两种方式:INI和json方式(注意格式)

如果自定义事实文件保存在/etc/ansible/facts.d目录中,ansible可以找到该事实

文件的扩展名必须为.fact ,采用INI或JSON格式的纯文本文件


以下是采用INI格式编写的静态自定义事实文件。INI格式的自定义事实文件包含由一个部分定义的顶层值,后跟用于待定义的事实的键值对:

[packages]
web_package = httpd
db_package = mariadb-server
[users]
user1 = joe
user2 = jane

同样的事实可能以JSON格式提供。以下JSON事实等同于以上示例中INI格式指定的事实。JSON数据可以存储在静态文本文件中,或者通过可执行脚本输出到标准输出:

{
  "packages": {
    "web_package": "httpd",
    "db_package": "mariadb-server"
  },
  "users": {
    "user1": "joe",
    "user2": "jane"
  }
}
目录
相关文章
|
运维 Kubernetes 网络安全
Ansible自动化运维工具之主机管理与自定义配置文件(2)
Ansible自动化运维工具之主机管理与自定义配置文件(2)
143 0
|
4月前
|
JSON 数据格式 索引
Ansible fact变量与魔法变量
Ansible fact变量与魔法变量
65 6
|
4月前
|
存储 网络安全 数据安全/隐私保护
Ansible的变量
Ansible的变量
49 6
|
缓存 运维 监控
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
379 0
|
应用服务中间件 nginx
Ansible模块——软件包管理模块
Ansible模块——软件包管理模块
138 0
|
存储 缓存 监控
【2023】ansible-variables变量详解
【2023】ansible-variables变量详解
135 0
Ansible 自定义变量与 role 默认变量的合并方法
如果你遇到 failed to combine variables, expected dicts but got a 'NoneType' and a 'dict' 这样的报错,你可以看看本文。
327 0
|
存储 JSON 缓存
ansible学习之旅(facts变量)
ansible学习之旅(facts变量)
182 0
ansible学习之旅(初识变量)
ansible学习之旅(初识变量)
82 0
|
Ubuntu 网络安全 Windows
Ansible 管理windows
Ansible 管理windows