1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ansibleコマンドでのワンライナー効率化

Posted at

はじめに

Ansibleと言えばPlaybookを使った自動化ですが、ちょっとした確認のためにPlaybookを作るのもなぁ・・・って時に使えるワンライナーのコマンドを書き留めていきます。

Ansibleコマンドオプション

よく使いそうなコマンドオプションのみ抜粋。

短縮形 完全名 説明
-a --args モジュールへの引数。モジュール指定無しの場合はansibleコマンドへの引数指定
-b --become 権限昇格してコマンド実行するかの指定。パスワード入力が必要な場合、"-K"も必要
-i --inventory インベントリファイルの指定
-k --ask-pass SSH接続パスワードの要求
-K --ask-become-pass 特権昇格パスワードの要求
-m <モジュール名> --module-name <モジュール名> 実行するモジュール名の指定
-u <ユーザ名> --user <ユーザ名> 実行ユーザの指定
-v --verbose 詳細モードで実行
-vvv なし "-v"より詳細に表示

・その他コマンド詳細
https://docs.ansible.com/ansible/latest/cli/ansible.html

マジック変数

Ansibleコマンドをワンライナーで実行するだけなら使う機会が少ないですが、使ったほうが都合が良い場合もあるので記載しておきます。

Playbookを作って実行する場合はFactsで収集する各種変数を使用できますが、Ansibleコマンドをそのまま実行する場合はFactsで収集する値を使用できないので、変数を使いたい場合はFactsが無効の状態でも使用できる変数(マジック変数)を使用する必要があります。

変数の使用方法はPlaybook内での指定と同様、{{変数}}で使用できます。

ワンライナーで実行する際に使用できる変数は以下で確認可能です。

使用できるAnsibleの変数確認
ansible -i [inventory] all -b -a 'echo {{hostvars}}'

以下ワンライナーで使えそうな変数の抜粋。

マジック変数 説明
inventory_hostname ホストのインベントリ名(ドメイン含む)
inventory_hostname_short ホストのインベントリ名(ホスト名のみ)
inventory_dir インベントリファイルが存在するディレクトリパス
inventory_file インベントリファイルのパス
group_name ホストが所属するグループ名
hostvars ホストに割り当てられた変数

詳しくは以下を参照。

イベントリファイルで使用できる変数

マジック変数とは別にインベントリファイル内で使用できる変数があるのでよく使いそうな変数のみ抜粋。

インベントリ変数 説明
ansible_host 接続ホスト名(インベントリホストと異なる名前を付けたい場合)
ansible_port デフォルト以外のポート番号に接続する場合の指定
ansible_user ホストに接続する際に使用するユーザ名
ansible_password ホストに接続する際に使用するパスワード
ansible_become_password 特権昇格する際に使用するパスワード

詳しくは以下を参照。

ちなみに後述するワンライナーコマンドインベントリファイルに以下の様な設定を行い、SSH接続パスワード、sudoパスワードの入力を省略しています。

尚、今回の方法の場合、パスワードがそのまま表示されるので、本番環境などでの使用は極力控えてください。

インベントリに設定する変数例
[hostname] ansible_password=[パスワード] ansible_become_password=[パスワード]

Ansibleワンライナーコマンド

普段使ったりしているコマンド一覧。

コマンド実行例
ansible -i [inventory] all -b -a 'date'
パイプやバッククォートを含むコマンド実行例
ansible -i [inventory] all -m shell -b -a 'cat /etc/hosts | grep 127.0.0.1'
copyモジュールを使用したファイル収集例(ホスト名付き)
ansible -i [inventory] all -m copy -b -a 'src=[管理対象サーバパス] dest=[Ansible実行サーバパス].{{inventory_hostname}}'

allはインベントリ内の全ホストを示す指定なので、環境に合わせてグループ指定等行って下さい。

おわりに

使えそうなワンライナーコマンドを思いついたら随時更新していきます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?