web-dev-qa-db-ja.com

Ansibleを使用して、特定の場所にある各ファイルに対してアクションを実行するにはどうすればよいですか?

アプリケーション自体の前にいくつかの前提条件(Visual C++ランタイムとdotNetフレームワーク)をインストールする必要があるWindowsアプリケーションを展開するためのプレイブックを作成しています。これらの前提条件は.EXEファイルであり、すべて特定のフォルダーに含まれています。

(特に)パラメータ「/ install/passive」を使用して、必須フォルダ内の各.EXEファイルを実行するAnsibleプレイブックを作成したい

プレイブックで各ファイル名を指定する必要はありません。

私のアイデアは、最初に「win_file」モジュールを使用して前提条件のセットアップファイルを見つけ、その結果を変数に割り当て、変数を反復処理して、含まれるファイルごとに「win_command」モジュールを実行することでした。

残念ながら、registerステートメントを使用してwin_findの結果を変数に割り当てることはできません。それは、単に何もしません。

これが私が試したものです:

- hosts: "{{ target }}"

  tasks:

  - name: Find files in path
    win_find:
      register: myvar
      paths: E:\Temp\Prognosis_11.2\Prerequisites

  - name: debug
    debug:
      msg: "{{ myvar }}"

そして、-v(詳細モード)で実行したときのプレイブックの出力:

タスク[パス内のファイルを検索] ******************************************* ************************************************** ************************************************** ***********

ok:[SMN001] => {"changed":false、 "examined":5、 "files":[{"attributes": "Archive"、 "checksum": "3049a85843eaf65e89e2336d5fe6e85e416797be"、 "creationtime":1550942958.6690862、 "extension ":"。exe "、"ファイル名 ":" NDP46-KB3045557-x86-x64-AllOS-ENU.exe "、" isarchive ":true、" isdir ":false、" ishidden ":false、" islnk ":false 、 "isreadonly":false、 "isshared":false、 "lastaccesstime":1550942958.6690862、 "lastwritetime":1459427148、 "owner": "BUILTIN\Administrators"、 "path": "E:\ Temp\Prognosis_11.2\Prerequisites\NDP46-KB3045557-x86-x64-AllOS-ENU.exe "、" size ":65444688}、{" attributes ":" Archive "、" checksum ":" 8bf41ba9eef02d30635a10433817dbb6886da5a2 "、" creationtime ":1550942958.7627323、" extension " ".exe"、 "filename": "vcredist2013_x64.exe"、 "isarchive":true、 "isdir":false、 "ishidden":false、 "islnk":false、 "isreadonly":false、 "isshared":false 、 "lastaccesstime":1550942958.7627323、 "lastwritetime":1489501866、 "owner": "BUILTIN\Administrators"、 "path": "E:\ Temp\Prognosis_11.2\Prerequisite s\vcredist2013_x64.exe "、" size ":7194312}、{"属性 ":"アーカイブ "、"チェックサム ":" df7f0a73bfa077e483e51bfb97f5e2eceedfb6a3 "、"作成時間 ":1550942958.7779777、"拡張子 ":"。exe "vcredist2013_x86.exe"、 "isarchive":true、 "isdir":false、 "ishidden":false、 "islnk":false、 "isreadonly":false、 "isshared":false、 "lastaccesstime":1550942958.7779777、 "lastwritetime ":1489501866、"所有者 ":" BUILTIN\Administrators "、"パス ":" E:\ Temp\Prognosis_11.2\Prerequisites\vcredist2013_x86.exe "、"サイズ ":6503984}、{"属性 ":"アーカイブ " 、 "チェックサム": "007064d974a55940838f19cd0b0e3aaf27ca06a7"、 "creationtime":1550942958.7939014、 "extension": ".exe"、 "filename": "vcredist2017_x64.exe"、 "isarchive":true、 "isdir":false、 "ishidden": false、 "islnk":false、 "isreadonly":false、 "isshared":false、 "lastaccesstime":1550942958.7939014、 "lastwritetime":1488965662、 "owner": "BUILTIN\Administrators"、 "path": "E:\ Temp\Prognosis_11.2\Prerequisites\vcredist2017_x64.exe "、" size ":15261400}、{" attrib utes ":"アーカイブ "、"チェックサム ":" ba1f7e7cace62f7c55ab948cd3b29acc4e8e2329 "、" creationtime ":1550942958.8406758、" extension ":" .exe "、" filename ":" vcredist2017_x86.exe "、" isarchive ":true、" isdir false、「ishidden」:false、「islnk」:false、「isreadonly」:false、「isshared」:false、「lastaccesstime」:1550942958.8406758、「lastwritetime」:1488965662、「所有者」:「BUILTIN\Administrators」、「パス":" E:\ Temp\Prognosis_11.2\Prerequisites\vcredist2017_x86.exe "、" size ":14401656}]、" matched ":5}

タスク[デバッグ] ********************************************** ************************************************** ************************************************** *********************

致命的:[SMN001]:失敗しました! => {"msg": "タスクに未定義の変数を持つオプションが含まれています。エラーは次のとおりです: 'myvar'は未定義です\ n\nエラーは '/etc/ansible/playbooks/test_find_files.yaml'にあったようです:行18、列5。ただし、正確な構文の問題によっては、\ nファイルの別の場所にある可能性があります。\ n\n問題の行は次のようです:\ n\n\n-名前:デバッグ\ n ^ここ\ n "}

ご覧のとおり、ファイルは適切に検出されていますが、「myvar」変数は割り当てられているはずですが、存在していません。

このページによると、このロジックはLinuxホストで機能するようです: http://www.mydailytutorials.com/using-ansible-find-module-search-filesfolder/ (ref "ファイルの保存ページ下部の「レジスター内の名前」)。

Win_findモジュール自体に問題があるのでしょうか。何かご意見は?

ありがとう!

3
GuillaumeN

それは単なるタイプミスです、あなたのregister:インデントが大きすぎます。

次のように表示されます。

  - name: Find files in path
    win_find:
      paths: E:\Temp\Prognosis_11.2\Prerequisites
    register: myvar
7
Michael Hampton