2016-08-11 7 views
0

Я пытаюсь создать загружаемую книгу для динамического поиска любых экземпляров, соответствующих тегам AWS, создать ELB, а затем добавить к нему экземпляры. До сих пор мне удалось создать их для одного набора тегов и одного ELB за раз.Экземпляры несвязанного регистра и создания ELB

Я пытаюсь выяснить, какой способ можно запустить для любого количества тегов, не указав мои переменные function и release спереди.

Например, переменные function и release будут определены в файле vars примерно так.

function: 
    - api 
    - webapp 
    - mysql 
release: 
    - prod 
    - stage 
    - dev 

My playbook выглядит так. Я изо всех сил пытаюсь найти способ зацикливания всей пьесы через список переменных. Если я добавлю with_items к первой задаче, он будет перебирать всю эту задачу, прежде чем переходить на следующую, которая не выполняет то, что я хочу.

- ec2_remote_facts: 
    filters: 
     instance-state-name: running 
     "tag:Function": "{{ function }}" 
     "tag:Release": "{{ release }}" 
    region: us-east-1 
    register: ec2instance 

- local_action: 
    module: ec2_elb_lb 
    name: "{{ function }}-{{ release }}" 
    state: present 
    instance_ids: "{{ item.id }}" 
    purge_instance_ids: true 
    region: us-east-1 
    subnets: 
     - subnet-1 
     - subnet-2 
    listeners: 
     - protocol: https 
     load_balancer_port: 443 
     instance_port: 80 
     ssl_certificate_id: "{{ ssl_certificate_id }}" 
    health_check: 
     ping_protocol: http 
     ping_port: 80 
     ping_path: "/status" 
     response_timeout: 3 
     interval: 5 
     unhealthy_threshold: 2 
     healthy_threshold: 2 
    access_logs: 
     interval: 5 
     s3_location: "{{ function }}-{{ release }}-elb" 
     s3_prefix: "logs" 
    with_items: ec2instance.instances 

ответ

1

Простейшая вещь, о которой я могу думать, включает в себя параметризацию.
Составьте список задач для одного снимка, например. elb_from_tagged_instances.yml.
Затем сделайте main.yml с include в цикле:

- include: elb_from_tagged_instances.yml function={{item[0]}} release={{item[1]}} 
    with_together: 
     - "{{function}}" 
     - "{{release}}" 

И если вам не нужно как-то кросс-пересе- функции/релизы, я бы заменить два списка функции/релиз одним списком Dict и итерация над ним.

UPDATE: Пример вложенного цикла, чтобы получить 9 пар:

--- 
- hosts: localhost 
    connection: local 
    vars: 
    functions: 
     - api 
     - webapp 
     - mysql 
    releases: 
     - prod 
     - stage 
     - dev 
    tasks: 
    - include: include_z1.yml function="{{item[0]}}" release="{{item[1]}}" 
     with_nested: 
     - "{{functions}}" 
     - "{{releases}}" 

Также обратите внимание, что вы должны использовать разные имена для списка и параметров (function и functions (множественное число) в моем примере), чтобы избежать рекурсивный шаблон.

+0

Спасибо за ответ. Кажется, что это хорошо работает, чтобы заставить цикл работать, но я не смог заставить его работать с более чем одним набором {{function}} и {{release}} одновременно. Случается, что {{function}} - {{release}} выходит как одно большое значение, например «msg»: «[u'api, u'webapp», u'mysql] - [u'prod ', u'stage ', u'dev'] «Кроме того, я надеюсь иметь. api-prod, api-stage, api-dev, webapp-prod, webapp-stage ... и т. д. Как вы думаете, как это сделать? – tweeks200

+0

@ tweeks200 очень странная вещь ... Я обновил свой ответ с помощью кода, который я тестировал. –

+0

@ tweeks200 нашел ошибку, почему мои шаблонные циклы не работали, обновил ответ еще раз :) разные имена для параметра include ('function') и array (' functions') являются ключом! –