これlxd_container
基準寸法Ansible 2.5 には次の例が含まれています。
# An example for creating a Ubuntu container and install python
- hosts: localhost
connection: local
tasks:
- name: Create a started container
lxd_container:
name: mycontainer
state: started
source:
type: image
mode: pull
server: https://images.linuxcontainers.org
protocol: lxd
alias: ubuntu/xenial/amd64
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
- name: check python is installed in container
delegate_to: mycontainer
raw: dpkg -s python
register: python_install_check
failed_when: python_install_check.rc not in [0, 1]
changed_when: false
- name: install python in container
delegate_to: mycontainer
raw: apt-get install -y python
when: python_install_check.rc == 1
この例を使用する理由を説明できる人はいますか?raw
基準寸法代わりにapt
基準寸法?
これがここで使用される内部知識の一種ですか? (早いですか?)forまたは他のものをansible_connection=lxd
使用してAnsibleのパフォーマンスを最適化しますか?ansible_connection=ssh
mycontainer
最後に、最後の2つのタスクを処理する方がはるかに簡単です。
- name: install python in container
delegate_to: mycontainer
apt: pkg=python state=latest
...もちろん、適切なキャッシュなどを更新するオプションもあります。
それでは、raw
ここでこのモジュールを使用するのはなぜですか?
注:私がこれを尋ねる理由は、文書が通常作業を実行する標準的な方法を示しているからです。しかし、私が理解したように、正式にはapt
呼び出しshell
やコマンドの代わりに特定のモジュールを使用する必要がありますraw
。
答え1
同時にその理由も見つけました。
だからAnsibleは通常特定のホスト用に設定された接続方法を使用して、リモートシステムで実行するPython(2.x)スクリプトを生成します。
残念ながら、このモジュールの前提条件はPythonですapt
。モジュールにはこれらの制限はないように見えるため、リモートシステムから直接およびコマンドをraw
使用して(リモート)ホストでAnsible操作を実行するために必要な前提条件をインストールするために使用できます。しかし、モジュールには同じ制限がありますが、モジュールにはありません。しかし、ドキュメントでこれがより明確に言及されていることを願っています。dpkg
apt-get
shell
raw
この場合、結果辞書には次module_stderr
の名前のキーが含まれますmodule_stderr": "/bin/sh: 1: /usr/bin/python: not found\n
。呼び出し時に詳細情報を増やして表示するようにしますansible-playbook
。
今何が起こっているのか分かったので、raw
モジュール文書の次の文がより意味があります。
このモジュールはリモートシステムにPythonを必要としません。スクリプト基準寸法。
以前はPlaybookを徐々に実行していたため、これが見つからなかったため、python
「このモジュールを使用しない理由は何ですか?」と考えたとき、apt
パッケージはすでにインストールされていました。