ansible - 如何在构建期间通过ansible访问打包机(IP /主机)
问题描述
我正在尝试使用 packer 和 ansible integration Provisioner 使用 GCP 构建我的应用程序。但在构建过程中,我需要执行一些 curl 命令,但我无法找到如何执行相同操作。
我已经尝试过“localhost”,然后是一些 ansible 变量,例如“{{ ansible_host }}”(返回不起作用的 127.0.0.1)和“{{ ansible_default_ipv4.address }}”(未找到变量)
我在 yml.j2 文件中使用这些。这可能是问题的原因。
错误 --> 使用“ansible_host”测试
[0;32m googlecompute: TASK [deploy-XXXXX : Create the XXXXX collection] ***************************[0m
[0;32m googlecompute: fatal: [localhost]: FAILED! => {"changed": false, "content": "", "msg": "Status code was -1 and not [200]: Request failed: <urlopen error [Errno 111] Connection refused>", "redirected": false, "status": -1, "url": "http://127.0.0.1:8765/api/v1/collections/XXXXX"}[0m
[0;32m googlecompute: to retry, use: --limit @/deploy-XXXXX.retry[0m
[0;32m googlecompute:[0m
[0;32m googlecompute: PLAY RECAP *********************************************************************[0m
[0;32m googlecompute: localhost : ok=2 changed=1 unreachable=0 failed=1[0m
使用“ansible_default_ipv4.address”进行测试
[0;32m googlecompute: TASK [deploy-XXXXX : copy environment specific variables] *********************[0m
[0;32m googlecompute: fatal: [localhost]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'ansible_default_ipv4' is undefined"}[0m
[0;32m googlecompute: to retry, use: --limit @/deploy-XXXXX.retry[0m
[0;32m googlecompute:[0m
[0;32m googlecompute: PLAY RECAP *********************************************************************[0m
[0;32m googlecompute: localhost : ok=0 changed=0 unreachable=0 failed=1[0m
[0;32m googlecompute:[0m
这里是剧本片段
- name: Validate server runing
uri:
url: "http://{{ ansible_default_ipv4.address }}:{{ port }}/validate"
method: PUT
body_format: json
body: "{\"test\":\"validate\"}"
status_code: 200
headers:
Content-Type: "application/json"
解决方案
我能够通过将 delegate_to: default 添加到任务来克服这个问题。例如
- name: Validate server runing
uri:
url: "http://{{ ansible_default_ipv4.address }}:{{ port }}/validate"
method: PUT
body_format: json
body: "{\"test\":\"validate\"}"
status_code: 200
headers:
Content-Type: "application/json"
delegate_to: default
推荐阅读
- html - 在 flexbox 中组合不同的垂直对齐方式
- excel - 使用自定义源文件导入 xls 工作表
- java - Corda - 无法初始化主类 Capsule(原因:java.lang.NoClassDefFoundError:java/lang/instrument/Instrumentation)
- mysql - Mysql 高 cpu 使用率(超过 600%)
- asp.net-mvc - 选择下拉菜单未在 cshtml 视图中正确显示
- firebase - 为 Slack API 使用 Firebase onRequest() 或 Express app.use()
- java - 将 java.util.ArrayList 转换为 gson.JsonElement
- python - 在 Windows 上 Pip 无法访问端口 443,但浏览器可以
- android - 为什么父母不会改变高度来包裹文本视图?
- angular - 用于预渲染 Angular SPA 的 Nginx conf