将嵌套的 Ansible 变量传递到剧本清单文件中
Pass nested Ansible vars into playbook inventory file
我想知道是否可以在 运行 设置一个 ansible-playbook 时传入 --extra-vars
以便将变量注入我正在使用的清单文件 运行 我的剧本。
示例剧本
- name: "Create CI pipeline"
hosts: all
tasks:
- name: "Create PreCodeReview jobs"
tags:
- jenkins
- jenkins-jobs
when: jenkins is defined
local_action:
module: jenkins_job
url: "{{ jenkins.url }}"
user: "{{ jenkins.username }}"
token: "{{ jenkins.access_token }}"
name: "{{ jenkins.component.name }}_PreCodeReview"
config: "{{ lookup('template', '../templates/jenkins/add-pre-code-config.xml') }}"
- name: "Create Release jobs"
tags:
- jenkins
- jenkins-jobs
when: jenkins is defined
local_action:
module: jenkins_job
url: "{{ jenkins.url }}"
user: "{{ jenkins.username }}"
token: "{{ jenkins.access_token }}"
name: "{{ jenkins.component.name }}_Release"
config: "{{ lookup('template', '../templates/jenkins/add-release-config.xml') }}"
我希望在 运行 时传入 jenkins.component.name
,我已尝试使用以下 jenkins.component.name=<name>
和 "{'jenkins':{'component':{'name':<name>}}}"
这没有用。
这是我用来运行剧本
的清单
样品库存
all:
hosts:
local:
ansible_host: 127.0.0.1
ansible_connection: local
project_name: magic_proj
jenkins:
url: https://my/jenkins
username: admin
access_token: f96hjfg54354b3e8512d491fb471fd
keep_builds: 20
components:
- name: <repo_name>
repository: <repo_url>
I am looking to pass in jenkins.component.name
at run time, I have attempted this with the following jenkins.component.name=<name>
and "{'jenkins':{'component':{'name':<name>}}}"
你非常接近:--extra-vars
想要 key=value
对,JSON,YAML,或 @./some/file
,as specified in the fine manual
很遗憾,您提供的是Python语法,而不是JSON语法;如果您将命令行更改为 --extra-vars '{"jenkins":{"component":{"name":<name>}}}'
更新:
然而,即使这样也有一个问题:对于 dict
结构,ansible 似乎不会 merge inventory dict
s 和 extra-var
dict
s,因此您需要选择 "flat" extra-var
名称(例如 almost 您还尝试过的名称:--extra-vars '{"jenkins_component_name": ""}'
)或手动合并剧本中的结构(可能通过 pre_tasks:
或类似的方式)
我想知道是否可以在 运行 设置一个 ansible-playbook 时传入 --extra-vars
以便将变量注入我正在使用的清单文件 运行 我的剧本。
示例剧本
- name: "Create CI pipeline"
hosts: all
tasks:
- name: "Create PreCodeReview jobs"
tags:
- jenkins
- jenkins-jobs
when: jenkins is defined
local_action:
module: jenkins_job
url: "{{ jenkins.url }}"
user: "{{ jenkins.username }}"
token: "{{ jenkins.access_token }}"
name: "{{ jenkins.component.name }}_PreCodeReview"
config: "{{ lookup('template', '../templates/jenkins/add-pre-code-config.xml') }}"
- name: "Create Release jobs"
tags:
- jenkins
- jenkins-jobs
when: jenkins is defined
local_action:
module: jenkins_job
url: "{{ jenkins.url }}"
user: "{{ jenkins.username }}"
token: "{{ jenkins.access_token }}"
name: "{{ jenkins.component.name }}_Release"
config: "{{ lookup('template', '../templates/jenkins/add-release-config.xml') }}"
我希望在 运行 时传入 jenkins.component.name
,我已尝试使用以下 jenkins.component.name=<name>
和 "{'jenkins':{'component':{'name':<name>}}}"
这没有用。
这是我用来运行剧本
的清单样品库存
all:
hosts:
local:
ansible_host: 127.0.0.1
ansible_connection: local
project_name: magic_proj
jenkins:
url: https://my/jenkins
username: admin
access_token: f96hjfg54354b3e8512d491fb471fd
keep_builds: 20
components:
- name: <repo_name>
repository: <repo_url>
I am looking to pass in
jenkins.component.name
at run time, I have attempted this with the followingjenkins.component.name=<name>
and"{'jenkins':{'component':{'name':<name>}}}"
你非常接近:--extra-vars
想要 key=value
对,JSON,YAML,或 @./some/file
,as specified in the fine manual
很遗憾,您提供的是Python语法,而不是JSON语法;如果您将命令行更改为 --extra-vars '{"jenkins":{"component":{"name":<name>}}}'
更新:
然而,即使这样也有一个问题:对于 dict
结构,ansible 似乎不会 merge inventory dict
s 和 extra-var
dict
s,因此您需要选择 "flat" extra-var
名称(例如 almost 您还尝试过的名称:--extra-vars '{"jenkins_component_name": ""}'
)或手动合并剧本中的结构(可能通过 pre_tasks:
或类似的方式)