Как получить элементы из зарегистрированной переменной в al oop Ansible - PullRequest
0 голосов
/ 23 апреля 2020

Я пишу книгу, в которой мне нужно перезапустить мои Docker контейнеры определенного изображения. Я написал что-то вроде ниже, но это не удается. Кажется, что-то не так с моим l oop я думаю.

---
- name: restart app servers
  hosts: shashank-VM
  connection: local
  become: yes
  become_method: sudo
  tasks:
    - name: Get info on the Container
      shell: docker ps | awk '/{{ item }}/{print $1}'
      register: list_of_containers
      with_items:
        - ubuntu

    - debug:
        msg: "item.item={{item.item}}, item.stdout_lines={{item.stdout_lines}}, item.changed={{item.changed}}"
      loop: "{{ list_of_containers.results }}"

    - name: Restart Docker Service
      docker_container:
       name: "{{ item.stdout_lines }}"
       image: ubuntu
       state: started
       restart: yes
      register: result_of_action
      loop: "{{ list_of_containers.results }}"

Ошибка ниже -

* TASK [debug] ************* ************************************************** ************************************************** **************** /usr/lib/python2.7/dist-packages/requests/init.py:80: RequestsDependencyWarning: urllib3 (1.25 .9) или chardet (3.0.4) не соответствуют поддерживаемой версии! RequestsDependencyWarning) ok: [shashank-VM] => (item = {'stderr_lines': [], 'ansible_loop_var': u'item ', u'end': u'2020-04-23 10: 36: 26.885300 ', u'stderr ': u' ', u'stdout': u'466236fa1676 \ n74d1c2d3effb ', u'changed': True, 'fail': False, u'delta ': u'0: 00: 00.099078', u ' cmd ': u "docker ps | awk' / ubuntu / {print $ 1} '",' item ': u'ubuntu', u'r c ': 0, u'invocation': {u'module_args ': {u'warn': True, u'executable ': None, u'_uses_shell': True, u'strip_empty_ends ': True, u'_raw_params': u "docker ps | awk '/ ubuntu / {print $ 1} '", u'moves": нет, u'argv': нет, u'creates ': нет, u'chdir': нет, u'stdin_add_newline ': True, u'stdin': нет}}, ' stdout_lines ': [u'466236fa1676', u'74d1c2d3effb '], u'start': u'2020-04-23 10: 36: 26.786222 '}) => {"msg": "item.item = ubuntu, item .stdout_lines = [u'466236fa1676 ', u'74d1c2d3effb'], item.changed = True "}

TASK [перезапустить Docker Service] ************** ************************************************** ************************************************ / usr / Библиотека / python2 .7 / dist-packages / запросы / init .py: 80: RequestsDependencyWarning: urllib3 (1.25.9) или chardet (3.0.4) не соответствуют поддерживаемой версии! RequestsDependencyWarning) [ПРЕДУПРЕЖДЕНИЕ]: значение ['466236fa1676', '74d1c2d3effb'] (список типов) в строковом поле было преобразовано в u "['466236fa1676', '74d1c2d3effb']" (тип строка). Если это не похоже на то, что вы ожидаете, заключите в кавычки все значение, чтобы оно не изменилось. Ошибка: [shashank-VM] (item = {'stderr_lines': [], 'ansible_loop_var': u'item ', u'end': u'2020-04-23 10: 36: 26.885300 ', u'stderr' : u '', u'stdout ': u'466236fa1676 \ n74d1c2d3effb', u'changed ': True,' fail ': False, u'delta': u'0: 00: 00.099078 ', u'cmd': u "docker ps | awk '/ ubuntu / {print $ 1}'", 'item': u'ubuntu ', u'r c': 0, u'invocation ': {u'module_args': {u 'warn': True, u'executable ': None, u'_uses_shell': True, u'strip_empty_ends ': True, u'_raw_params': u "docker ps | awk '/ ubuntu / {print $ 1}'" , вы перемещаете ': Нет, u'argv': Нет, вы 'создаете': Нет, u'chdir ': Нет, u'stdin_add_newline': True, u'stdin ': Нет}},' stdout_lines ': [ u'466236fa1676 ', u'74d1c2d3effb'], u'start ': u'2020-04-23 10: 36: 26.786222'}) => {"ansible_loop_var": "item", "changes": false, "item ": {" ansible_loop_var ":" item "," updated ": true," cmd ":" docker ps | awk '/ ubuntu / {print $ 1}' "," delta ":" 0: 00: 00.099078 " , "end": "2020-04-23 10: 36: 26.885300", "fail": false, "invocation": {"module_args": {"_raw_params": "docker ps | awk ' / ubuntu / {print $ 1} '"," _uses_shell ": true," argv ": null," chdir ": null," create ": null," исполняемый файл ": null," remove ": null," stdin ": null, "stdin_add_newline": true, "strip_empty_ends": true, "warn": true}}, "item": "ubuntu", "r c": 0, "start": "2020-04-23 10 : 36: 26.786222 "," stderr ":" "," stderr_lines ": []," stdout ":" 466236fa1676 \ n74d1c2d3effb "," stdout_lines ": [" 466236fa1676 "," 74d1c2d3effb "]}," msg ":" Ошибка создания контейнера: 400 Ошибка клиента: неверный запрос (\ "Неверное имя контейнера (['466236fa1676', '74d1c2d3effb']), только [a-zA-Z0-9] [a-zA-Z0-9 _.-] позволено \ ")"} *

Как сделать il oop с этими значениями из моей зарегистрированной переменной?

"stdout_lines": ["466236fa1676", "74d1c2d3effb"]

1 Ответ

0 голосов
/ 23 апреля 2020

Прямо сейчас вы пытаетесь l oop сверх list_of_containers.results, который является словарем, который содержит различную информацию, связанную с результатами, включая stdout_lines.

, так как вы хотите l oop по строкам вывода замените ваш текущий

loop: "{{ list_of_containers.results }}"

на то, что вы хотите l oop over:

loop: "{{ list_of_containers.results.stdout_lines }}"

и используйте "{{ item }}" в вашей команде docker для имени.

Таким образом:

- name: Restart Docker Service
  docker_container:
   name: "{{ item }}"
   image: ubuntu
   state: started
   restart: yes
  register: result_of_action
  loop: "{{ list_of_containers.results.stdout_lines }}"
...