Как получить список установленного программного обеспечения с хоста Windows, используя пользовательский факт в Ansible - PullRequest
1 голос
/ 12 марта 2019

Я создал сценарий Powershell для создания пользовательских фактов Ansible на целевом компьютере с Windows, где указано установленное программное обеспечение. На данный момент я не могу правильно проанализировать мой список программного обеспечения в моей книге игр.

Я могу видеть необработанное содержимое пользовательских фактов, но кажется, что JSON неправильно проанализирован, потому что я не могу получить правильный объект списка для обработки оператором цикла. Произошла фатальная ошибка:

Задача включает в себя параметр с неопределенной переменной. Ошибка была следующей: «ansible.utils.unsafe_proxy.AnsibleUnsafeText объект» не имеет атрибута «name» \ n \ n

Все пользовательские факты (то есть список программного обеспечения Windows, сгенерированный пользовательским фактом Powershell) автоматически сохраняются Ansible в автоматически генерируемой переменной / атрибуте ansible_facts, называемом ansible_softwarelist (суффикс ansible_ + имя моего файла фактов без расширения).

Пользовательский факт (Powershell)

$software = get-wmiobject -class Win32_Product | select-object name,version,vendor
$software_count = ($software | measure).count
$software_list | % { `
    $i++

    if ($i -lt ($software_count-1))
    {
        $separator = ","
    }
    else
    {
        $separator = ""
    }

    write-host "{`"name`":`"$($_.name)`",`"version`":`"$($_.version)`",`"vendor`":`"$($_.vendor)`"}$separator"

}

Необработанный выход Powershell

{"name":"Software 1","version":"14.0.7015.1000","vendor":"Vendor 1"},
{"name":"Software 2","version":"14.1.1000","vendor":"Vendor 1"},
{"name":"Software 3","version":"1.5.2","vendor":"Vendor 1"}

Ansible playbook

tasks:         

     - name: "Deploy Powershell script (custom Windows facts)"
       win_copy:
         src: "/etc/ansible/files/facts/softwarelist.ps1"
         dest: "C:\\remotedir\\softwarelist.ps1"

     - name: "Gather custom facts"
       setup:
         fact_path: "C:\\remotedir"

     - name: "View software list in Ansible by name"
       debug:
         msg: "{{ item.name }}"  
       loop: "{{ ansible_softwarelist }}"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...