You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible is_nginx为true时对应任务仍被跳过问题求助

Ansible问题:is_nginx为true时include/import任务仍被跳过

使用Ansible时遇到异常:当is_nginx变量值为true时,对应的include_tasks或import_tasks任务仍被跳过。尝试过将任务放入block块、切换include/import类型、给is_nginx添加|bool过滤器,问题依旧。同层级其他带when语句的任务可正常执行,无任何报错。debug任务已确认is_nginx输出为true,即使在被导入的任务中添加无when条件的debug任务,也会被跳过。

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版本)

- 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 }}"

使用import_tasks的代码变体

- 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

执行输出

include_tasks版本执行输出

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

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

import_tasks版本执行输出

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]

内容的提问来源于stack exchange,提问作者Cyber Axe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:25:56