Bash 在代理后面使用ansible k8s模块
我尝试使用k8s模块运行一些ansible任务。在本地,这非常有效,但在我的Jenkins实例上,它失败,并显示以下错误消息: MaxRetryError(_池、url、错误或 ResponseError(原因))\nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool(主机='xxxxxxxxxxxxx', 端口=443):url:/version超过了最大重试次数(由 NewConnectionError(':未能建立新连接:[Errno-2] 名称或服务未知',)\n“, “模块”:“, “msg”:“模块故障\n请参阅stdout/stderr以了解确切错误”, “rc”:1} 我很确定这是因为Jenkins需要一个代理来与外部世界通信。我见过如何设置ansible以使用代理,但这似乎不适用于k8s模块。有什么想法吗?以下是我迄今为止尝试过的:Bash 在代理后面使用ansible k8s模块,bash,kubernetes,proxy,ansible,Bash,Kubernetes,Proxy,Ansible,我尝试使用k8s模块运行一些ansible任务。在本地,这非常有效,但在我的Jenkins实例上,它失败,并显示以下错误消息: MaxRetryError(_池、url、错误或 ResponseError(原因))\nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool(主机='xxxxxxxxxxxxx', 端口=443):url:/version超过了最大重试次数(由 NewConnectionError(':未能建立新连接:[Errn
- hosts: ansible_server
connection: local
gather_facts: no
environment:
https_proxy: "xxx"
http_proxy: "xxx"
tasks:
- name: Gather facts to check connectivity
k8s_facts:
api_key: "{{api_key}}"
host: "{{cluster_url}}"
kind: Project
register: listed_projects
PS:我添加了-vvv标志,可以看到它试图以某种方式使用代理:
EXEC/bin/sh-c'/usr/bin/python&&sleep 0'使用模块
文件
/usr/lib/python2.7/site-packages/ansible/modules/clustering/k8s/k8s_facts.py
将/root/.ansible/tmp/ansible-local-1fHx5f6/tmpDUhlNa放到
/root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/AnsiballZ_k8s_facts.py
EXEC/bin/sh-c'chmod u+x
/root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/
/root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/AnsiballZ_k8s_facts.py
&&睡眠0'EXEC/bin/sh-c
'https_proxy=xxx
http_proxy=xxx
/usr/bin/python
/root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/AnsiballZ_k8s_facts.py
&&睡眠0'EXEC/bin/sh-c'rm-f-r
/root/.ansible/tmp/ansible-tmp-15705659.96-190678136757098/>
/dev/null 2>&1&&0'
我同意@ilias sp,但它似乎也不支持,而且据我所知,
urllib3
不像“普通”urllib那样尊重这些代理环境变量,而是选择使用自己的ProxyManager
,它由显式构造函数kwarg驱动
然而,由于ansible的“覆盖”机制,我相信您可以测试这一理论:
k8s_facts.py
复制到剧本的库
文件夹中proxy
,我相信下面的补丁可以做到这一点(补丁是针对v2.8.5的,因此如果您的版本不同,您可能需要修改它)k8s\u facts
模块上显式设置proxy:
属性,然后查看它是否工作
- k8s_facts:
host: api-server-whatever
kind: Project
proxy: http://my-proxy:3128
我将重点关注
名称或服务未知
错误。似乎一些相关主机无法解决提到的主机问题?哇,非常感谢您的详细回答。我按照建议应用了修补程序,现在它可以工作了。我将按照您的建议创建问题。非常感谢。还有一件事,您可以帮助我实现sam吗对于“普通”k8s模块,我试过了,但我的python技能太有限,无法在足够的时间内完成这项工作。对不起,你必须与ansible的同事讨论,或者找一个“coder for hire”服务来帮你解决python问题
--- a/library/k8s_facts.py 2019-10-08 22:23:24.000000000 -0700
+++ b/library/k8s_facts.py 2019-10-08 22:24:50.000000000 -0700
@@ -130,13 +130,14 @@
'''
-from ansible.module_utils.k8s.common import KubernetesAnsibleModule, AUTH_ARG_SPEC
+from ansible.module_utils.k8s.common import KubernetesAnsibleModule, AUTH_ARG_SPEC, AUTH_ARG_MAP
import copy
class KubernetesFactsModule(KubernetesAnsibleModule):
def __init__(self, *args, **kwargs):
+ AUTH_ARG_MAP['proxy'] = 'proxy'
KubernetesAnsibleModule.__init__(self, *args,
supports_check_mode=True,
**kwargs)
@@ -163,6 +164,7 @@
namespace=dict(),
label_selectors=dict(type='list', default=[]),
field_selectors=dict(type='list', default=[]),
+ proxy=dict(type='str', required=False),
)
)
return args