Передача списка параметров в Powershell с помощью Ansible - PullRequest
0 голосов
/ 14 мая 2018

У меня есть список параметров в вызове файла YAML vars_sb_task.yml:

---
type: taskWindows
actions:
  abortActions: []
  emailNotifications: []
  setVariableActions: []
  snmpNotifications: []
  systemOperations: []
agent: test
name: "Test"
summary: "Test"
...

У меня есть скрипт Powershell для создания задачи Stonebranch с именем sb.ps1:

function Stonebrach.Connect {
param(
    [Parameter(Mandatory=$true)]
    $Sb_uri,
    [Parameter(Mandatory=$true)]
    $Auth_filename,
    [Parameter(Mandatory=$true)]
    $Method,
    [Parameter(Mandatory=$false)]
    $Body
)

$basicAuth=Get-Content "C:\$auth_filename"
$headers = @{
        "Authorization" = $basicAuth
        "Content-Type"="application/json"
}
$RSP=$null

try{
    if ( $body -eq $null ) {
        $response = invoke-restmethod -Uri $Sb_uri -Method $Method -Headers $headers
    }
    else {
        $response = invoke-restmethod -Uri $sb_uri -Method $method -Headers $headers -Body **$body**
    }
    return $response
}
catch{
   $RSP = $_.Exception.Message
   return $RSP
}
}

function Stonebranch.Create.Task.Windows {
param(
    [Parameter(Mandatory=$true)]
    $Sb_base_uri,
    [Parameter(Mandatory=$true)]
    $Auth_filename,
    [Parameter(Mandatory=$true)]
    $Method,
    [Parameter(Mandatory=$true)]
    $Body
)
    Stonebrach.Connect -SB_uri $Sb_base_uri/task -Auth_filename 
$Auth_filename -Method $Method -Body $Body
}

я хочу вызвать функцию следующим образом:

$response = Stonebranch.Create.Task.Windows -Sb_base_uri $Sb_base_uri -Auth_filename $Auth_filename -Method POST -Body $body

Вот вопрос: я хочу передать все параметры в vars_sb_task.yml в $ body, кто-нибудь знает, как это сделать с помощью Ansible? Так как я собираюсь вставить этот sb.ps1 в другой Сервер Windows, использующий Ansible.

Или вы можете показать мне, как передать этот yml-файл с помощью Powershell, если нет способа использовать Ansible. Я довольно новый в обеих областях, спасибо за вашу помощь.

** Редактировать: я пытался написать книгу с vars_sb_task.yml:

---
- name: test vars file
  hosts: windows
  vars_files:
   - /home/tung/ansible_test/vars_sb_win_task.yml
  tasks:
  - name: test vars
    debug:
      msg: "{{ agent }}"

После того, как я запустил этот playbook, он возвращает 'test', поскольку у моего агента есть значение test. Если это одна переменная, я могу передать ее в скрипт Powershell, но проблема в том, что мне нужно передать все переменные файла yaml в $ body. Я не знаю, что делать отсюда. Я пытаюсь прочитать документацию Ansible, но она не совсем понятна. Было бы неплохо, если бы кто-нибудь мог написать пример, как обрабатывать и передавать эти переменные в файле yaml в одну переменную в Powershell (в этом случае $ body)

1 Ответ

0 голосов
/ 14 мая 2018

Как уже говорилось, вы можете попробовать что-то вроде:

---
- name: test vars file
  hosts: localhost
  vars_files:
   - vars_sb_task.yml
  tasks:

  - name: Add File to var
    set_fact:
      body: "{{ item  }}"
    with_file: "vars_sb_task.yml"

  - name: test vars
    debug:
      msg: "{{ body }}"

  - name: Run PS
    win_shell:  ". script1.ps1; Stonebranch.Create.Task.Windows"
    args: "-Sb_base_uri $Sb_base_uri -Auth_filename $Auth_filename -Method POST -Body {{ body }}"
    register: _out

Первая часть сохранит ваш файл в "{{ body }}" var.Затем вы можете использовать его с win_shell (здесь это только пример того, как загрузить функцию в одну строку).Я не проверял эту последнюю часть.Сначала протестируйте свою команду в Windows, а затем скопируйте в свой код с помощью body var.

Результат body var:

TASK [Add File to var] *********************************************************************************************************
ok: [localhost] => (item=---
type: taskWindows
actions:
  abortActions: []
  emailNotifications: []
  setVariableActions: []
  snmpNotifications: []
  systemOperations: []
agent: test
name: "Test"
summary: "Test")

TASK [test vars] ***************************************************************************************************************
ok: [localhost] => {
    "msg": "---\ntype: taskWindows\nactions:\n  abortActions: []\n  emailNotifications: []\n  setVariableActions: []\n  snmpNotifications: []\n  systemOperations: []\nagent: test\nname: \"Test\"\nsummary: \"Test\""
}
...