cmprescott.xml
ansible-xml
Ansibleモジュールは、XMLファイルや文字列の一部を操作するためのものです。このモジュールは現在、Ansibleの開発版にあります。Ansible 2.4.0の一部として9月中旬にリリースされる予定です。そのため、すべての問題はansibleに報告してください。
インストール
- このモジュールは、バージョン2.3以上の
libxml
用のPythonバインディングが必要です。通常は、python-lxml
というパッケージに含まれています。apt-get install python-lxml
,yum install python-lxml
またはpip install lxml
でインストールできます。 - このモジュールは、Ansible v2.3以下には含まれていません。
git clone https://github.com/cmprescott/ansible-xml.git
でインストールするか、ansible-galaxy install cmprescott.xml
でインストールします。正しいインストールパスは、プレイブックのライブラリディレクトリ、プレイブックのロールディレクトリに含めて、またはAnsibleのモジュールパスです。
ノート
- このモジュールは、@github_rhinceptionによって作成されました。
- 2015-05-05に、@tbielawaがプロジェクトを@cmprescottに移管し、issue #16を解決しました。
- 2017-08-08に、このモジュールはAnsibleに統合されました。
- このソフトウェアは、GPLv3ライセンスの条件の下で利用可能です。
- こんにちは、ユニットテストがあります!
XPathとは?
"XPathは、XMLドキュメント内のノードまたはノードセットを選択するために、パス式を使用します。ノードは、パスまたはステップに従って選択されます。"
基本的には、特定の要素や属性をXMLファイルから選択するための構文です。
Mozilla Developer Networkで詳しく学ぶ
ユニットテスト
このリポジトリには、ユニットテストも含まれています。必要に応じて、いくつかの例として、Travis-CIの設定も参照してください。
例
次のXMLを与えられた場合:
<?xml version='1.0' encoding='UTF-8'?>
<business type="bar">
<name>Tasty Beverage Co.</name>
<beers>
<beer>Rochefort 10</beer>
<beer>St. Bernardus Abbot 12</beer>
<beer>Schlitz</beer>
</beers>
<rating subjective="true">10</rating>
<website>
<mobilefriendly />
<address>http://tastybeverageco.com</address>
</website>
</business>
評価要素のsubjective
属性を削除します:
xml:
path: /foo/bar.xml
xpath: /business/rating/@subjective
state: absent
評価を11に設定します。
xml:
path: /foo/bar.xml
xpath: /business/rating
value: 11
ビールノードのカウントを取得します。
xml:
path: /foo/bar.xml
xpath: /business/beers/beer
count: yes
register: hits
debug:
var: hits.count
business
要素にphonenumber
要素を追加します(該当する場合はmkdir -p
動作を暗黙的に行います)。
xml:
path: /foo/bar.xml
xpath: /business/phonenumber
value: 555-555-1234
新しいビールのリストをbeers
要素に追加します。vars.yamlファイルには次のように記述します:
new_beers:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
次に、プレイブックの構文は次のようになります:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children: '{{ new_beers }}'
同じことをインラインで行います:
xml:
path: /foo/bar.xml
xpath: /business/beers
add_children:
- beer: "Old Rasputin"
- beer: "Old Motor Oil"
- beer: "Old Curmudgeon"
website
要素にvalidxhtml
要素を追加します。ここで、state
はデフォルトでpresent
であり、value
は要素に対してデフォルトでnull
です。結果は<website><validxhtml />...</website>
のようになります。
xml:
path: /foo/bar.xml
xpath: /business/website/validxhtml
validxhtml
要素に空のvalidatedon
属性を追加します。実際、この最後の例は、暗黙の親ノード作成動作のために冗長になります。結果は<website><validxhtml validatedon='' />...</website>
のようになります。
(1/2) website
要素からすべての子要素を削除します:
xml:
path: /foo/bar.xml
xpath: /business/website/*
state: absent
(2/2) website
要素からすべての子要素を削除します:
xml:
path: /foo/bar.xml
xpath: /business/website
children: []
質問がありますか?もし<beers><child01 /><child02 /></beers>
がある場合、次のように言ったらどうなりますか:
xml:
path: /foo/bar.xml
xpath: /beers
value
は要素に対してデフォルトであるため、これにより子要素が削除されます。