ansible-失败! => {“ msg”:“'failed'在调试中不是有效的选项”}

问题描述 投票:-2回答:1

在下面的代码中:

---
- name: set task definition facts
  set_fact:
    todobackend_task_def_arn:
      "{{ cf_stack.stack_outputs.TodobackendTaskDefinition | regex_replace('^(.*):[\\d]*$', '\\1') }}"
    todobackend_adhoc_task_def_arn:
      "{{ cf_stack.stack_outputs.TodobackendAdhocTaskDefinition | regex_replace('^(.*):[\\d]*$', '\\1') }}"

- name: update task definition
  aws_ecs_taskdefinition:
    state: update
    arn: "{{ item }}"
    containers:
      - name: todobackend
        image: "{{ image_tag }}"
  with_items:
    - "{{ todobackend_task_def_arn }}"
    - "{{ todobackend_adhoc_task_def_arn }}"
  when: image_tag is defined

- name: run migrations
  aws_ecs_task:
    operation: run
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}"
    task_definition: "{{ todobackend_adhoc_task_def_arn }}"
    count: 1
    overrides:
      containerOverrides:
        - name: todobackend
          command:
          - "manage.py"
          - "migrate"
          - "--noinput"
  register: migration_task
  when: ('migrate' in ecs_tasks | default([]))

- block:
  - debug: msg= {{ migration_task }}
    when: debug is defined
  - name: "fail if migration task failed"
    fail: msg="One or more migration tasks exited with non-zero exit code"
    with_items: "{{ migration_task.task | default([])}}"
    when: item.containers[0].exitCode != 0
  when: migration_task is defined

- name: run collectstatic
  aws_ecs_task:
    operation: run
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}"
    task_definition: "{{ todobackend_adhoc_task_def_arn }}"
    count: "{{ instance_count | default(1) }}"
    overrides:
      containerOverrides:
        - name: todobackend
          command:
          - "manage.py"
          - "migrate"
          - "--noinput"
  register: collectstatic_task
  when: ('collectstatic' in ecs_tasks | default([]))

- block:
  - debug: msg= {{ collectstatic_task }}
    when: debug is defined
  - name: "fail if collectstatic task failed"
    fail: msg="One or more collectstatic tasks exited with non-zero exit code"
    with_items: "{{ collectstatic_task.task | default([])}}"
    when: item.containers[0].exitCode != 0
  when: collectstatic_task is defined

- name: configure ecs service
  aws_ecs_service:
    state: update
    name: "{{ cf_stack.stack_outputs.TodobackendService }}"
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}"
    task_definition: "{{ todobackend_task_def_arn }}"
    desired_count: "{{ instance_count | default(1) }}"
    deployment_config:
      minimumHealthyPercent: 50
      maximumPercent: 200
  register: configure_ecs_service
  when: stack_config is defined

- debug: msg={{ configure_ecs_service }}
  when: configure_ecs_service is defined  and debug is defined

- name: deploy service update
  aws_ecs_service:
    state: update
    name: "{{ cf_stack.stack_outputs.TodobackendService }}"
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}" 
    task_definition: "{{ todobackend_task_def_arn }}"
  register: update_ecs_service
  when: image_tag is defined

- debug: msg={{ update_ecs_service }}
  when: update_ecs_service is defined and debug is defined 

下面是错误:

TASK [set task definition facts] **************************************************************************************************************
ok: [localhost]

TASK [update task definition] *****************************************************************************************************************
skipping: [localhost] => (item=arn:aws:ecs:us-west-2:738712609768:task-definition/todobackend-TodobackendTaskDefinition-1Q6N008BB5S3E) 
skipping: [localhost] => (item=arn:aws:ecs:us-west-2:738712609768:task-definition/todobackend-TodobackendAdhocTaskDefinition-XRWUXMCWSD4A) 

TASK [run migrations] *************************************************************************************************************************
changed: [localhost]

TASK [debug] **********************************************************************************************************************************
[DEPRECATION WARNING]: Using variables for task params is unsafe, especially if the variables come from an external source like facts. This 
feature will be removed in version 2.6. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
fatal: [localhost]: FAILED! => {"msg": "'failed' is not a valid option in debug"}
    to retry, use: --limit @/home/user/git/../todobackend-deploy/site.retry

PLAY RECAP ************************************************************************************************************************************
localhost                  : ok=4    changed=2    unreachable=0    failed=1   

$ 

对于命令:

$ ansible-playbook site.yml --ask-vault-pass -e '{"ecs_tasks":["migrate","collectstatic"],"stack_config":"true","debug":"true"}'

$ ansible --version
ansible 2.5.1

编辑:

下面是答案之后的更改:

