ansible -b -i インベントリファイル インベントリファイルの絞込条件(allなら全部。all:!ホスト名とすると一部ホストを除く) -m モジュール名 -a "モジュールに引き渡すコマンド等"
-b | ルート権限で実行するの意味 |
-i | IPアドレスを指定する時は、xxx.xxx.xxx.xxx, allとすると良い。 |
-C | 実行前にcheckできる。 |
-k | ssh時にパスワードが必要な場合に引数として渡すことができる。 |
-v | デバッグ内容を表示できる |
-m | ansibleが用意している様々なモジュールを呼び出すことができる。一番多く使うモジュールはshellで、-m shell -a "ls"のようにすることで複数サーバに対して、コマンド実行できる。setupとするとリモート先の情報を色々収集できる。モジュール一覧はこちら参照のこと。 |
-a | 本オプションの後ろのコマンド指令はansible-playbookで言う所のmain.ymlに相当する記述を記載する。 main.ymlはjson形式で属性値1:設定値のように記載するが、 アドホックコマンドでは-a '属性値1="設定値1" 属性値2="設定値2"'のように記載する。 |
ansible-playbook playbookファイル -i インベントリファイル -l "インベントリファイルの絞込条件" -u 実行ユーザ名
-i | IPアドレスを指定する時は、-i xxx.xxx.xxx.xxx,とすると良い。 |
-C | 実行前に空実行することで挙動をチェックできる。 コマンド系は本オプションをつけると実行しなくなる。仮に状態変化でないコマンド等で本オプション時もコマンド実行させたい場合は、check_mode: noをmain.yml等に記載すると良い |
-D | ansible実行前後のファイル差分を表示する |
--list-task | ansibleコマンドによって実行されるタスクを確認できる |
-u | ansible実行元から実行先のサーバにsshするためのユーザを指定する |
-k | ssh時にパスワードが必要な場合に入力することができる |
-K | ansible実行先のユーザでsudoする際にパスワードを必要とする際に入力させる |
-c | localをつけると、ローカル環境で実行できる |
-l | 絞込条件で一部ホストを除く全てとする場合は、all:\!ホスト名ように書くと良い。 |
-e | xxxx=yyyyの形で変数を渡すことができる |
--step | ステップ実行できる |
|-playbookファイル yml形式で記述する。 | 処理の大本を記載するファイルとなる。 |-hosts インベントリファイルを格納する |-group_vars tasks¥main.ymlとかで使用する変数群(グループ関連)を宣言する<<group名>>.ymlの置き場 |-host_vars tasks¥main.ymlとかで使用する変数群(ホスト関連)を宣言する |-files playbook実行時に使用する設定ファイル類等 |-roles |-処理の名前等 |-tasks |-main.yml 処理内容を記述する。
- name: 一連の動作をまとめた名前 hosts: - インベントリファイルの[]内で指定するホスト名。全ての場合はall。 gather_facts: no #ターゲットノードの情報収集をするかを指定 remote_user: ユーザ名 #ssh時に使用するユーザを指定する become: yes #become_userで指定したユーザで処理させる(become_userを省略した場合はroot) become_user: ユーザ名 roles: - role: 処理の名前等(<=ディレクトリ構成参照) vars_files: - 変数一覧を記載したvarsファイル名を指定。 例えば、host_vars/{{ansible_hostname}}.ymlとすると、 各ホスト名のファイルを参照しにいく。
[グループ名] XXX.XXX.XXX.XXX #IPアドレスを記載 YYY.YYY.YYY.YYY #IPアドレスを記載 hoge.sample.co.jp #ホスト名でもOK /etc/hosts等でホスト名の名前解決は必要。 [グループ名2] ZZZ.ZZZ.ZZZ.ZZZ [グループ名:vars] #group_varsと同様に、ホストグループに変数定義できる。 変数名=値
変数名: 値 変数名: 値
-name : 処理内容につける名前 -モジュール名: モジュールのパラメータ名1: 値 モジュールのパラメータ名2: 値 または -name : 処理内容につける名前 -モジュール名: モジュールのパラメータ名1=値 モジュールのパラメータ名2=値
機能 | モジュール名 | 記載例 | 備考 |
パッケージインストール | yum | - name: 動作名称 yum: name=パッケージ名 state=latest |
CentOS系の場合 |
apt | - name: 動作名称 apt: name=パッケージ名 state=latest |
Ubuntu系の場合 | |
ファイルコピー(ローカルからリモート) | copy | - name: 動作名称 copy: src=<filesフォルダに置いたファイル> dest=<置き先> group=実行グループ owner=実行オーナー mode=0644 |
ファイルをそのままコピー |
template | - name: 動作の名前をつける template: src=<templateフォルダに置いたファイル> dest=<置き先> |
サーバごとに設定値を変えてコピーしたい時に使用する。 validate='コマンド %s'をつけると%sに置き先のファイルが入るので、設定ファイルが正しいかを検証できる(例:sudoersファイル等で活用) | |
ファイルコピー(リモートからローカル) | fetch | - name:動作名称 fetch: src=<対象ファイル> dest=<置き先> |
|
ファイル生成 | file | - name:動作の名前をつける。 file: path: 生成したいファイルのパス state: 処理の種類 owner: 所有者 group: グループ mode: パーミッション |
|
ファイル編集 | lineinfile | - name: 動作の名前をつける lineinfile:dest=<対象ファイル> line=<???> |
insertbeforeとinsertafterで対象行前後に挿入できる。また、regexpと書くと、置換が優先される。 |
replace | - name: 動作の名前をつける replace: dest: 対象ノードのファイル置き先 regexp: 正規表現 replace: 置換後文字列 |
||
blockinfile | - name: 動作の名前をつける blockinfile: dest: 対象ノードのファイルの置き先 insertafter 正規表現 block: | 1行目 2行目 |
marker:""を使うと、#BEGIN xxxxのような文字列が入るのを抑止できる。 | |
サービスの設定 | service | - name: 動作の名前をつける service: state=restarted enabled=no |
stateが現在のサービスへの指令。enableがPC起動時のサービス自動起動設定 |
cronの設定 | cron | - name:cronの名前をつける minute=分 hour=時間 job=cronに登録するjob |
|
コマンド実行 | shell | - name: 動作の名前をつける shell: 実行したいコマンド register: 実行結果を格納する変数 |
格納した変数の結果は{{実行結果を格納する変数.XXX}}のような形でアクセスできる。 実行結果の標準出力のみを利用しデバッグする場合は以下のようにする。 - debug:var=変数名.stdout_linesまたは- debug: msg: "{{変数名.stdout_lines}}" |
command | - name: 動作の名前をつける command: コマンド内容 |
||
script | - name: 動作の名前をつける script:ローカルに置いたスクリプトファイルのパス |
||
ファイル操作系 | find | - name: 動作の名前をつける find: paths: 捜索したいパス patterns: パターン条件 register: 結果用変数 |
|
ユーザ系 | user | - name: 動作の名前をつける user: name: ユーザ名 |
|
authorized_keyのセット | authorized_key | -name: 動作の名前をつける。 user: ユーザ名 state: present key: "{{ lookup('file', '公開鍵のパス') }}" |
|
ローカルで実行 | local_action | - name: 動作の名前をつける local_action: モジュール名 オプション |
|
変数をセットする | set_fact | - set_fact 変数名: 値 |
|
エラーは無視して次の処理継続 | ignore_errors | - name:任意の名前 任意のモジュール ignore_errors: yes |
|
特定の条件のみ実行 | when | - name: 動作の名前をつける XXXX: 任意の処理 when: ansible_distribution == 'CentOS' |
・ansible_distributionを使うには、playbook側でgather_facts: yesとしておく必要がある。 ・inventoryのグループ名等でも条件分岐できる。 例:('グループ名' in group_names) or ('グループ名' in group_names) ・ファイルが存在する時等を分岐条件とする場合は、statモジュールが利用できる。 |
特定の条件の時failedを発生 | failed_when | failed_when:"some string" not in result.stdout | |
changedを発生させない | changed_when | changed_when:False | |
ループ処理をさせる | with_items | - name: 動作の名前をつける 処理内容 {{item.xxx}} <-変数名として使える with_items: - {xxx:内容1,yyy:内容2}} - {xxx:内容3,yyy:内容4}} |
with_itemsからloopに変わったようだ |
ディレクトリ配下をまとめて処理する | with_fileglob | with_fileglob: -"/dir/*" |
|
タグをつけたい場合 | tags | tasks: tags: - 名前 |
|
キー入力待ち | pause | - pause: prompt="入力待ちで表示する内容" |