2016-11-15 5 views
0

После того, как я ударил головой о стол на пару дней. Вот где я.Доступ к вложенным результатам команды Ansible приводит к списку

Цель: Создайте запись в файле/etc/fstab, используя «UUID =» в качестве точки монтирования.

В этом случае будет й количеством дисков на у числа хостов так просто положить информацию в файле Варс, к сожалению, не возможно. Также не будет никаких разделов или lvms, для этого приложения нам нужен JBOD с файловыми системами.

Мой подход: После нескольких проб и ошибок я достиг точки, где мои диски все отформатированные и они имеют UUID-х. Поэтому я пытаюсь зациклиться на своих устройствах, а затем вернуть свой UUID, чтобы использовать модуль монтирования для добавления в fstab.

Застрял в: После получения моего списка устройств лучшим способом, который я открыл для создания списка UUID устройства, является использование команды blkid и регистрация результатов. (см. ниже). Я думал, что если бы я мог получить доступ к вложенному UUID в 'results2'. Затем я мог бы свести имя устройства/UUID в новый факт для более легкого доступа позже.

####### 
#get new facts 
####### 

- command: "/sbin/blkid -o device" 
    register: "result1" 

- shell: '/sbin/blkid "{{ item }}" -o value' 
    register: "result2" 
    with_items: "{{ result1.stdout_lines }}" 

#- debug: var="{{ result2.results }}" 

- debug: "{{item}}" 
    with_together: 
    - "{{result1.stdout_lines}}" 
    - "{{result2.results}}" 

Выход

PLAY [disk-test-node] ********************************************************** 

TASK [setup] ******************************************************************* 
ok: [31.212.212.123] 

TASK [common : set_fact] ******************************************************* 
task path: /ansible/roles/common/tasks/main.yml:5 
ok: [31.212.212.123] => (item={u'uuid': u'', u'size_total': 8319852544, u'mount': u'/', u'size_available': 7187308544, u'fstype': u'ext4', u'device': u'/dev/xvda1', u'options': u'rw'}) => {"ansible_facts": {"mounted_drives": "/dev/xvda1"}, "changed": false, "item": {"device": "/dev/xvda1", "fstype": "ext4", "mount": "/", "options": "rw", "size_available": 7187308544, "size_total": 8319852544, "uuid": ""}} 

TASK [common : command] ******************************************************** 
task path: /ansible/roles/common/tasks/main.yml:39 
changed: [31.212.212.123] => {"changed": true, "cmd": ["/sbin/blkid", "-o", "device"], "delta": "0:00:00.003729", "end": "2016-11-15 22:11:13.348422", "rc": 0, "start": "2016-11-15 22:11:13.344693", "stderr": "", "stdout": "/dev/xvda1\n/dev/xvdd\n/dev/xvde\n/dev/xvdb\n/dev/xvdc\n/dev/xvdh\n/dev/xvdi\n/dev/xvdf\n/dev/xvdg", "stdout_lines": ["/dev/xvda1", "/dev/xvdd", "/dev/xvde", "/dev/xvdb", "/dev/xvdc", "/dev/xvdh", "/dev/xvdi", "/dev/xvdf", "/dev/xvdg"], "warnings": []} 

TASK [common : command] ******************************************************** 
task path: /ansible/roles/common/tasks/main.yml:42 
changed: [31.212.212.123] => (item=/dev/xvda1) => {"changed": true, "cmd": "/sbin/blkid \"/dev/xvda1\" -o value", "delta": "0:00:00.002619", "end": "2016-11-15 22:11:15.693323", "item": "/dev/xvda1", "rc": 0, "start": "2016-11-15 22:11:15.690704", "stderr": "", "stdout": "cdbab22a-45d6-4cce-95a3-681f42187a46\next4", "stdout_lines": ["cdbab22a-45d6-4cce-95a3-681f42187a46", "ext4"], "warnings": []} 
changed: [31.212.212.123] => (item=/dev/xvdd) => {"changed": true, "cmd": "/sbin/blkid \"/dev/xvdd\" -o value", "delta": "0:00:00.002580", "end": "2016-11-15 22:11:17.984917", "item": "/dev/xvdd", "rc": 0, "start": "2016-11-15 22:11:17.982337", "stderr": "", "stdout": "61b23af1-44dd-46c4-8e4b-2af2bd928f98\next4", "stdout_lines": ["61b23af1-44dd-46c4-8e4b-2af2bd928f98", "ext4"], "warnings": []} 

Ее там! Вы можете увидеть UUID в "стандартный вывод" и "stdout_lines [0]"

Final Debug Loop после спаривания

