2017-10-06 14 views
0

私はAzure ARMテンプレートをAniableプレイブックで配布していますが、これはうまくいくようですが、マシンの展開後に2x Powershellスクリプトを実行する機能を追加したい。マシンがARMテンプレートを介してデプロイされているときにカスタムスクリプト拡張が既に実行されていますが、後で2つのPowershellスクリプトを実行したいと考えています。2x Powershellスクリプトを実行できない

マイ脚本:が正常にテンプレートを展開した後

--- 
- 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 

とエラー

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 

私の知る限り、脚本スクリプトオプションにスクリプトを送信する必要がありますマシンをローカルに実行しますが、なんらかの理由で、私がプレイブックのサブフォルダにあるスクリプトを見つけることができません。

フォルダ構造:

.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 

私は何かが足りないのですか?

編集 これは私が作成した2番目のプレイブックです4c74356b41とお伝えしました。まだ同じエラーが発生し

--- 
# 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 

:やろうとしている何ansible

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

Ansibleを使用するには、WindowsマシンでWinRMを有効にし、ネットワークインターフェイスで接続プロファイルを変更し、FW(WindowsとAzureの両方)を構成し、必要に応じてSSL証明書を構成する必要があります。あなたのポストと編集から判断すると、あなたのテンプレートでそれをやっていないかもしれませんが、あなたはおそらくそのことを知らないでしょう。 PowerShellスクリプトを実行する場合は、Anativesの代わりにDSC拡張を使用するようにテンプレートを変更することをお勧めします(WinRM接続用のインスタンスを準備するためにはそれを行う必要があります)。GitHub Azureクイックスタートテンプレートの例があります。 – techraf

答えて

0

をローカルホストにローカルホストからファイルをコピーしています。プレイはローカルホストにスコープされているためです。

プレイリストを起動すると、ホストファイルにそのホストが存在しないと思います。
ホストを、そのホストに対する安全なスコープのスクリプトタスクに追加する必要があります。

これを行うための別のプレイブックを作成することも、現在のプレイリストにadd_hostステップを追加することもできます。私は問題のホスト(複数可)にスコープされている別の脚本をインポートimport_playbookディレクティブを、使用している新しいホストへのスコープのタスクに

- add_host: 
    name: name 

。より良い方法があるかもしれません。

+0

私はWebサイト上のAnipalのドキュメントとオンラインでのいくつかの例を見てきました。私がしなければならないことは、演劇の最下部に ' - import_playbook:imported.yml'を置くことです。しかし、エラーが表示されます:** META:ハンドラーを実行しました。 META:ハンドラーを実行しましたエラー!フィールド 'hosts'は必要ですが設定されていませんでした。** import_playbookの下に 'hosts:localhost'を配置しましたが、それもエラーを表示します:** ERROR! 'hosts'はPlaybookInclude **の有効な属性ではありません。あなたはimport_playbookをどこに置くべきかの例を教えてください。 – Beefcake

+0

あなたがしたいことをする別のプレイブックを作成する必要があります(2つのスクリプトを実行する)。 – 4c74356b41

+0

私は2番目のプレイブックをアドバイスした通り(上記参照)修正しましたが、それでもまだ一時的な場所を指しています... – Beefcake

関連する問題