Ansible-如何在列表上循环并进行拆分,然后将结果分配给另一个列表



我有一个可靠的列表变量

- sites:
- x.domain.com.ex
- y.domain.com.ex
- z.domain.com.ex

我需要做两个变量,如下所示:第一级列表xyz而另一个域名只有域名"的其余部分;domain.com.ex";

非常感谢您的帮助,谢谢。

例如,将以下声明放入vars

hostnames: "{{ sites|map('split', '.')|
map('first')|list }}"
domains: "{{ sites|map('reverse')|
map('splitext')|
map('first')|
map('reverse')|list }}"

给出(节略(

hostnames:
- x
- y
- z
domains:
- domain.com.ex
- domain.com.ex
- domain.com.ex

测试的完整剧本示例

- hosts: localhost
vars:
sites:
- x.domain.com.ex
- y.domain.com.ex
- z.domain.com.ex
hostnames: "{{ sites|map('split', '.')|
map('first')|list }}"
domains: "{{ sites|map('reverse')|
map('splitext')|
map('first')|
map('reverse')|list }}"
tasks:
- debug:
var: hostnames
- debug:
var: domains

Q:";我需要第二个变量">

A: 使用Python切片。例如,拆分并展平所有项目

s: "{{ sites|map('split', '.')|flatten }}"

给出

s:
- x
- domain
- com
- ex
- y
- domain
- com
- ex
- z
- domain
- com
- ex

然后,选择第二个变量,步骤为4

sites_1: "{{ s[1::4] }}"

给出

sites_1:
- domain
- domain
- domain

通过这种方式,您可以创建任何您想要的组合。例如,

sites_domns: "{{ s[1::4]|zip(s[2::4])|zip(s[3::4])|
map('flatten')|map('join', '.')|list }}"

给出

sites_domns:
- domain.com.ex
- domain.com.ex
- domain.com.ex

请参见了解切片。

最新更新