1
2
3
4
5
作者:李晓辉

微信联系:Lxh_Chat

联系邮箱: 939958092@qq.com

你可以为 ansible-navigator 创建一个配置文件(或设置文件),来覆盖默认的配置选项。如果你希望使用与默认环境不同的自动化执行环境,并且不想每次运行 ansible-navigator 命令时都手动输入正确的 --eei 选项,那这个配置文件就非常有用。设置文件可以使用 JSON 或 YAML 格式,方便你灵活地定制配置。

不同设置⽂件的优先级

以下是配置文件的优先级,从高到低:

  1. 如果设置了 ANSIBLE_NAVIGATOR_CONFIG 环境变量,将使用该变量指定位置的配置文件。
  2. 当前 Ansible 项目目录中的 ansible-navigator.yml 文件。
  3. 用户主目录下的 ~/.ansible-navigator.yml 文件(注意文件名前有一个点)。

其中,推荐使用项目目录和家目录的配置文件,原因如下:

  1. 项目目录中的配置文件可以随着 Ansible playbook 等项目文件一起纳入版本控制,方便管理和共享。
  2. 如果无法使用项目目录,家目录中的配置文件是一个不错的备选方案,这样你就可以在任何地方运行 ansible-navigator 命令,而无需担心配置问题。

⽣成设置⽂件

你可以使用 ansible-navigator settings 命令来生成设置文件:

  1. 使用 --sample 选项运行该命令,命令会以 YAML 格式输出示例的 ansible-navigator 配置文件,文件中会包含各种注释。

  2. 使用 --effective 选项运行该命令,命令会输出与 ansible-navigator 当前有效配置匹配的配置文件,这个文件将不包含注释。

注意

如果你把 ansible-navigator settings 命令的输出重定向到当前目录下的 ansible-navigator.yml 文件,ansible-navigator 命令会尝试使用这个配置文件,最后可能会失败。为了避免这种情况,最好将命令的输出重定向到其他目录下的文件,比如 /tmp/ansible-navigator.yml,或者当前目录下一个不同名称的文件,例如 sample.yml

生成样例文件

注意

如果在导出样例文件时,指定了-eei参数使用特定镜像时,你生成的ansible-navigator.yml ⽂件前面可能会有一段镜像下载的内容,这个需要删除,不然此文件将无效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@workstation ~]# ansible-navigator settings --sample --eei hub.lab.example.com/ee-supported-rhel8 > ansible-navigator.yaml-1
Trying to pull hub.lab.example.com/ee-supported-rhel8:latest...
Getting image source signatures
Copying blob afea8ac1fb6f skipped: already exists
Copying blob 85461b6812d9 skipped: already exists
Copying blob 1e8637dd83cb skipped: already exists
Copying blob ac278321f2bd skipped: already exists
Copying blob 431069e2d54d skipped: already exists
Copying config b1eaaee1b7 done
Writing manifest to image destination
Storing signatures

[root@workstation ~]# head -n 20 ansible-navigator.yaml-1
b1eaaee1b70ed29a40dc3848a6a75119bee65e11c82f54bd7c600f226284e136
--------------------------------------------------------------------------------
Execution environment image and pull policy overview
--------------------------------------------------------------------------------
Execution environment image name: hub.lab.example.com/ee-supported-rhel8:latest
Execution environment image tag: latest
Execution environment pull arguments: None
Execution environment pull policy: tag
Execution environment pull needed: True
--------------------------------------------------------------------------------
Updating the execution environment
--------------------------------------------------------------------------------
Running the command: podman pull hub.lab.example.com/ee-supported-rhel8:latest
---
ansible-navigator:
# ansible:
# config:
# # Help options for ansible-config command in stdout mode
# help: False
# # Specify the path to the ansible configuration file

获取当前正在生效的配置文件

如果我们没有配置文件,也有一些默认值,我们可以用默认值来生成配置文件,将其调整为我们预期的参数即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@workstation ~]# ansible-navigator settings --effective --eei hub.lab.example.com/ee-supported-rhel8 -m stdout --pp never > ansible-navigator.yaml-2

[root@workstation ~]# head -n 20 ansible-navigator.yaml-2
---
ansible-navigator:
ansible:
config:
help: false
doc:
help: false
plugin:
type: module
inventory:
help: false
playbook:
help: false
ansible-builder:
help: false
workdir: /root
app: settings
collection-doc-cache-path: /root/.cache/ansible-navigator/collection_doc_cache.db
color:
enable: true

常用参数分享

我们注意到刚才的命令很长,--eei --pp -m,这些其实都包含在配置文件中,只要我们在配置文件中写好,执行命令就很简单了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[root@workstation ~]# cat ansible-navigator.yaml-2
---
ansible-navigator:
ansible:
config:
help: false
doc:
help: false
plugin:
type: module
inventory:
help: false
playbook:
help: false
ansible-builder:
help: false
workdir: /root
app: settings
collection-doc-cache-path: /root/.cache/ansible-navigator/collection_doc_cache.db
color:
enable: true
osc4: true
editor:
command: vi +{line_number} {filename}
console: true
exec:
command: /bin/bash
shell: true
execution-environment:
container-engine: podman
enabled: true
image: hub.lab.example.com/ee-supported-rhel8:latest
pull:
policy: never
images:
details:
- everything
logging:
append: true
file: /root/ansible-navigator.log
level: warning
mode: stdout
playbook-artifact:
enable: true
save-as: '{playbook_dir}/{playbook_name}-artifact-{time_stamp}.json'
settings:
effective: true
sample: false
schema: json
sources: false
time-zone: UTC

ansible

  • config: 设置 ansible config 功能是否启用帮助信息,false 表示禁用帮助。

    • path: /ansible.cfg

execution-environment

  • container-engine: 指定容器引擎为 podman

  • enabled: 启用自动化执行环境。

  • image: 指定容器镜像为 hub.lab.example.com/ee-supported-rhel8:latest

  • environment-variables:

    • set:
      • ANSIBLE_CONFIG: /home/student/ansible.cfg
  • pull:

    • policy: 设置拉取策略为 never,即不拉取新镜像。

mode

  • 指定 ansible-navigator 的运行模式为 stdout,即标准输出模式。

playbook-artifact

  • enable: 启用 playbook 工件保存。

  • save-as: 指定保存路径格式为 {playbook_dir}/{playbook_name}-artifact-{time_stamp}.json

editor

  • command: 设置默认编辑器为 vi,并在指定行打开文件。

  • console: 启用控制台模式。

通过以上内容,我们大概了解到了ansible-navigator.yml不同位置的优先级情况以及如何来生成ansible-navigator.yml,也了解到ansible-navigator.yml文件中常见参数的含义。