我尝试使用k8s模块运行一些烦人的任务。在本地,这是完美的,但是在我的Jenkins实例上,它失败并显示以下错误消息:
...
MaxRetryError(_pool,url,错误或 ResponseError(cause))\ nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host ='xxxxxxxxxxxxxx', port = 443):url:/ version超过了最大重试次数(由 NewConnectionError(':无法建立新的连接:[Errno -2] 名称或服务未知',))\ n“, “ module_stdout”:“”, “ msg”:“模块失败\ n请参阅stdout / stderr了解确切错误”, “ rc”:1}
我非常确定,这是因为詹金斯家族需要代理才能与外界交流。我已经看过如何设置Ansible以使用代理,但这似乎不适用于k8s模块。有任何想法吗?这是到目前为止我尝试过的:
- 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 PUT /root/.ansible/tmp/ansible-local-1fHx5f6/tmpDUhlNa TO /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/AnsiballZ_k8s_facts.py 执行/ bin / sh -c'chmod u + x /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/ /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/AnsiballZ_k8s_facts.py && sleep 0'EXEC / bin / sh -c 'https_proxy = xxx http_proxy = xxx / usr / bin / python /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/AnsiballZ_k8s_facts.py && sleep 0'EXEC / bin / sh -c'rm -f -r /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/> / dev / null 2>&1 && sleep 0'
答案 0 :(得分:2)
我同意@ ilias-sp,但似乎k8s/common.py
不支持configuration.proxy
attribute,并且据我所知,urllib3
不支持这些代理环境变量, urllib的正常方式,而是选择使用由显式构造函数kwarg驱动的自己的ProxyManager
但是,由于ansible的“替代”机制,我相信您可以测试以下理论:
k8s_facts.py
复制到剧本的library
文件夹中AUTH_ARG_MAP
中的proxy
,我相信下面的补丁可以做到(该补丁针对v2.8.5,因此如果您的版本不同,则可能需要弄弄它) 在新的proxy:
模块上明确设置k8s_facts
属性,看看它是否有效
- k8s_facts:
host: api-server-whatever
kind: Project
proxy: http://my-proxy:3128
--- 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