1. 在Ansible项目中,如何拆分Playbook,主Playbook如何导入其他Playbook
使用import_playbook,就像C语言中的引用函数,示例如下:
- name: Prepare the web server
import_playbook: web.yml可以使用import_tasks功能将任务文件静态导入playbook内的play中。导入任务文件时,在解析该playbook时将直接插入该文件中的任务。Playbook中的import_tasks的位置控制插入任务的位置以及运行多个导入的顺序。
- name: Install web server
hosts: webservers
tasks:
- import_tasks: webserver_tasks.yml导入任务文件时,在解析该playbook时将直接插入该文件中的任务。由于import_tasks在解析playbook时静态导入任务,因此对其工作方式有一些影响。
使用import_tasks功能时,导入时设置的when等条件语句将应用于导入的每个任务
无法将循环用于import_tasks功能
如果使用变量来指定要导入的文件的名称,则将无法使用主机或组清单变量
可以使用include_tasks功能将任务文件动态导入playbook内的play中。
- name: Install web server
hosts: webservers
tasks:
- include_tasks: webserver_tasks.yml在play运行并且这部分play到达前,include_tasks功能不会处理playbook中的内容。Playbook内容的处理顺序会影响包含任务功能的工作方式。
使用include_tasks功能时,包含时设置的when等条件语句将确定任务是否包含在play中
如果运行ansible-playbook --list-tasks以列出playbook中的任务,则不会显示已包含任务文件中的任务。将显示包含任务文件的任务。相比之下,import_tasks功能不会列出导入任务文件的任务,而列出已导入任务文件中的各个任务
不能使用ansible-playbook --start-at-task从已包含任务文件中的任务开始执行playbook
不能使用notify语句触发已包含任务文件中的处理程序名称。可以在包含整个任务文件的主playbook中触发处理程序,在这种情况下,已包含文件中的所有任务都将运行
2. 在Ansible项目中,在哪个目录中定义主机节点
会提供一个默认的管理清单inventory,即 /etc/ansible/hosts 文件。除默认文件外,我们还可以同时使用多个 Inventory 文件,也可以从动态源或云上拉取 Inventory 配置信息。
3. 在Ansible项目中,如何创建角色及相关目录,命令是什么
Ansible 提供了 ansible-galaxy 命令来生成角色的基本目录结构
ansible-galaxy init <role_name>角色创建后会生成标准的目录结构
roles/
└── role_name/
├── tasks/
├── handlers/
├── templates/
├── files/
├── vars/
├── defaults/
└── meta/
4. Playbook中如何指定执行角色及执行节点
- hosts: all
roles:
- role_namehosts 指定执行节点(可以是组名、IP 或通配符 all)
roles 指定要执行的角色
5. 角色中在哪个目录中编写task
所有任务(tasks)应编写在 tasks/main.yml 文件中。
roles/role_name/tasks/main.yml
6. 如何拆分task,主task中如何导入其他task
拆分 task 到多个文件中,并在 main.yml 中使用 import_tasks 引用:
- import_tasks: install_packages.yml
- import_tasks: configure_service.yml
7. 角色中的变量要在哪个目录中定义
默认变量放在:defaults/main.yml
自定义变量(优先级更高)放在:vars/main.yml
8. 变量的优先级是怎样的,如何强制覆盖变量
Ansible 变量优先级从低到高大致为:
defaults/main.yml(最低)vars/main.yml命令行传参
-eset_fact定义的变量(最高)
要强制覆盖变量,使用命令行参数
-e "var_name=value"
9. Ansible如何加密数据库密码
使用 ansible-vault 创建加密文件存储敏感信息:
ansible-vault create group_vars/all/vault.yml在该文件中定义加密变量,例如:
db_password: secure_password
10. 加密的密码如何解密传递给Playbook
执行 Playbook 时添加 --ask-vault-pass 参数手动输入密码:
ansible-playbook site.yml --ask-vault-pass或者使用 --vault-password-file 指定密码文件:
ansible-playbook site.yml --vault-password-file=vault_pass.txt梳理芋道项目部署的步骤和角色
1&2. 将整个项目分为几个角色
根据 yudao-cloud 项目的架构特点,可以将其部署相关的角色划分为以下几个:
基础设施管理员(Infrastructure Admin):负责准备服务器、网络环境、数据库等基础设施。
后端开发者/运维人员(Backend Developer / DevOps Engineer):负责部署后端服务(Spring Cloud 微服务),包括网关、配置中心、注册中心等。
前端开发者(Frontend Developer):负责部署前端页面(Vue.js 应用)。
3. 这些步骤你觉得应该如何拆分成多个task
使用role按服务挨个拆分