1. ホーム
  2. deployment

[解決済み】Ansibleのホストでコマンドを実行する

2022-04-01 19:15:49

質問

Ansibleホスト上でコマンドを実行することは可能ですか?

私のシナリオは、社内でホストされている (そして会社のファイアウォールの外からはアクセスできない) git サーバーからチェックアウトを取得したい、というものです。それから、私はチェックアウト(tarballed)を本番サーバー(外部でホストされている)にアップロードしたいのです。

今のところ、チェックアウトを行い、それをtarball化し、それからデプロイスクリプトを実行するスクリプトを実行することを考えていますが、もしこれをAnsibleに統合できれば、それが望ましいです。

どのように解決するのですか?

はい、Ansibleホスト上でコマンドを実行することができます。プレイ内のすべてのタスクがAnsibleホスト上で実行されるように指定することも、個々のタスクをAnsibleホスト上で実行するようにマークすることも可能です。

Ansible ホストでプレイ全体を実行する場合は、以下のように指定します。 hosts: 127.0.0.1connection: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ホスト上で1つのタスクを実行したいだけなら 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 の新しいバージョンでは、上記の行をインベントリに追加する必要がなくなりました。