索引清单中除一个主机外的所有主机

时间:2015-08-11 22:00:50

标签: ansible ansible-playbook

我有一个看起来像这样的剧本:

<section class="slideshow">
    <img src="img/img1.png" class="bgM show"/>
    <img src="img/img2.png" class="bgM"/>
    <img src="img/img3.jpg" class="bgM"/>                   
</section>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
function switch_images() {
    var $active = $('.slideshow IMG.show');
    var $next = $active.next();

    if(!$next.length){
        $next = $('.slideshow IMG:first');
    }

    $active.removeClass('show');
    $next.addClass('show');
}

$(function() {
    setInterval( "switch_images()", 8000 );
});
</script>

基本上,我有一组服务器以相同的方式安装,除了我指定为主服务器的服务器需要不同的参数集。以上工作原理很好,因为我可以选择我的组中的第一台服务器并设置参数,然后使用以下块跟随它以使用备用设置安装其余主机:

  - name:  Install myApp
    hosts: tag_app_prod[0]
    sudo: yes
    roles:
      - { role: myApp, master: "true" }

问题是我正在使用动态库存,而且我不知道在运行时会有多少主机存在。有没有办法在我的主机行上指定上限而不是像上面那样将它设置为25这样的特定数字?

1 个答案:

答案 0 :(得分:1)

如果使用高于实际服务器列表范围的索引,Ansible实际上会好的,所以这应该有效:

- name:  Install myApp
  hosts: tag_app_prod[0]
  sudo: yes
  roles:
    - { role: myApp, master: "true" }

- name:  Install myApp
  hosts: tag_app_prod[1-9999]
  sudo: yes
  roles:
    - { role: myApp, master: "false" }

然而,还有另一种方法可以做到这一点。您可以使用jinja动态设置master变量:

- name:  Install myApp
  hosts: tag_app_prod
  sudo: yes
  roles:
    - { role: myApp, master: "{% if inventory_hostname == groups['tag_app_prod'][0] %}True{% else %}False{% endif %}" }

当为tag_app_prod组(groups['tag_app_prod'][0])中的第一个主机调用该角色时,变量master将设置为True。对于所有其他主机,它将被设置为False。