2017-04-27 8 views
1

セットアップに関するいくつかのコンテキストを提供するために、VirtualBoxをプロバイダとして使用してPackerを使用してWindows 8.1(x64)VMをスピンアップしようとしています。ローカルのMacbook。私はすでに正常に動作するPacker(Ansibleプロビジョナなし)でWindowsビルドをテストしました。Packerに問題があるWindows用のプロビジョニング8.1仮想マシン内のVM

しかし、私が(おそらくローカルではない)有能なプロビジョナリを使用しようとすると、私はそうすることができません。私は、packer docsで指定されているようにPackerビルドを設定しました:https://www.packer.io/docs/provisioners/ansible.html。 Windows VMの最初の起動時にhttp://docs.ansible.com/ansible/intro_windows.html#windows-system-prepに記載されているConfigureRemotingForAnsible.ps1も実行します。

マイハイテクスタックのバージョンは次のとおりです。

  • パッカー1.0.0
  • Ansible 2.3.0.0
  • のPython 2.7.11
  • pywinrm 0.2.2
  • のVirtualBox 5.1.20

packer.jsonファイルは次のとおりです。

{ 
    "builders": [ 
    { 
     "type": "virtualbox-iso", 
     "iso_url": "{{ user `iso_url` }}", 
     "iso_checksum_type": "sha1", 
     "iso_checksum": "{{ user `iso_checksum` }}", 
     "communicator": "winrm", 
     "headless": "{{ user `headless` }}", 
     "boot_wait": "9m", 
     "winrm_use_ssl": true, 
     "winrm_insecure": true, 
     "winrm_host": "127.0.0.1", 
     "winrm_port": 5986, 
     "winrm_username": "packer", 
     "winrm_password": "packer", 
     "winrm_timeout": "8h", 
     "shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"", 
     "guest_os_type": "Windows81_64", 
     "guest_additions_mode": "disable", 
     "floppy_files": [ 
     "./answer_files/81/Autounattend.xml", 
     "./scripts/enable-winrm.ps1", 
     "./scripts/ConfigureRemotingForAnsible.ps1" 
     ], 
     "vboxmanage": [ 
     [ "modifyvm", "{{.Name}}", "--natpf1", "winrm,tcp,,5986,,5986" ], 
     [ "modifyvm", "{{.Name}}", "--memory", "4096" ], 
     [ "modifyvm", "{{.Name}}", "--vram", "32" ], 
     [ "modifyvm", "{{.Name}}", "--cpus", "2" ] 
     ] 
    } 
    ], 
    "provisioners": [ 
    { 
     "type": "ansible", 
     "playbook_file": "./provisioner/run-powershell.yml", 
     "local_port": "5986", 
     "user": "packer", 
     "extra_arguments": [ 
     "-vvvv", 
     "--connection", "packer", 
     "--extra-vars", "ansible_shell_type=powershell ansible_shell_executable=None" 
     ] 
    } 
    ], 
    "post-processors": [ 
    { 
     "type": "vagrant", 
     "keep_input_artifact": true, 
     "output": "output-formats/windows_81_{{.Provider}}.box", 
     "vagrantfile_template": "vagrantfile-windows_81.template" 
    } 
    ], 
    "variables": { 
    "headless": "false", 
    "iso_checksum": "CHECKSUM_VALUE", 
    "iso_url": "/path/to/iso" 
    } 
} 

実行powershell.yml脚本は次のとおりです。

# This playbook tests the script module on Windows hosts 

- name: Run Ansible play 
    hosts: all 
    gather_facts: no 
    tasks: 
    - name: Ping windows machine 
     win_command: cmd.exe /c powershell -Command "Write-Host 'Hello World!'" 
# - name: Ping windows machine 
#  win_ping: 
# - name: Create a file 
#  win_file: 
#  path: "C:\\Windows\\Temp\\ansible_test.txt" 
#  state: touch 
# - name: Run powershell script 
#  script: a:\helloworld.ps1 

