出于某种原因,当达到此任务并且 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]
同一级别的所有其他设备都工作正常
包含中的每个任务都有自己的时间,但为了排除这些任务上所有时间都为假的问题,我添加了一个仅输出测试的调试任务,它也跳过了该任务
回答以下问题
调试任务直接在包含任务之前,两者位于块元素内的同一级别,并且我也在上面包含了调试任务
问题似乎是 vars 下的这些变量:
upstream: '{{ docker_container.upstream }}'
sites: '{{ docker_container.sites }}'
我本以为会出现错误,但没有得到错误。
docker_container.sites 不存在,上游也不存在,我使用了错误的字典名称,并且我还错误地使用 '' 使其成为显式字符串
我已经解决了这个问题,现在它不再跳过了。