2017-10-06 2 views
0

Ich stelle eine Azure ARM-Vorlage über Ansible playbook bereit, die gut zu funktionieren scheint. Ich möchte jedoch die Möglichkeit hinzufügen, zwei PowerShell-Skripts auszuführen, nachdem die Maschine bereitgestellt wurde . Ich habe bereits eine benutzerdefinierte Skript-Erweiterung ausgeführt, wenn die Maschine über die ARM-Vorlage bereitgestellt wird, aber ich möchte auch 2 weitere Powershell-Skripts ausführen.Nach der Bereitstellung der ARM-Vorlage über Ansible können keine zwei Powershell-Skripts ausgeführt werden

My Playbook:

--- 
- name: Deploy Azure ARM template. 
    hosts: localhost 
    connection: local 
    gather_facts: false 

    vars_files: 
    - ./vars/vault.yml 
    - ./vars/vars.yml 

    tasks: 
    - include_vars: vault.yml 
    - name: Create Azure Deploy 
     azure_rm_deployment: 
     client_id: "{{ client_id }}" 
     secret: "{{ secret }}" 
     subscription_id: "{{ subscription_id }}" 
     tenant: "{{ tenant }}" 
     state: present 
     resource_group_name: AnsibleTest1 
     location: UK South 
     template: "{{ lookup('file', 'WindowsVirtualMachine.json') }}" 
     parameters: "{{ (lookup('file', 'WindowsVirtualMachine.parameters.json') | from_json).parameters }}" 

    - name: Run powershell script 
     script: files/helloworld1.ps1 

    - name: Run powershell script 
     script: files/helloworld2.ps1 

Und der Fehler nach die Vorlage erfolgreich bereitstellen:

