2 题: Ansible 1.6包含with_items已弃用

在...创建的问题 Tue, Jul 8, 2014 12:00 AM

所以看起来这个功能已被弃用了,我真的不明白为什么,Ansible CTO说我们应该使用with_nested而老实说我不知道​​怎么做,

这是我的playboook:

 
- hosts: all
  user: root
  vars: 
   - sites:
     - site: site1.com
       repo: ssh://hg@bitbucket.org/orgname/reponame
       nginx_ssl: true;
       copy_init:
        - path1/file1.txt
        - path2/file2.php
        - path2/file3.php

     - site: site2.net
       repo: ssh://hg@bitbucket.org/orgname/reposite2

     - site: site4.com
       repo: ssh://hg@bitbucket.org/orgname/reposite3
       copy_init:
        - path2/file2.php

  tasks:
     - name: Bootstrap Sites
      include: bootstrap_site.yml site={{item}}

尝试在Ansible 1.6.6中执行此操作时出现错误消息:

  

错误:[DEPRECATED]:include + with_items是已删除的已弃用功能。请更新你的剧本。

如何将此剧本转换为适用于此ansible版本的内容?

    
17
  1. 我错过了什么。哪里是with_itemsitem来自哪里?
    2014-11-05 10:49:35Z
  2. 醇>
    2个答案                              2 跨度>                         

    不幸的是,没有直接替代品。你可以做的一些事情:

    • 将列表传递给包含的文件并在那里进行迭代。在你的剧本中:

       
      vars:
          sites:
             - site1
             - site2
      tasks:
          - include: bootstrap_site.yml sites={{sites}}
      

      在bootstrap_site.yml中:

       
      - some_Task: ...
        with_items: sites
      
      - another_task: ...
        with_items: sites
      
      ...
      
    • 将bootstrap_site重写为模块(在python,bash,等等),将其放入你的剧本旁边的library目录。然后你可以这样做:

       
      - bootstrap_site: site={{item}}
        with_items: sites
      

    更新: Ansible V2已经退出并带回了include + with_items 组合循环

        
    21
    2018-01-24 22:50:41Z
    1. 谢谢,实际上我已经尝试继续使用第一个解决方案,但是它过于繁琐,因为已经循环通过子项目的任务,并且嵌套循环过于复杂,我我会喜欢第二个解决方案!看起来很棒,但是......我不能在ansible本身做到这一点吗?和...顺便说一句,任何有关为何被弃用的见解?
      2014-07-14 16:52:54Z
    2. 它已被弃用,因为据说人们主要使用库存变量,出于实施原因,他们不能像这样使用。因此,为避免混淆(为什么有些变量可以工作,而有些变量没有),他们只是删除了这个功能在你的情况下使用with_nested不实用吗?关于在YAML中编写模块,我不敢这样做。
      2014-07-16 07:52:16Z
    3. 好的,谢谢,它非常令人沮丧似乎是一个非常简单的功能,考虑到你可以用ansible做的事情的数量,这看起来像琐碎的,但我猜那是因为我不完全了解引擎盖下的内容。 with_nested用于3或4级子阵列要复杂得多,所以我最终选择了另一个解决方案,每个数组项目执行1个包含任务,不是最干净但工作...
      2014-07-16 14:16:46Z
    4. 感谢您的更新。很高兴看到它回来了。删除这么多人使用的功能首先是一个很大的错误。
      2015-03-16 10:29:38Z
    5. 醇>

    我找到了一个答案来规避blahblah弃用的消息......正如原帖中所要求的那样。

    我添加了一个文件vars /filenames.yml:

     
      filenames:
      - file1
      - file2
      - file3
    

    接下来,我在剧本的开头阅读了这些名字:

     
      - name: read filenames
        include_vars: vars/filenames.yml
    

    然后,我可以在以后使用它们:

     
      - name: Copy files 1
        copy: src=/filesrc1/{{ item }} dest=/filedest1/{{ item }} owner=me group=we
        with_items: filenames
    

    依旧......

    此致 汤姆

        
    1
    2015-08-18 12:46:18Z
来源放置 这里