1.Ansible变量是什么,有什么优点?
答:Ansible 变量是在 Ansible 自动化流程中用于存储和传递数据的实体。
优点: 提升可维护性:将配置信息集中以变量形式管理,当需要修改参数时,无需在大量任务中逐一调整,只需更新变量值即可全局生效。
降低维护成本:通过变量可实现代码复用,同一个 playbook 能通过不同变量值适配多种场景,减少重复开发。
增强场景适应性:能轻松应对开发、测试、生产等出现的差异,为不同环境配置专属变量值。
2.怎么定义Ansible变量?
答:(1)在清单文件中定义
定义主机变量:在清单文件中,针对特定主机添加变量定义。
定义主机组变量:对一组主机定义共同的变量,在 Inventory 文件中使用[组名:vars]的格式。
(2)在 Playbook 中定义
在vars部分定义:在 Playbook 里,每个play可以包含一个vars部分,用于定义只在该play内生效的变量。
(3)在变量文件中定义
可以创建独立的 YAML 格式变量文件,便于管理和复用变量。
创建主机组变量文件:在group_vars目录下,创建与主机组同名的 YAML 文件,文件中的变量会应用到对应的主机组。
创建全局变量文件:在group_vars目录下,创建名为all.yml的文件,其中定义的变量会应用到 Inventory 中的所有主机
Playbook引用变量时将变量名称放在双括号({{ }})内。
3. 主机变量与组变量的区别?
答:(1)主机变量:仅作用于单个特定主机,在清单中直接跟在主机名后定义,或在host_vars目录下对应主机名的文件中定义。用于为主机设置独特属性。
(2)组变量:作用于整个主机组内的所有主机,通过[组名:vars]在 Inventory 中定义,或在group_vars目录下对应组名的文件中定义。用于统一配置一组主机的共性参数。
优先级:若主机变量与组变量同名,主机变量会覆盖组变量,因为更具体的主机配置优先级更高。
4.将字典用作变量怎么引用?
答:是一种将相关联的多个值组织在一起的方式。字典通过key: value的结构存储数据,其中每个key(键)对应一个value(值),便于对一组相关变量进行集中管理和引用。
5.如何使用已注册变量捕获命令输出?
答:在play的task使用Register语句可以捕获命令、模块的输出结果输出会保存到一个变量中,添加debug模块,运行play时debug模块用于将变量的值转储到终端。
6.使用 Ansible Vault 的优点是什么?
答:(1)加密敏感数据(密码、密钥等),防止明文泄露
(2)与 Ansible 无缝集成,运行时自动解密,不影响流程
(3)可灵活加密单个文件或部分内容,兼顾安全与易用
(4)支持多种密码管理方式,适配自动化场景
(5)保障团队协作时敏感信息的安全共享
7. Ansible Vault 加密步骤?
答:(1)加密文件:使用ansible-vault encrypt 文件名命令对包含敏感变量的文件进行加密,加密后文件会被加上密码保护。
(2)编辑加密文件:若要修改加密文件内容,可使用ansible-vault edit 文件名命令,输入密码后进入编辑模式。
(3)解密文件:使用nsible-vault decrypt filename命令可将加密文件解密为明文文件。
(4)更改加密文件密码:使用ansible-vault decrypt filename命令更改加密文件密码,需提供原始密码与新密码。
在 playbook 中使用加密变量文件 :
当运行引用加密变量文件的 playbook 时,若在命令行执行,可使用--ask-vault-pass参数,Ansible 会提示输入 Vault 密码;也可将密码存储在文件中,通过--vault-password-file 密码文件路径参数指定,实现自动化的密码输入,方便在自动化流程中使用加密变量。
8. Ansible 事实 收集的 事实类型 包括哪些?
答:Ansible 会收集大量受管主机的信息,包括硬件信息(如 CPU 型号、内存大小等)、网络信息(如网络接口、IP 地址、路由表等)、操作系统信息(如操作系统类型、版本、内核版本等)、系统服务信息(如已安装的服务及其状态等)等,这些事实为 Ansible 自动化操作提供了丰富的基础数据。
9.Play中如何收集事实信息?
答:(1)默认自动收集
Ansible Play 默认会在执行任务前,通过ansible.builtin.setup模块自动收集受管主机的事实信息,可直接在任务中以变量引用(如{{ ansible_facts['hostname'] }})。
(2)关闭事实收集:在 Play 中设置gather_facts: no,适用于不需要事实信息或希望提升执行效率的场景。
(3)手动收集事实:若已禁用自动收集,可在任务中通过setup模块手动收集。
(4)收集事实的子集:可通过ansible.builtin.setup模块的gather_subset参数,若只想收集特定类型的事实,比如硬件事实,可将gather_subset设置为hardware。要是想收集除特定子集外的所有事实,就在子集名称前添加感叹号!(!hardware)。
10.如何创建自定义事实?
答:(1)文件方式:在受管主机的/etc/ansible/facts.d/目录下,创建 INI 或 JSON 格式的事实文件(文件名以.fact结尾),定义键值对数据。Ansible 收集事实时会自动读取,可通过ansible_facts['键名']引用。
(2)模块方式:在 Playbook 中使用set_fact模块动态定义,语法为set_fact: 变量名=值,支持条件判断,变量可直接在后续任务中引用。