gpt4 book ai didi

bash - 在代理后面使用 ansible k8s 模块

转载 作者:行者123 更新时间:2023-12-02 12:02:57 25 4
gpt4 key购买 nike

我尝试使用 k8s 模块运行一些 ansible 任务。在本地,这很完美,但在我的 Jenkins 实例上,它失败并显示以下错误消息:

...

MaxRetryError(_pool, url, error or ResponseError(cause))\nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='xxxxxxxxxxxxxx', port=443): Max retries exceeded with url: /version (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',))\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1 }



我很确定这是因为 Jenkins 需要代理才能与外界通信。我已经看到如何设置 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' Using module file /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 EXEC /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'

最佳答案

我同意@ilias-sp 但似乎 k8s/common.py 不支持 configuration.proxy attribute , , 尽我所能告诉 urllib3不像“普通” urllib 那样尊重那些代理环境变量,而是选择使用自己的ProxyManager由显式构造函数 kwarg 驱动

不过,感谢ansible的“override”机制,相信你可以检验一下这个理论:

  • 复制 k8s_facts.py进入library你的剧本文件夹
  • 修改它以暴露 proxy AUTH_ARG_MAP ,我相信下面的补丁可以做到(补丁针对v2.8.5,所以如果你的版本不同,你可能需要修改它)
  • 明确设置您的 proxy:新的 k8s_facts 上的属性模块,看看它是否有效
    - k8s_facts:
    host: api-server-whatever
    kind: Project
    proxy: http://my-proxy:3128
  • 假设确实如此,open an issue in ansible让他们知道
  • --- 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

    关于bash - 在代理后面使用 ansible k8s 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293511/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com