当条件为真时,Ansible 任务被跳过

问题描述 投票:0回答:1

出于某种原因,当达到此任务并且 is_nginx 为 true 时,它会跳过它,我还将其更改为一个块,并将 import_tasks 放入块中而不是包含,它具有所有项目,但只是跳过它们全部

这让我很困惑,因为我在其他地方也有类似的 include 和 when 语句,而且效果很好

没有其他错误,所以我排除了 vars: block 有任何问题

有人知道是什么原因导致这个问题吗?

Ansible版本

ansible [core 2.14.11]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.11/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.11.9 (main, Apr 17 2024, 00:00:00) [GCC 13.2.1 20240316 (Red Hat 13.2.1-7)] (/usr/bin/python3)
  jinja version = 3.1.3
  libyaml = True

这是删除了其他任务的代码,除了一个其他包含的任务确实有效,我尝试将非工作任务更改为像工作任务一样的块下的 include_tasks 但无济于事

我还添加了一个显式的 |bool 过滤器,但它也不起作用

 - block:
    - block:
        - include_tasks: '../user/create_linux_user.yaml'
      vars:
        user_name: '{{ owner_name }}'
        user_group: '{{ group_name }}'
        user_groups: "{{ ((container.groups | default([])) + [ docker_group ]) | interpret_values(vars) }}"
        user_create_home: false
        user_allow_login: false
        group_users: "{{ admin_users }}"
      when: not ansible_check_mode

    - debug:
        var: is_nginx

    - name: '{{ current_job }}: Import NGiNX Config Tasks'
      include_tasks: '{{ common_task_dir }}/nginx/prepare_configs.yaml'
      vars:
        current_job: '{{ current_job }} - NGiNX Setup'
        lscr_config: "{{ docker_image.split('/')[0] == 'lscr.io' }}"
        log_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/log(:|$)') | first | split(':')[0] }}"
        sites_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/config/nginx/site-confs(:|$)') | first | split(':')[0] }}"
        httpd_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/etc/nginx/http.d(:|$)') | first | split(':')[0] }}"
        common_config_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/etc/nginx/common(:|$)') | first | split(':')[0] }}"
        html_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/usr/share/nginx/html(:|$)') | first | split(':')[0] }}"

        upstream: '{{ docker_container.upstream }}'
        sites: '{{ docker_container.sites }}'
        nginx_user: '{{ owner_name }}'
        nginx_group: '{{ group_name }}'
      when: is_nginx|bool

  vars:
    container_final_name: "{{ sane_container_name ~ name_appender | lower }}"
    docker_image: "{{ container.image }}"
    container_name: "{{ sane_container_name }}"
    environment_variables: "{{ (container.environment | default({})) | combine(docker_environment.common.environment | default({})) }}"

    is_nginx: "{{ docker_image.split(':')[0].split('/')|last|lower == 'nginx' }}"

    assign_user: "{{ (docker_image is not match('^lscr\\.io')) }}"

    sane_container_name: "{{ container.name | lower | trim | regex_replace('[^a-z0-9]', '-') | regex_replace('(^[0-9-]+|-+$)', '') }}"

    container_hostname: "{{ container.hostname | default(container_name) | lower | trim | regex_replace('[^a-z0-9]', '-') | regex_replace('(^[0-9-]+|-+$)', '') }}"
    owner_name: "{{ container.owner | default(docker_environment.common.owner | default(container_name)) ~ name_appender }}"
    group_name: "{{ (container.group | default(container_name)) ~ name_appender }}"
    docker_group: "{{ (docker_environment.group | default('docker')) ~ name_appender }}"

    container_group_base_dir: "{{ environment_base_dir }}/{{ container.group | lower }}/{{ container_name }}"
    container_base_dir: "{{ environment_base_dir }}/{{ container.group | lower }}/{{ container_name }}"
    
    container_networks: "{{ docker_environment.common.networks | default({}) | dict2items | selectattr('key', 'in', container.networks | default([])) | map('combine', {'name': item.key}) | list }}"

    filtered_ports: "{{ container.ports | default([]) | filter_ports(port_prepender) }}"

    volumes:  "{{ 'volumes' | get_volumes(container, docker_environment.common) | sanitize_volumes(docker_environment.containers, docker_environment.volumes, environment_base_dir, container_base_dir, false, container_networks) }}"
    volume_files: "{{ 'files' | get_volumes(container, docker_environment.common) | sanitize_volumes(docker_environment.containers, docker_environment.volumes, environment_base_dir, container_base_dir, true, container_networks) }}"

    sane_volume_directories: "{{ (volumes + volume_files) | get_parent_folders(base_storage) | select('match', '^' ~ base_storage ~ '.*|^[^/]') | unique | sort | reject('match', '^(' ~ base_storage ~ '|' ~ container_base_dir ~ '|' ~ environment_base_dir ~ '|' ~ container_group_base_dir ~ '|' ~ ')/?$') | list }}"

