list - 将一个元素添加到字典 ansible / jinja 列表中
问题描述
我正在尝试将一个元素添加到字典列表中。
_gitlab_runner_config:
server:
url: "https://gitlab.mydomain.com"
api_token: "XXXXXXXXXXXXXXXXXX"
registration_token: "YYYYYYYYYYYYYYYY"
global:
listen_address: ":9200"
concurent: 5
check_interval: 15
session_server:
listen_address: "0.0.0.0:8093"
advertise_address: "{{ ansible_fqdn }}:8093"
session_timeout: 600
runners:
- description: "Test runner 1"
token: ""
tags:
- test1
locked: False
active: False
run_untagged: False
access_level: "not_protected"
maximum_timeout: "3600"
executor: "docker"
executor_config:
tls_verify: false
image: "test-image"
pull_policy: "always"
volumes:
cpus:
在另一个任务中,我注册了令牌值。Si,我想设置 gitlab_runner_config.runners.LIST_INDEX.token 的值
我尝试过:
- name: "Save runner token"
set_fact:
_gitlab_runner_config: "{{ _gitlab_runner_config|combine({'runners': {runner_index: {'token': _gitlab_server_registered.runner.token}}} ) }}"
但它会覆盖列表。
解决方案
感谢您的帮助和回答@vladimir-botka。但是我的问题更复杂,但是,我的错,我没有在上一篇文章中提供所有细节。
我有一个gitlab_runner_config
包含 runners 列表的字典_gitlab_runner_config.runners
。我已经在此列表中循环以注册每个跑步者,并且我得到一个令牌作为响应(每个跑步者将有一个不同的令牌)。我想将此令牌插入到字段中token
。整个 dictgitlab_runner_config
将用于模板化配置文件。
字典:
_gitlab_runner_config:
server:
url: "https://gitlab.mydomain.com"
api_token: "XXXXXXXXXXXXXXXXXX"
registration_token: "YYYYYYYYYYYYYYYY"
global:
listen_address: ":9200"
concurent: 5
check_interval: 15
session_server:
listen_address: "0.0.0.0:8093"
advertise_address: "{{ ansible_fqdn }}:8093"
session_timeout: 600
runners:
- description: "Test runner 1"
token: ""
tags:
- test1
locked: False
active: False
run_untagged: False
access_level: "not_protected"
maximum_timeout: "3600"
executor: "docker"
executor_config:
tls_verify: false
image: "test-image"
pull_policy: "always"
volumes:
cpus:
- description: "Test runner 2"
token: ""
tags:
- test2
locked: False
active: False
run_untagged: False
access_level: "not_protected"
maximum_timeout: "3600"
executor: "docker"
executor_config:
tls_verify: false
image: "test-image"
pull_policy: "always"
volumes:
cpus:
使用循环注册每个 runenr 的任务:
- name: "Registered runners"
include_tasks: register.yml
loop: "{{ _gitlab_runner_config.runners }}"
loop_control:
index_var: runner_index
注册.yml:
- name: "Register runner on gitlab server"
gitlab_runner:
api_url: "{{ _gitlab_runner_config.server.url }}"
api_token: "{{ _gitlab_runner_config.server.api_token }}"
registration_token: "{{ _gitlab_runner_config.server.registration_token }}"
description: "[{{ ansible_fqdn }}] {{ item.description }}"
state: "present"
active: " {{ item.active }}"
tag_list: "{{ item.tags }}"
run_untagged: "{{ item.run_untagged }}"
maximum_timeout: "{{ item.maximum_timeout }}"
access_level: "{{ item.access_level }}"
locked: "{{ item.locked }}"
validate_certs: "no"
register: _gitlab_server_registered
- name: Debug
debug:
msg: "Token to merge for runner id: {{ runner_index }} : {{ gitlab_server_registered.runner.token }}"
推荐阅读
- c++ - 从 Rcpp Catch 测试中访问 `inst/extdata` 的数据
- c# - 通过代理时连接超时
- android - NotifyItemRangeInserted 不会触发要回收的视图
- amazon-web-services - DynamoDBMapper 有条件地保存对象列表
- php - ACF 设置图库缩略图自定义大小
- javascript - 单击文档时如何关闭菜单(EventListener)
- php - 激活购买的主题时,Wordpress 管理员中断
- android - [[15.0.1,15.0.1]] 的各种其他库正在请求库 com.google.android.gms:play-services-base,但解析为 16.0.1
- r - `%between%` (data.table) 给了我一个奇怪的结果
- python - 无频率不允许seasonal_decompose