测验:角色与复用
创建角色时,如果把允许用户覆盖的值放在 vars/main.yml 中,会有什么问题?
- 其优先级过高,难以从外部覆盖,最终导致角色被复制并修改
- 变量名会全局暴露,与其他角色中的同名变量冲突
- 使用 vars 会使该角色的处理程序无法注册,导致 notify 不生效
- defaults 为空时,角色本身不会加载,执行会当场停止
为什么在角色内使用 template 模块时,只写文件名也能正常工作?
- 因为 Ansible 会搜索整个控制节点,找出同名文件
- 因为加载角色时模板会预先载入内存,并可按名称引用
- 因为角色的
templates/目录是约定好的搜索路径 - 因为相对路径会以运行命令时的当前工作目录为基准解析
关于 meta/main.yml 中的 dependencies,哪一项描述正确?
- 依赖角色会先执行;即使同一角色被声明多次,默认也只执行一次
- 依赖只负责变量继承,对执行顺序没有任何影响
- 主角色的任务先运行,依赖角色随后执行
- 依赖角色必须先通过
ansible-galaxy install下载才能运行
为什么要在角色变量名中添加角色名称作为前缀?
- 为了防止同时使用多个角色时,同名变量相互覆盖
- 因为只有带前缀的变量才会从
defaults/main.yml自动加载 - 因为角色应用顺序由前缀的字典顺序决定
- 因为 Ansible 会把没有前缀的角色变量判定为语法错误
希望用不同配置应用同一个角色两次。正确的方法是什么?
- 按配置拆成两个 Playbook,并分别使用不同变量文件运行
- 在 roles 段中调用同一个角色两次,并分别传入不同变量
- 中途使用
set_fact修改 defaults 值,然后再次运行角色 - 复制角色目录,创建两份只有名称不同的角色并分别应用
迁移到角色之后,仍然必须确认哪项性质?
- 执行时间是否比迁移前更短
- 第二次执行时是否为 changed=0
- 角色目录和文件数量是否减少
- Playbook 中的变量数量是否减少