ansible 跳过的虚假目标 $
Phony-Targets for ansible skips $
我是 Makefile 的新手。这是我在 Makefile
中针对 ansible 的 PHONY 目标
.PHONY: healthcheck-webproxy
healthcheck-webproxy:
ansible-playbook -i inventory.py -e "env=dev" -e "group=webproxy" -e "command='curl -k
-s https://localhost:${nginx_https_port}/healthcheck'" site.yaml --
limit=vm4node.lite.com -bv
当我 运行 make healthcheck-webproxy
它跳过 ${nginx_https_port}
我得到以下 ansible adhoc
$make healthcheck-webproxy
ansible-playbook -i inventory.py -e "env=dev" -e "group=webproxy" -e "command='curl -k -s https://localhost:/healthcheck'" limit=vm4node.lite.com -bv
有人可以帮我解决这个问题吗?我不希望 makefile 跳过 ${nginx_https_port}
任何帮助将不胜感激。
我想在这里添加代码。
- hosts: "{{ env }}"
gather_facts: false
become: true
become_method: sudo
tasks:
- name: Check HealthService
shell: docker exec {{ container_name }} sh -c {{ command | quote }}
在Shell应该这样执行。
#docker exec webproxy sh -c 'curl -k -s https://localhost:${nginx_https_port}/healthcheck'
您需要转义 makefile 中的 $
。把 ${nginx_https_port}
变成 ${nginx_https_port}
.
您的 makefile 中的字符串是:
"command='curl -k -s https://localhost:${nginx_https_port}/healthcheck'"
因为它是一个用双引号括起来的字符串,所以变量 substitution/expansion 发生了。所以 ${nginx_https_port}
在 makefile 中展开,在 makefile 运行的主机上。为防止这种情况,您需要对 $ 进行转义,以便将字符串加载到 ansible as-is.
在单引号字符串中(例如 'echo $hello')没有变量 substitution/expansion 发生,这也是 docker exec(在 shell 上执行)对你有用的原因:
docker exec webproxy sh -c 'curl -k -s https://localhost:${nginx_https_port}/healthcheck'
此处字符串curl -k -s https://localhost:${nginx_https_port}/healthcheck'
被as-is赋给docker容器内的sh,然后在没有任何引号的情况下执行,并且可以扩展变量。
我是 Makefile 的新手。这是我在 Makefile
中针对 ansible 的 PHONY 目标.PHONY: healthcheck-webproxy
healthcheck-webproxy:
ansible-playbook -i inventory.py -e "env=dev" -e "group=webproxy" -e "command='curl -k
-s https://localhost:${nginx_https_port}/healthcheck'" site.yaml --
limit=vm4node.lite.com -bv
当我 运行 make healthcheck-webproxy
它跳过 ${nginx_https_port}
我得到以下 ansible adhoc
$make healthcheck-webproxy
ansible-playbook -i inventory.py -e "env=dev" -e "group=webproxy" -e "command='curl -k -s https://localhost:/healthcheck'" limit=vm4node.lite.com -bv
有人可以帮我解决这个问题吗?我不希望 makefile 跳过 ${nginx_https_port} 任何帮助将不胜感激。
我想在这里添加代码。
- hosts: "{{ env }}"
gather_facts: false
become: true
become_method: sudo
tasks:
- name: Check HealthService
shell: docker exec {{ container_name }} sh -c {{ command | quote }}
在Shell应该这样执行。
#docker exec webproxy sh -c 'curl -k -s https://localhost:${nginx_https_port}/healthcheck'
您需要转义 makefile 中的 $
。把 ${nginx_https_port}
变成 ${nginx_https_port}
.
您的 makefile 中的字符串是:
"command='curl -k -s https://localhost:${nginx_https_port}/healthcheck'"
因为它是一个用双引号括起来的字符串,所以变量 substitution/expansion 发生了。所以 ${nginx_https_port}
在 makefile 中展开,在 makefile 运行的主机上。为防止这种情况,您需要对 $ 进行转义,以便将字符串加载到 ansible as-is.
在单引号字符串中(例如 'echo $hello')没有变量 substitution/expansion 发生,这也是 docker exec(在 shell 上执行)对你有用的原因:
docker exec webproxy sh -c 'curl -k -s https://localhost:${nginx_https_port}/healthcheck'
此处字符串curl -k -s https://localhost:${nginx_https_port}/healthcheck'
被as-is赋给docker容器内的sh,然后在没有任何引号的情况下执行,并且可以扩展变量。