TASK [Run powershell script] *************************************************************************************************************************************************************************** 
task path: /home/beefcake/.ansible/azure-json-deploy.yml:25 
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: beefcake 
<127.0.0.1> EXEC /bin/sh -c 'echo ~ && sleep 0' 
<127.0.0.1> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230 `" && echo ansible-tmp-1507219682.48-53342098196230="` echo /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230 `") && sleep 0' 
<127.0.0.1> PUT /home/beefcake/.ansible/files/helloworld1.ps1 TO /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1 
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/ /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1 && sleep 0' 
<127.0.0.1> EXEC /bin/sh -c ' /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1 && sleep 0' 
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/ > /dev/null 2>&1 && sleep 0' 
fatal: [localhost]: FAILED! => { 
    "changed": true, 
    "failed": true, 
    "msg": "non-zero return code", 
    "rc": 127, 
    "stderr": "/home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1: 1: /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1: =: not found\n/home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1: 2: /home/beefcake/.ansible/tmp/ansible-tmp-1507219682.48-53342098196230/helloworld1.ps1: Set-Content: not found\n", 
    "stdout": "", 
    "stdout_lines": [] 
} 
    to retry, use: --limit @/home/beefcake/.ansible/azure-json-deploy.retry 

PLAY RECAP ********************************************************************************************************************************************************************************************* 
localhost     : ok=2 changed=1 unreachable=0 failed=1 

Soweit ich das beurteilen kann, sollte das Textbuch Skript Option, um das Skript schicken die Maschine und führen Sie es lokal aus, aber aus irgendeinem Grund kann es das Skript nicht finden, das ich in einem Unterordner des Playbooks habe.

Ordnerstruktur:

.ansible (folder) 
    - ansible.cfg 
    - azure-json-deploy.yml 
    - azure_rm.ini 
    - azure_rm.py 
    - WindowsVirtualMachine.json 
    - WindowsVirtualMachine.parameters.json 
    - vars (folder) 
    - vars.yml 
    - vault.yml 
    - files (folder) 
    - helloworld1.ps1 
    - helloworld2.ps1 

bin ich etwas fehlt?

bearbeiten Dies ist das 2. Spielbuch, das ich erstellt habe, das 4c74356b41 riet mir zu tun.

--- 
# This playbook tests the script module on Windows hosts 
- name: Run powershell script 1 
    hosts: localhost 
    connection: local 
    gather_facts: false 
    tasks: 
    - name: Run powershell script 
     script: files/helloworld1.ps1 
# This playbook tests the script module on Windows hosts 
- name: Run powershell script 2 
    hosts: localhost 
    connection: local 
    gather_facts: false 
    tasks: 
    - name: Run powershell script 
     script: files/helloworld2.ps1 

die immer noch die gleichen Fehler erzeugt:

fatal: [localhost]: FAILED! => { 
    "changed": true, 
    "failed": true, 
    "msg": "non-zero return code", 
    "rc": 127, 
    "stderr": "/home/beefcake/.ansible/tmp/ansible-tmp-1507288326.16-187870805725578/helloworld1.ps1: 1: /home/beefcake/.ansible/tmp/ansible-tmp-1507288326.16-187870805725578/helloworld1.ps1: =: not found\n/home/beefcake/.ansible/tmp/ansible-tmp-1507288326.16-187870805725578/helloworld1.ps1: 2: /home/beefcake/.ansible/tmp/ansible-tmp-1507288326.16-187870805725578/helloworld1.ps1: Set-Content: not found\n", 
    "stdout": "", 
    "stdout_lines": [] 
} 
    to retry, use: --limit @/home/beefcake/.ansible/azure-json-deploy.retry 
+0

Bevor Sie Ansible verwenden können, müssen Sie WinRM auf dem Windows-Computer aktivieren, das Verbindungsprofil auf der Netzwerkschnittstelle ändern, möglicherweise FW (Windows und Azure) konfigurieren und optional SSL-Zertifikate konfigurieren. Gemessen an Ihren Posts und Bearbeitungen tun Sie das wahrscheinlich nicht in Ihrer Vorlage, das ist Ihnen wahrscheinlich gar nicht bewusst. Wie beim Ausführen von PowerShell-Skripts - ich würde vorschlagen, die Vorlage so zu modifizieren, dass die DSC-Erweiterung anstelle von Ansible verwendet wird (Sie müssen die Instanz trotzdem für WinRM-Verbindungen vorbereiten) - es gibt Beispiele für GitHub Azure-Schnellstartvorlagen. – techraf

Antwort

0

Was ansible versucht zu tun ist, um die Datei von localhost kopieren auf localhost. Weil das Spiel auf localhost beschränkt ist.

Ich würde mir vorstellen, dass Sie nicht diesen Host in der Hosts-Datei haben, wenn Sie das Playbook starten.
Sie müssen den Host zu ansible und scope script tasks zu diesem Host hinzufügen.

Sie können entweder ein anderes playbook dafür erstellen oder einen add_host-Schritt in den aktuellen hinzufügen.

- add_host: 
    name: name 

Zum Umfang Aufgaben an die neuen Hosts ich import_playbook Richtlinie bin mit, die einen anderen Textbuch importiert, die auf dem Host (s) in Frage scoped ist. Es könnte einen besseren Weg geben.

+0

Ich habe die Ansible-Dokumentation auf ihrer Website und ein paar Beispiele online angeschaut. Von dem, was ich sagen kann, muss ich '- import_playbook: imported.yml' am Ende meines Spiels platzieren, aber es wird mir ein Fehler angezeigt: ** META: ran handlers. META: ran handlers ERROR! das Feld 'hosts' ist erforderlich, wurde aber nicht gesetzt ** Also habe ich 'hosts: localhost' unter import_playbook gesetzt, aber das bringt auch einen Fehler: ** ERROR! 'hosts' ist kein gültiges Attribut für ein PlaybookInclude **. Kannst du mir bitte ein Beispiel geben, wo ich das import_playbook ablegen soll? – Beefcake

+0

Sie müssen ein separates Playbook erstellen, das das macht, was Sie tun möchten (führen Sie 2 Skripte aus). Es sollte so aussehen wie das, was Sie haben, also haben Sie Namen, Hosts, Aufgaben usw. – 4c74356b41

+0

Ich habe mein zweites Playbook wie empfohlen geändert (siehe oben), aber es zeigt immer noch auf eine temporäre Position ... – Beefcake

Verwandte Themen