首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用列表设置ntp服务器的可能的lineinfile

使用列表设置ntp服务器的可能的lineinfile
EN

Stack Overflow用户
提问于 2018-05-14 14:18:32
回答 1查看 497关注 0票数 0

我想向文件中添加一些行(它们是/etc/ntp.conf中的ntp服务器)。不幸的是,由于各种原因,我不能使用模板。所以我有一个这样的变量:

代码语言:javascript
运行
复制
vars:
- dns:
  - "{ 'region': 'syd', 'dns_servers': ['1.2.3.4', '2.3.4.5', '3.4.5.6' ] }"
  - "{ 'region': 'lon', 'dns_servers': ['2.2.2.2', '3.3.3.3', '4.4.4.4' ] }"
  - "{ 'region': 'ny',  'dns_servers': ['5.5.5.5', '6.6.6.6', '7.7.7.7' ] }"
- ntp:
  - { 'region': 'syd', 'ntp_servers': ['syd1.pool.ntp.org','syd2.pool.ntp.org','syd2.pool.ntp.org'] }
  - { 'region': 'lon', 'ntp_servers': ['lon1.pool.ntp.org','lon2.pool.ntp.org','lon2.pool.ntp.org'] }
  - { 'region': 'ny',  'ntp_servers': ['ntp1.pool.ntp.org','ntp2.pool.ntp.org','ntp2.pool.ntp.org'] }

所以这里有两个列表: dns和ntp。每个列表都包含一个区域->服务器映射字典。

我想遍历列表(在本例中是ntp列表),依次为每个ntp服务器添加一行。我发现了一个循环结构的loop_control参数,它允许我在ntp_servers列表中设置一个偏移量。

下面是我循环遍历字典中列表元素的一次尝试:

代码语言:javascript
运行
复制
- name: Replace ntp servers in /etc/ntp.conf
    debug:
      msg: "{{ item[loop_count] }}"
    loop: "{{ ntp['region']['ntp_servers'] }}"
    loop_control:
      index_var: loop_count
    when: item.region == region

(顺便说一句,您对使用'i‘作为循环计数器变量有何感想?)

我知道使用模板会容易得多,并且lineinfile是一种反模式,但我受到我控制范围之外的问题的约束。

我遇到的问题是,我想循环遍历ntp_servers数组的项,但我的循环遍历了ntp字典。我尝试了各种组合,但怀疑我使用了错误的数据结构--有人能给我一些建议吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-05-14 19:46:05

我看到了vars结构的一个问题。您应该从ntpdns变量声明中删除连字符:

vars: ntp:.....dns:.....

此外,dns列表元素中的双引号使元素被认为是字符串,ntp看起来没问题。

要在列表中获得ntp变量的所有9个ntp服务器,以便可以在循环中进行处理,您可以使用表达式(可以随意删除sum(start=[])和最终的list转换,然后将它们添加回来,以了解我使用它们的原因):

"{{ ntp | map(attribute='ntp_servers') | list | sum(start=[]) | list }}"

示例攻略:

代码语言:javascript
运行
复制
- hosts: localhost
  gather_facts: false
  vars:
    ntp:
      - { 'region': 'syd', 'ntp_servers': ['syd1.pool.ntp.org','syd2.pool.ntp.org','syd2.pool.ntp.org'] }
      - { 'region': 'lon', 'ntp_servers': ['lon1.pool.ntp.org','lon2.pool.ntp.org','lon2.pool.ntp.org'] }
      - { 'region': 'ny',  'ntp_servers': ['ntp1.pool.ntp.org','ntp2.pool.ntp.org','ntp2.pool.ntp.org'] }

  tasks:
    - name: print
      debug: 
        msg: "{{ item }}"
      with_items: 
        - "{{ ntp | map(attribute='ntp_servers') | list | sum(start=[]) | list }}"

输出:

代码语言:javascript
运行
复制
TASK [print] ********************************************************************************************************************************************************************************************************
ok: [localhost] => (item=None) => {
    "msg": "syd1.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "syd2.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "syd2.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "lon1.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "lon2.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "lon2.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "ntp1.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "ntp2.pool.ntp.org"
}
ok: [localhost] => (item=None) => {
    "msg": "ntp2.pool.ntp.org"
}

PLAY RECAP
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50324075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档