TASK [common : debug] ********************************************************** 
task path: /ansible/roles/common/tasks/main.yml:48 
ok: [31.212.212.123] => (item=[u'/dev/xvda1', {'_ansible_parsed': True, '_ansible_item_result': True, u'stdout': u'cdbab22a-45d6-4cce-95a3-681f42187a46\next4', '_ansible_no_log': False, u'warnings': [], u'changed': True, u'rc': 0, u'end': u'2016-11-15 22:11:15.693323', u'start': u'2016-11-15 22:11:15.690704', u'cmd': u'/sbin/blkid "/dev/xvda1" -o value', 'item': u'/dev/xvda1', u'delta': u'0:00:00.002619', 'invocation': {'module_name': u'command', u'module_args': {u'warn': True, u'executable': None, u'_uses_shell': True, u'_raw_params': u'/sbin/blkid "/dev/xvda1" -o value', u'removes': None, u'creates': None, u'chdir': None}}, 'stdout_lines': [u'cdbab22a-45d6-4cce-95a3-681f42187a46', u'ext4'], u'stderr': u''}]) => { 
    "<type 'list'>": "VARIABLE IS NOT DEFINED!", 
    "item": [ 
     "/dev/xvda1", 
     { 
      "_ansible_item_result": true, 
      "_ansible_no_log": false, 
      "_ansible_parsed": true, 
      "changed": true, 
      "cmd": "/sbin/blkid \"/dev/xvda1\" -o value", 
      "delta": "0:00:00.002619", 
      "end": "2016-11-15 22:11:15.693323", 
      "invocation": { 
       "module_args": { 
        "_raw_params": "/sbin/blkid \"/dev/xvda1\" -o value", 
        "_uses_shell": true, 
        "chdir": null, 
        "creates": null, 
        "executable": null, 
        "removes": null, 
        "warn": true 
       }, 
       "module_name": "command" 
      }, 
      "item": "/dev/xvda1", 
      "rc": 0, 
      "start": "2016-11-15 22:11:15.690704", 
      "stderr": "", 
      "stdout": "cdbab22a-45d6-4cce-95a3-681f42187a46\next4", 
      "stdout_lines": [ 
       "cdbab22a-45d6-4cce-95a3-681f42187a46", 
       "ext4" 
      ], 
      "warnings": [] 
     } 
    ] 
} 
ok: [31.212.212.123] => (item=[u'/dev/xvdd', {'_ansible_parsed': True, '_ansible_item_result': True, u'stdout': u'61b23af1-44dd-46c4-8e4b-2af2bd928f98\next4', '_ansible_no_log': False, u'warnings': [], u'changed': True, u'rc': 0, u'end': u'2016-11-15 22:11:17.984917', u'start': u'2016-11-15 22:11:17.982337', u'cmd': u'/sbin/blkid "/dev/xvdd" -o value', 'item': u'/dev/xvdd', u'delta': u'0:00:00.002580', 'invocation': {'module_name': u'command', u'module_args': {u'warn': True, u'executable': None, u'_uses_shell': True, u'_raw_params': u'/sbin/blkid "/dev/xvdd" -o value', u'removes': None, u'creates': None, u'chdir': None}}, 'stdout_lines': [u'61b23af1-44dd-46c4-8e4b-2af2bd928f98', u'ext4'], u'stderr': u''}]) => { 
    "<type 'list'>": "VARIABLE IS NOT DEFINED!", 
    "item": [ 
     "/dev/xvdd", 
     { 
      "_ansible_item_result": true, 
      "_ansible_no_log": false, 
      "_ansible_parsed": true, 
      "changed": true, 
      "cmd": "/sbin/blkid \"/dev/xvdd\" -o value", 
      "delta": "0:00:00.002580", 
      "end": "2016-11-15 22:11:17.984917", 
      "invocation": { 
       "module_args": { 
        "_raw_params": "/sbin/blkid \"/dev/xvdd\" -o value", 
        "_uses_shell": true, 
        "chdir": null, 
        "creates": null, 
        "executable": null, 
        "removes": null, 
        "warn": true 
       }, 
       "module_name": "command" 
      }, 
      "item": "/dev/xvdd", 
      "rc": 0, 
      "start": "2016-11-15 22:11:17.982337", 
      "stderr": "", 
      "stdout": "61b23af1-44dd-46c4-8e4b-2af2bd928f98\next4", 
      "stdout_lines": [ 
       "61b23af1-44dd-46c4-8e4b-2af2bd928f98", 
       "ext4" 
      ], 
      "warnings": [] 
     } 
    ] 
} 

ответ

0

Могу ли я посоветовать другое решение?

- shell: "blkid | sed 's/:.*UUID=\"\\([0-9a-f-]\\+\\).*/ \\1/'" 
    register: devs 

- debug: msg="dev={{ item.split()[0] }}, uuid={{ item.split()[1] }}" 
    with_items: "{{ devs.stdout_lines }}" 

Первая задача будет возвращать device_name UUID пары разделенных пробелом.
Во второй задаче используется функция python split(), чтобы получить device_name и UUID как отдельные строки.