---
- name: task to create/update stack
  cloudformation:
    stack_name: todobackend
    state: present
    template: templates/stack.yml
    template_format: yaml
    template_parameters:
      VpcId: "{{ vpc_id }}"
      SubnetId: "{{ subnet_id }}"
      KeyPair: "{{ ec2_keypair }}"
      InstanceCount: "{{ instance_count | default(1) }}"
      DbSubnets: "{{ db_subnets | join(',') }}"
      DbAvailabilityZone: "{{ db_availability_zone }}"
      DbUsername: "{{ db_username }}"
      DbPassword: "{{ db_password }}"
    tags:
      Environment: test
  register: cf_stack

- name: Debug output
  - debug: 
    msg="{{ cf_stack }}"
  when: debug is defined

---
- name: set task definition facts
  set_fact:
    todobackend_task_def_arn:
      "{{ cf_stack.stack_outputs.TodobackendTaskDefinition | regex_replace('^(.*):[\\d]*$', '\\1') }}"
    todobackend_adhoc_task_def_arn:
      "{{ cf_stack.stack_outputs.TodobackendAdhocTaskDefinition | regex_replace('^(.*):[\\d]*$', '\\1') }}"

- name: update task definition
  aws_ecs_taskdefinition:
    state: update
    arn: "{{ item }}"
    containers:
      - name: todobackend
        image: "{{ image_tag }}"
  with_items:
    - "{{ todobackend_task_def_arn }}"
    - "{{ todobackend_adhoc_task_def_arn }}"
  when: image_tag is defined

- name: run migrations
  aws_ecs_task:
    operation: run
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}"
    task_definition: "{{ todobackend_adhoc_task_def_arn }}"
    count: 1
    overrides:
      containerOverrides:
        - name: todobackend
          command:
          - "manage.py"
          - "migrate"
          - "--noinput"
  register: migration_task
  when: ('migrate' in ecs_tasks | default([]))

- block:
  - debug: 
      msg= {{ migration_task }}
    when: debug is defined
  - name: "fail if migration task failed"
    fail: msg="One or more migration tasks exited with non-zero exit code"
    with_items: "{{ migration_task.task | default([])}}"
    when: item.containers[0].exitCode != 0
  when: migration_task is defined

- name: run collectstatic
  aws_ecs_task:
    operation: run
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}"
    task_definition: "{{ todobackend_adhoc_task_def_arn }}"
    count: "{{ instance_count | default(1) }}"
    overrides:
      containerOverrides:
        - name: todobackend
          command:
          - "manage.py"
          - "migrate"
          - "--noinput"
  register: collectstatic_task
  when: ('collectstatic' in ecs_tasks | default([]))

- block:
  - debug: 
      msg= {{ collectstatic_task }}
    when: debug is defined

  - name: "fail if collectstatic task failed"
    fail: msg="One or more collectstatic tasks exited with non-zero exit code"
    with_items: "{{ collectstatic_task.task | default([])}}"
    when: item.containers[0].exitCode != 0
  when: collectstatic_task is defined

- name: configure ecs service
  aws_ecs_service:
    state: update
    name: "{{ cf_stack.stack_outputs.TodobackendService }}"
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}"
    task_definition: "{{ todobackend_task_def_arn }}"
    desired_count: "{{ instance_count | default(1) }}"
    deployment_config:
      minimumHealthyPercent: 50
      maximumPercent: 200
  register: configure_ecs_service
  when: stack_config is defined

- debug:
    msg={{ configure_ecs_service }}
  when: configure_ecs_service is defined  and debug is defined

- name: deploy service update
  aws_ecs_service:
    state: update
    name: "{{ cf_stack.stack_outputs.TodobackendService }}"
    cluster: "{{ cf_stack.stack_outputs.EcsCluster }}" 
    task_definition: "{{ todobackend_task_def_arn }}"
  register: update_ecs_service
  when: image_tag is defined

- debug:
    msg={{ update_ecs_service }}
  when: update_ecs_service is defined and debug is defined

如何解决错误:“'failed'在调试中不是有效的选项”?

ansible amazon-cloudformation ansible-2.x ansible-facts
1个回答
1
投票

这可能是您的(非常!!!)旧的ansible版本与任务中旧的k=v +较年轻的yaml语法的组合。我无法在ansible 2.9.7上重现此内容。

以下语法可能应该解决您的问题:

- debug:
    msg: "{{ update_ecs_service }}"
  when: update_ecs_service is defined and debug is defined

请注意,由于您正在直接调试var值,因此您也可以使用:

- debug:
    var: update_ecs_service
  when: update_ecs_service is defined and debug is defined

尽管以上是一种很好的做法,但我仍然强烈建议您将ansible升级到最新版本。


旁注:debug is defined通常可以用verbosity parameterverbosity代替,因此可以通过debug-v选项控制输出与否。

© www.soinside.com 2019 - 2024. All rights reserved.