Ansible команда SED vmware_vm_shell, добавляющая дополнительные символы - PullRequest
0 голосов
/ 01 мая 2019

У меня проблемы с получением правильного ответа.

Я собираю факты о vm, и у меня есть тестовая отладка, которая дает мне правильный mac-адрес для vm.Однако, когда я добавляю запрос в команду sed, добавляются дополнительные символы.

это работает

- name: Get MAC address of VMs to add to eth0 configuration
  debug:
    msg: "{{ vm_guest_facts.results | json_query(s_query) }}"
  vars:
    s_query: "[?instance.hw_name == '{{ item }}'].instance.hw_eth0.macaddress"
  with_items: "{{ inventory_hostname }}"

вывод

ok: [server1] => (item=server1) => {
    "msg": [
        "00:50:56:80:e0:a1"
    ]

это не удается

- name: fix network phase 2 - replace template MAC
  vars:
    s_query: "[?instance.hw_name == '{{ item }}'].instance.hw_eth0.macaddress"
  vmware_vm_shell:
    hostname: '{{ deploy_vsphere_host }}'
    username: '{{ deploy_vsphere_user }}'
    password: '{{ deploy_vsphere_password }}'
    datacenter: "{{ vsphere_datacenter }}"
    validate_certs: no
    vm_id: "{{ item }}"
    vm_username: xxx
    vm_password: xxx
    vm_shell: '/bin/sed'
    vm_shell_args: " -i.bak 's/^HWADDR.*/HWADDR={{ vm_guest_facts.results | json_query(s_query) }}/' /etc/sysconfig/network-scripts/ifcfg-eth0"
  with_items:
    - "{{ inventory_hostname }}"
  delegate_to: localhost 

вывод (отрывается)

"vm_id": "server1", 
"vm_id_type": "vm_name", 
"vm_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", 
"vm_shell": "/bin/sed", 
"vm_shell_args": " -i.bak 's/^HWADDR.*/HWADDR=[u'00:50:56:80:e0:a1']/' /etc/sysconfig/network-scripts/ifcfg-eth0", 
 "vm_shell_cwd": null, 
"vm_shell_env": null, 
"vm_username": "xxx", 
"wait_for_process": false

Mac-адрес в последней строке получает лишние [u в начале и] в конце.

Есть ли способ исправить это или кто-то может помочь мне с помощью строки sed удалить эти лишние символыв дополнительном шаге.

Спасибо,

Кейн.

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Я отказался от попытки [0] в нескольких местах и ​​несколько раз.

Вот исправление чит / грязные проблемы для этой конкретной проблемы:

" -i.bak 's/^HWADDR.*/HWADDR={{ vm_guest_facts.results | json_query(s_query)| regex_replace(']') | regex_replace('\\[u') }}/' /etc/sysconfig/network-scripts/ifcfg-eth0"
0 голосов
/ 02 мая 2019

Любая задача with_items всегда имеет список результатов, и вы можете видеть это в выводе msg:, содержащем список Python символов [ и ]. Таким образом, vm_guest_facts.results | json_query() требуется либо [0], либо | first, добавленный к нему, чтобы преобразовать его в one вещь

...