Использовать модуль ansible k8s за прокси - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь выполнить несколько заданий с помощью модуля k8s. Локально это работает отлично, но в моем экземпляре Jenkins происходит сбой со следующим сообщением об ошибке:

...

MaxRetryError (_pool, url, error или ResponseError (причина))\ nurllib3.exceptions.MaxRetryError: HTTPSConnectionPool (host = 'xxxxxxxxxxxxxx', port = 443): превышено максимальное количество попыток с помощью url: / version (вызвано NewConnectionError (': не удалось установить новое соединение: [Errno -2] имя или службанеизвестно ',)) \ n "," module_stdout ":" "," msg ":" СБОЙ МОДУЛЯ \ nСмотрите stdout / stderr для точной ошибки "," rc ": 1}

Я совершенно уверен, что это потому, что Дженкинс требует прокси для связи с внешним миром. Я видел, как настроить ответственность за использование прокси, но это не похоже на работу с модулем 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-пакеты / ansible / модули / кластеризация / k8s / k8s_facts.py PUT /root/.ansible/tmp/ansible-local-1fHx5f6/tmpDUhlNa TO /root/.ansible/tmp/ansible-tmp-1570565569.96-190678136757098/Ansiball__EC8/ 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'

1 Ответ

2 голосов
/ 09 октября 2019

Я согласен с @ ilias-sp, но также представляется, что k8s/common.py не поддерживает атрибут configuration.proxy , и, насколько я могу судить, urllib3 делаетне соблюдать эти переменные окружения-посредника, как это делает «обычный» urllib, вместо этого выбрав собственный ProxyManager, управляемый явным конструктором kwarg

Однако, благодаря механизму «переопределить» ansible, яПолагаю, что вы можете проверить эту теорию:

  1. Скопируйте k8s_facts.py в папку library своей пьесы
  2. Измените ее, чтобы выставить proxy в AUTH_ARG_MAP, что, как я полагаю, подойдет нижеприведенный патч (патч против v2.8.5, поэтому вам может потребоваться возиться с ним, если ваша версия отличается)
  3. Явно установите атрибут proxy:на вашем новом модуле k8s_facts и посмотрите, работает ли он

    - k8s_facts:
        host: api-server-whatever
        kind: Project
        proxy: http://my-proxy:3128
    
  4. Предполагая, что это так, откройте вопрос в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...