automation - Ansible 在标签选项中使用变量
问题描述
我的 ansible tasks/main.yml 看起来像这样的 atm:
---
- name: Create Directories
file:
path: "{{ item.path }}"
recurse: yes
owner: "{{ item.owner | default(\"nobody\") }}"
group: "{{ item.group | default(\"nogroup\") }}"
state: directory
with_items:
- "{{ app_dirs }}"
- name: Move Templates
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: "{{ item.owner | default(\"nobody\") }}"
group: "{{ item.group | default(\"nogroup\") }}"
with_items: "{{ app_templates }}"
- name: Move Dependencies
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: "{{ item.owner | default(\"nobody\") }}"
group: "{{ item.group | default(\"nogroup\") }}"
with_items: "{{ app_dependencies }}"
我必须将几个依赖项和模板移动到远程机器上。现在我需要添加一些条件或标签,以便我们可以决定是要复制所有依赖项还是只复制其中的一些。我试过这样:
- name: Create Directories
file:
path: "{{ item.path }}"
recurse: yes
owner: "{{ item.owner | default(\"nobody\") }}"
group: "{{ item.group | default(\"nogroup\") }}"
state: directory
tags: "{{ item.tag }}"
with_items:
- "{{ app_dirs }}"
但是 Ansible 会抛出这个错误:ERROR!“项目”未定义。可能标签选项必须在“文件”块内,因此with_items知道item.tag的来源。但是标签选项必须是这样的。有没有办法为标签选项使用变量?我实际上很喜欢这个 tasks/main.yml 的结构,它更容易在一个地方处理所有变量。我的另一个想法是使用以下条件创建块:
tasks:
- name: Install app1
block:
- name: Create Directory
file:
....
- name: Move Templates
template:
....
- name: Move Dependencies
copy:
....
tags:
- app1
- name: Install app2
block: .....
使用这种方法,我不能像以前一样将所有变量存储为字典。如果没有其他方法,我将使用块方法,但我希望有人有更好的主意。提前致谢!
解决方案
推荐阅读
- r - 自定义API函数将国家代码添加到R中的数据框
- r - R ggplot日期时间长轴和短轴中断未对齐
- ios - Objective-C 如何格式化字符串从 09:00 到 9 和 09:00 到 9:30 的所有时间?
- postgresql - 使用 Postgres 在 Google App Engine 上运行 API
- javascript - 检查类是否是类的子类而不实例化
- c# - char8 和 uchar8 等效
- flutter - Flutter - 无法在 android 上安装 apk
- linkedin-api - 如何从 LinkedIn Voyager API 获取已读回执?
- c++ - 调用函数指针时 CUDA 内核崩溃
- ruby-on-rails - Rails 新手尝试将月份和年份从表单传递到 url