Ansible コントローラー ノードでコマンドを実行することは可能ですか?
私のシナリオは、社内でホストされている (会社のファイアウォールの外部からはアクセスできない) Git サーバーからチェックアウトを行い、そのチェックアウト (tarball 形式) を運用サーバー (外部でホストされている) にアップロードすることです。
現時点では、チェックアウトして tarball を作成し、デプロイメント スクリプトを実行するスクリプトを実行することを検討していますが、これを Ansible に統合できれば望ましいでしょう。
ベストアンサー1
はい、Ansible ホストでコマンドを実行できます。プレイ内のすべてのタスクが Ansible ホストで実行されるように指定することも、個々のタスクを Ansible ホストで実行するようにマークすることもできます。
Ansible ホスト上でプレイ全体を実行する場合は、プレイ内でhosts: 127.0.0.1
と を指定しますconnection:local
。例:
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
見るローカルプレイブック詳細については、Ansible ドキュメントを参照してください。
Ansible ホストで単一のタスクだけを実行したい場合は、 を使用してlocal_action
タスクをローカルで実行するように指定できます。例:
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
見る "タスクの実行場所の制御: 委任とローカルアクション詳細については、Ansible ドキュメントの「」を参照してください。
connection: local
これをインベントリに追加することで、プレイ内容を入力する手間を省くことができます:
localhost ansible_connection=local
(ここでは演劇を指すために「 localhost
」の代わりに「 」を使用します)。127.0.0.1
Ansible の新しいバージョンでは、上記の行をインベントリに追加する必要がなくなり、Ansible はそれがすでに存在していると想定します。