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
相关产品推荐
相关产品推荐

