[Do374]ansible-nagivator考前整理
[Do374]ansible-nagivator考前整理
- 1. Ansible-Navigator 升级后的变化
- 1.1 主要变化
- 1.2 重大改变
- 2. ansible主要配置文件
- 2.1 .ansible-navigator.yml
- 2.2 ansible.cnf
- 3. 常用模块
- 3.1 file模块
- 3.2 copy模块
- 3.3 user模块和lookup模块
- 3.4 yum和yum_repository模块
- 3.5 systemd和service模块
- 4. collection和role
- 4.1 Collections(集合)
- 4.1.1 定义
- 4.1.2 特点
- 4.1.3 使用场景
- 4.2 Roles(角色)
- 4.2.1 定义
- 4.2.2 特点
- 4.2.3 使用场景
- 4.3 collection和role综合示例
- 4.3.1 创建collection
- 4.3.2 创建role
- 5. ansible-builder构建执行环境
- 5.1 示例
1. Ansible-Navigator 升级后的变化
从rhel7开始使用ansible已经7,8年了,之前的rhce8和DO447也都是考的ansible,ansible 2.9之后开始使用ansible-navigator但一直没系统的看过.这次正好有个ansible-navigator内部培训,系统的撸一遍顺带给CA加个等级.
Ansible Navigator 是 Red Hat 在 Ansible 2.9 之后推出的新工具,旨在提供更高效、更安全的自动化运维体验。
以下是 Ansible Navigator 相对于 Ansible Playbook 的主要变化和优势:
1.1 主要变化
-
容器化执行环境:
- Ansible Navigator 通过在容器中运行 Playbook,提供了一个隔离且一致的执行环境。这有助于确保 Playbook 在开发和测试环境中与生产环境的行为一致。
-
自动化执行环境(Automation Execution Environments, AEE):
- Ansible Navigator 允许用户选择不同的 AEE 来运行 Playbook。这些 AEE 是预配置的容器镜像,包含 Ansible Core、Ansible Content Collections 以及运行 Playbook 所需的所有依赖项。这为用户提供了更大的灵活性和可定制性。
-
改进的用户体验:
- Ansible Navigator 提供了一个更友好的用户界面和更丰富的命令行工具,使得编写、测试和调试 Playbook 更加容易。它还提供了更好的错误处理和调试信息,帮助用户更快地定位和解决问题。
1.2 重大改变
-
从命令行工具到集成开发环境(IDE):
- Ansible Navigator 不仅仅是一个命令行工具,它还提供了一个集成的开发环境,支持代码补全、语法高亮、调试等功能。这使得开发人员能够更高效地编写和维护 Playbook。
-
安全性增强:
- 通过使用容器化技术,Ansible Navigator 提供了更高的安全性。每个 Playbook 的执行都在独立的容器中进行,避免了潜在的安全风险。此外,Ansible Navigator 还支持更细粒度的权限控制和审计功能。
-
性能优化:
- Ansible Navigator 通过优化执行流程和使用更高效的通信机制,显著提高了 Playbook 的执行效率。这对于大规模自动化任务尤为重要,可以大幅减少任务执行时间。
2. ansible主要配置文件
2.1 .ansible-navigator.yml
- 获取文件例子
ansible-navigator settings --eei hub.lab.example.com/ee-supported-rhel8 -m stdout > 1.txt
- 配置 .ansible-navigator.yml(以下内容都来自上一条命令产生的1.txt中进行查询)
ansible-navigator:
execution-environment:
image: ee-supported-rhel8
pull:
policy: missing
2.2 ansible.cnf
- 配置参数获取方法
ansible-config init --disabled > ansible.cfg
- 常见配置及含义
以下是ansible.cnf
文件中常用配置项的表格格式:
参数 | 含义 | 例子 |
---|---|---|
inventory | 指定默认的库存文件路径 | inventory = inventory |
gathering | 指定默认是否收集服务器实时变量参数 | gathering=explicit |
forks | 并行执行任务的最大主机数 | forks = 45 |
become | 是否使用提升权限(如 sudo )执行任务 | become = True |
become_method | 提升权限的方法,常用的有 sudo 、su 等 | become_method = sudo |
become_user | 提升权限后使用的用户 | become_user = root |
become_ask_pass | 是否在提升权限时提示输入密码 | become_ask_pass = False |
roles_path | 定义 Ansible 查找角色的路径,多个路径用冒号分隔 | roles_path = ./roles:/usr/share/ansible/roles |
ask_pass | 是否在连接时提示输入 SSH 密码 | ask_pass = False |
ask_su_pass | 是否在以超级用户身份执行任务时提示输入密码 | ask_su_pass = False |
ask_vault_pass | 是否在访问加密文件时提示输入 Vault 密码 | ask_vault_pass = False |
host_key_checking | 是否检查远程主机的 SSH 主机密钥 | host_key_checking = True |
timeout | SSH 连接的超时时间(秒) | timeout = 10 |
ssh_args | 传递给 SSH 客户端的额外参数 | ssh_args = -o ControlMaster=auto -o ControlPersist=60s |
pipelining | 是否启用 pipelining 以减少 SSH 连接次数 | pipelining = True |
control_master | 是否启用 SSH 控制主连接 | control_master = auto |
connection_timeout | 持久连接的超时时间(秒) | connection_timeout = 30 |
keepalive | 持久连接的保持活动间隔(秒) | keepalive = 30 |
library | 自定义模块的路径 | library = ./library |
filter_plugins | 自定义过滤器插件的路径 | filter_plugins = ./filter_plugins |
action_plugins | 自定义动作插件的路径 | action_plugins = ./action_plugins |
log_path | Ansible 日志文件的路径 | log_path = /var/log/ansible.log |
remote_user | 默认的远程连接用户 | remote_user = ansible |
ansible_python_interpreter | 指定远程主机上使用的 Python 解释器路径 | ansible_python_interpreter = /usr/bin/python3 |
3. 常用模块
3.1 file模块
设置文件、符号链接或目录的属性。或者,删除文件、符号链接或目录。
以下是通过变量传递来创建目录
根据变量创建给定的目录
- name: Create a directory if it does not exist
ansible.builtin.file:
path: "{{ directory }}"
state: directory
when: directory is defined
3.2 copy模块
主要功能是将文件从本地或远程计算机复制到远程计算机上的某个位置。但考试常考的点是将某段内容填充到文件中
以下是通过tag来生成不同的文件
根据env文件创建文件及生成内容
play:
---
- name: Deploy content
hosts: dev
become: yes
vars_files:
- env.yml
tasks:
- block:
- name: create dir
file:
dest: "{{ directory }}"
state: directory
- name: alpha
ansible.builtin.copy:
content: 'The sun rises in the east and sets in the west'
dest: "{{ directory }}/{{ file }}"
tags: [ never, alpha ]
- name: beta
ansible.builtin.copy:
content: 'Which seasons do you like best?'
dest: "{{ directory }}/{{ file }}"
tags: [ never, beta ]
when:
- directory is defined
- file is defined
env: 这部分的变量也可以通过-e进行传递
file: "exam.txt"
directory: "/opt"
3.3 user模块和lookup模块
user模块用做管理用户帐户和用户属性。
lookup模块主要用来生成随机明文密码,并将其存储在给定文件路径的文件中。
根据给定的用户清单文件,在web服务器组中所有服务器上按要求创建用户.
---
- name: Create user from user_list.yml file.
become: true
hosts: webserver
vars_files:
- from user_list.yml
tasks:
- name: Add the user from user_list.yml.
ansible.builtin.user:
name: "{{ item.name }}"
comment: "{{ item.first | capitalize }} {{ item.middle | capitalize }} {{ item.last | capitalize }}"
uid: "{{ item.uid }}"
password: password: "{{ lookup('ansible.builtin.password', '{{ item.name }}_password length=14 chars=ascii_letters,digits,punctuation') }}"
loop: "{{ users }}"
3.4 yum和yum_repository模块
yum_repository模块用来配置yum仓库
yum模块用来安装或删除yum包
配置yum仓库并安装git包
- name: Add multiple repositories into the same file (1/2)
ansible.builtin.yum_repository:
name: BaseOS
description: BaseOS YUM repo
file: BaseOS
baseurl: https://hub.lab.example.com/pub/epel/$releasever/$basearch/BaseOS
gpgcheck: no
enabled: yes
- name: Add multiple repositories into the same file (2/2)
ansible.builtin.yum_repository:
name: AppStream
description: AppStream YUM repo
file: AppStream
baseurl: https://hub.lab.example.com/pub/epel/$releasever/$basearch/AppStream
gpgcheck: no
enabled: yes
- name: Install the latest version of Git
ansible.builtin.yum:
name: git
state: latest
3.5 systemd和service模块
这2个模块除了模块名不一样以外基本一样
如果生成文件成功,那么重启httpd服务
tasks:
- name: create index html
copy:
dest: /var/www/html/index.html
content: 'The sun is up,the sky is blue.Wake up old lazy man'
notyfi: restart httpd
handlers:
- name: restart httpd
ansible.builtin.systemd:
state: restarted
name: httpd
4. collection和role
4.1 Collections(集合)
4.1.1 定义
Ansible Collections 是一种打包和分发自动化内容(如模块、插件、角色等)的方式。它们允许开发者将相关的组件组织在一起,便于管理和分发。
4.1.2 特点
模块和插件:Collections 可以包含自定义模块和插件,扩展 Ansible 的功能。
角色:虽然 Collections 主要用于模块和插件,但也可以包含角色。
版本管理:每个 Collection 都有独立的版本号,便于管理和升级。
分发渠道:Collections 可以通过 Ansible Galaxy、私有仓库或其他方式进行分发。
4.1.3 使用场景
扩展功能:当你需要使用或分发自定义模块、插件时,Collections 是理想的选择。
组织复杂内容:对于包含多个模块和插件的复杂项目,Collections 可以提供更好的组织结构。
4.2 Roles(角色)
4.2.1 定义
Ansible Roles 是一种组织 Playbooks、任务、变量、文件和模板的方式,使得自动化内容更具可重用性和可维护性。角色通常用于定义特定功能或应用的配置和部署。
4.2.2 特点
结构化组织:角色有固定的目录结构,包括 tasks/、handlers/、templates/、files/、vars/ 等子目录。
可重用性:角色可以在不同的 Playbooks 和项目中重复使用。
易于共享:角色可以通过 Ansible Galaxy 分享和分发。
版本控制:角色可以有自己的版本号,便于管理和升级。
4.2.3 使用场景
标准化配置:当你需要标准化某些配置或部署流程时,角色非常有用。
简化 Playbooks:通过将重复的任务和配置抽象成角色,可以简化 Playbooks 的编写和维护。
4.3 collection和role综合示例
创建collection,包含以下文件:
- main.yml
- user.conf
collection 名为rhel.user
Role名为createuser
4.3.1 创建collection
在命令行中执行:
ansible-galaxy collection init rhel.user
4.3.2 创建role
在命令行中执行
cd rhel/user/
ansible-galaxy role init createuser --init-path roles
cp ../../main.yml roles/createuser/tasks/main.yml
cp ../../user.conf roles/createuser/files/
mkdir meta
echo 'requires_ansible: ">=2.90"' > meta/runtime.yml
ansible-galaxy collection build
执行以上命令后会生成文件: rhel-user-1.0.0.tar.gz
5. ansible-builder构建执行环境
ansible-builder 是一个用于构建 Ansible 运行环境的工具,它可以帮助你创建一个包含所有必要依赖项的 Podman 镜像。使用 ansible-builder create 命令生成的镜像主要用于以下几个方面:
- 隔离和一致性
隔离环境:通过创建一个独立的 Podman 镜像,你可以确保 Ansible 运行在一个隔离的环境中,不受宿主机或其他环境的影响。
一致性:镜像可以确保在不同的开发和生产环境中,Ansible 的运行环境是一致的,从而减少“在我机器上可以运行”的问题。 - 可移植性
跨平台:生成的 Podman 镜像可以在任何支持 Podman 的平台上运行,无论是本地开发环境、CI/CD 管道还是云服务提供商。
简化部署:通过使用 Podman 镜像,你可以简化 Ansible 运行环境的部署过程,无需在目标机器上手动安装和配置所有依赖项。 - 依赖管理
自动处理依赖:ansible-builder 会自动处理 Ansible 及其插件的依赖关系,确保所有必要的库和工具都包含在镜像中。
版本控制:你可以通过 builder.yml 文件明确指定所需的 Ansible 版本和插件版本,从而实现精确的版本控制。 - 安全性
最小化攻击面:通过仅包含必要的组件,可以减少镜像的攻击面,提高安全性。
审计和合规性:Podman 镜像可以更容易地进行审计和合规性检查,确保符合安全标准。 - 性能优化
缓存和优化:Podman 镜像可以利用缓存机制,加快构建和部署速度。此外,通过优化镜像大小和层数,可以提高运行时的性能。
5.1 示例
编辑execution-environment.yml
---
version: v1.0
build_arg_defaults:
EE_BASE_IMAGE: hub.lab.example.com/ee-29-rhel8:latest
EE_BUILDER_IMAGE: hub.lab.example.com/ansible-builder-rhel8:latest
dependencies:
system: python.yml
编辑python.yml
python3-ldap: [platform:rpm]
python36: [platform:rpm]
生成镜像并上传至hub
ansible-builder create
ansible-builder build -t hub.lab.example.com/ee-ansible-image:1.0
podman push hub.lab.example.com/ee-ansible-image:1.0
总结
ansible-builder create 命令生成的 Docker 镜像主要用于提供一个隔离、一致、可移植且安全的 Ansible 运行环境。通过这种方式,你可以简化环境配置和依赖管理,提高开发和部署的效率。
至此ex374大部分考试内容已经包含在内了