2016-11-02 6 views
2

Я работаю с Ansible ec2_asg модулем с Ansible 2.1.2.0. Когда я пытаюсь создать группу AutoScaling, я получаю следующее сообщение об ошибке:Ansible ec2_asg - TypeError: объект «NoneType» не является итерабельным

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TypeError: 'NoneType' object is not iterable 
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Traceback (most recent call last):\n File \"/tmp/ansible_sYlKBr/ansible_module_ec2_asg.py\", line 832, in <module>\n main()\n File \"/tmp/ansible_sYlKBr/ansible_module_ec2_asg.py\", line 821, in main\n create_changed, asg_properties=create_autoscaling_group(connection, module)\n File \"/tmp/ansible_sYlKBr/ansible_module_ec2_asg.py\", line 471, in create_autoscaling_group\n for tag in as_group.tags:\nTypeError: 'NoneType' object is not iterable\n", "module_stdout": "", "msg": "MODULE FAILURE"} 

Мы роем в модуль ec2_asg, и он терпит неудачу здесь:

Ansible ec2_asg

for tag in as_group.tags: 
     have_tags[tag.key] = [tag.value, tag.propagate_at_launch] 
     if tag.key not in want_tags: 
      changed = True 
      dead_tags.append(tag) 

И мой Целевая задача:

- name: Configuring Auto Scaling Group and perform rolling deploy 
    ec2_asg: 
    region: "ap-southeast-1a" 
    name: "MY-ASG" 
    vpc_zone_identifier: [ "{{ services_1_subnet_id }}", "{{ services_2_subnet_id }}" ] 
    launch_config_name: "{{ service_group }}-{{ current_datetime }}" 
    health_check_type: "{{ health_check_type }}" 
    health_check_period: "{{ health_check_period }}" 
    desired_capacity: "{{ min_instances }}" 
    replace_all_instances: yes 
    replace_batch_size: "{{ replace_batch_size }}" 
    min_size: "{{ min_instances }}" 
    max_size: "{{ max_instances }}" 
    wait_for_instances: yes 
    wait_timeout: 600 
    tags: 
     - Name: "{{ service_group }}" 
     - deploy_colour: "{{ deploy_colour }}" 
     - Type: "ABC" 
     - Env: "{{ env }}" 
    state: present 
    register: asg_result 

Предположим, что все var iables уже определены, и они верны.

В ASG уже есть теги.

+0

Что такое 'item' в' Type: "{{item.type}}" '? Вы перебираете какой-то список? –

+0

Да. Я перебираю список элементов, который похож на '- {name: 'XYZ', type: 'ABC'}' –

+0

Если вы зацикливаете, в сообщении об ошибке должно появиться значение элемента, например: 'failed: [localhost] (item = {u'type ': u'ABC', u'name ': u'XYZ'}) => {"failed" ... ", и вы не укажете' with_items' в своем выдержке из плей-листа. –

ответ

0

Я потратил довольно много времени на то, чтобы понять это. Решение этой проблемы для меня состояло в том, что у My ASG были целевые группы, а также классические ELB.

В AWS API есть некоторые изменения, из-за которых, если вы подключены к целевым группам в ASG, это не сработает.

Следовательно, решение удаляет вашу ASG с помощью целевых групп, а затем попробуйте. Это сработало для меня.

Cheers!

+0

Чтобы уточнить, вы говорите, что если ASG является частью целевой группы, вы не можете обновить тег для ASG в AWS API? –

+0

Мне удалось добавить теги через aws cli, поэтому я считаю, что проблема в этом есть. Я создал для него проблему: https://github.com/ansible/ansible/issues/23234 –

Смежные вопросы