这是导入变体

    - block:
        - name: '{{ current_job }}: Import NGiNX Config Tasks'
          import_tasks: '{{ common_task_dir }}/nginx/prepare_configs.yaml'
      vars:
        current_job: '{{ current_job }} - NGiNX Setup'
        lscr_config: "{{ docker_image.split('/')[0] == 'lscr.io' }}"
        log_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/log(:|$)') | first | split(':')[0] }}"
        sites_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/config/nginx/site-confs(:|$)') | first | split(':')[0] }}"
        httpd_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/etc/nginx/http.d(:|$)') | first | split(':')[0] }}"
        common_config_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/etc/nginx/common(:|$)') | first | split(':')[0] }}"
        html_folder: "{{ container_base_dir }}/{{ volumes | select('match', ':/usr/share/nginx/html(:|$)') | first | split(':')[0] }}"

        upstream: '{{ docker_container.upstream }}'
        sites: '{{ docker_container.sites }}'
        nginx_user: '{{ owner_name }}'
        nginx_group: '{{ group_name }}'
      when: is_nginx|bool

这是包含版本的控制台输出


TASK [smarthome : debug] ********************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "is_nginx": true
}

TASK [smarthome : {{ current_job }}: Import NGiNX Config Tasks] *****************************************************************************************************************************************************************************
skipping: [localhost]

这是导入版本的控制台输出

TASK [smarthome : debug] ********************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "is_nginx": true
}

TASK [smarthome : {{ current_job }}: Ensure Site HTML Directory Exists] *********************************************************************************************************************************************************************
skipping: [localhost]

TASK [smarthome : {{ current_job }}: Ensure Site WWW Directory Exists] **********************************************************************************************************************************************************************
skipping: [localhost]

TASK [smarthome : {{ current_job }}: Ensure Site Static Directory Exists] *******************************************************************************************************************************************************************
skipping: [localhost]

TASK [smarthome : {{ current_job }}: Ensure Site Error Directory Exists] ********************************************************************************************************************************************************************
skipping: [localhost]

TASK [smarthome : {{ current_job }}: Create Upstream Config] ********************************************************************************************************************************************************************************
skipping: [localhost]

TASK [smarthome : {{ current_job }}: Create Site Config] ************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [smarthome : {{ current_job }}: Create Reverse Proxy Config] ***************************************************************************************************************************************************************************
skipping: [localhost]

同一级别的所有其他设备都工作正常

包含中的每个任务都有自己的时间,但为了排除这些任务上所有时间都为假的问题,我添加了一个仅输出测试的调试任务,它也跳过了该任务

回答以下问题

调试任务直接在包含任务之前,两者位于块元素内的同一级别,并且我也在上面包含了调试任务

ansible
1个回答
0
投票

问题似乎是 vars 下的这些变量:

upstream: '{{ docker_container.upstream }}'
sites: '{{ docker_container.sites }}'

我本以为会出现错误,但没有得到错误。

docker_container.sites 不存在,上游也不存在,我使用了错误的字典名称,并且我还错误地使用 '' 使其成为显式字符串

我已经解决了这个问题,现在它不再跳过了。

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