packer.logに見られるように、エラーの最後の抜粋です:ansible Windowsタスクの

ui: [0;32m virtualbox-iso: <127.0.0.1> (1, '{"exception":"At C:\\\\Users\\\\packer\\\\AppData\\\\Local\\\\Temp\\\\ansible-tmp-1493195766.64-166408222728325\\\\win_command.ps1:25 char:16\\r\\n+ $parsed_args = Parse-Args $args $false\\r\\n+    ~~~~~~~~~~","msg":"The term \\u0027Parse-Args\\u0027 is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.","failed":true}\r\n', 'OpenSSH_6.9p1, LibreSSL 2.1.8\r\ndebug1: Reading configuration data /Users/mk/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 21: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 7498\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\nShared connection to 127.0.0.1 closed.\r\n')[0m 
ui: [0;32m virtualbox-iso: The full traceback is:[0m 
ui: [0;32m virtualbox-iso: At C:\Users\packer\AppData\Local\Temp\ansible-tmp-1493195766.64-166408222728325\win_command.ps1:25 char:16[0m 
ui: [0;32m virtualbox-iso: + $parsed_args = Parse-Args $args $false[0m 
ui: [0;32m virtualbox-iso: +    ~~~~~~~~~~[0m 
ui: [0;32m virtualbox-iso: fatal: [default]: FAILED! => {[0m 
ui: [0;32m virtualbox-iso:  "changed": false,[0m 
ui: [0;32m virtualbox-iso:  "failed": true,[0m 
ui: [0;32m virtualbox-iso:  "msg": "The term 'Parse-Args' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again."[0m 
ui: [0;32m virtualbox-iso: }[0m 
ui: [0;32m virtualbox-iso: to retry, use: --limit @/Users/mk/Workspace/packer/win81/provisioner/run-powershell.retry[0m 
ui: [0;32m virtualbox-iso:[0m 
ui: [0;32m virtualbox-iso: PLAY RECAP *********************************************************************[0m 
ui: [0;32m virtualbox-iso: default     : ok=0 changed=0 unreachable=0 failed=1[0m 
ui: [0;32m virtualbox-iso:[0m 
packer: 2017/04/26 18:36:31 shutting down the SSH proxy 
packer: 2017/04/26 18:36:31 Executing VBoxManage: []string{"controlvm", "packer-virtualbox-iso-1493195197", "poweroff"} 

なし( Windows VM上で.ps1として実行されます)が実行可能で、上記と同じエラーが表示されます(私のプレイブックのコメント行を参照)。 Parse-Argsコマンドレットにはすべてエラーがありますが、これはPowershellの標準機能ですが、何らかの理由でWindows 8.1 vmで認識されません。

FYI:ポート5985(SSLなし)でwinrmを実行してみましたが、同じエラーが発生しました。

この問題を解決するためのお手伝いがあれば、幸いです。

+0

wthは 'parse-args'ですか? – 4c74356b41

+0

これは標準のPowerShellコマンドレットではありませんが、おそらくAnsibleに付属しているようです。これはGitの次の場所にあります:https://github.com/technolo-g/ansible_venv/blob/master/lib/python2.7/site-packages/ansible/module_utils/powershell.ps1 –

+0

"可能なJSON引数を解析するヘルパー関数単一の引数としてモジュールに渡されたファイルから、 " –

答えて

1

この同じ正確な問題を抱えていた。最近のバージョンのAnsibleで何かが壊れていることがわかりました。私は2.2.2に私のAnsibleインストールをダウングレードし、Packerのドキュメントに従って期待どおりに動作しています。

+0

Thanks @ Ricardo Herrera、これで問題は解決しました。どのようにしてAnsibleバージョンに絞ることができたのか不思議です。 – mk7

+0

@ mk7 https://github.com/hashicorp/packer/issues/4904 –

関連する問題