Created by
Akiko.T
last modified
- こちらは、ansibleの簡単なサンプルになります
- sshの設定のサンプルです
- ansible利用にあたっては、対象サーバにsshで接続できるように設定が必要です
- また、ansibleのinventory fileに指定したサーバ名が解決できるようにしておく必要があります
- ~/.ssh/config ファイルに相当します
ansibleを使って簡単なタスクを実行させるためのファイルです
- % ansible-playbook -v -i hosts playbook.yml で実行できます
- この例では、hosts ファイルをplaybookと同じ階層に配置しています
- 標準では、対象サーバ内で実行したコマンドの出力は、ansible実行側には表示されません
- -v オプションをつけると詳細な出力を表示します
- --check オプションをつけて実行すると、チェックのみでdry run (実際には実行しない)モードで動きます
サンプルのplaybook.ymlでは、OSに対する書き込み動作 (ファイルの配置や作成、編集)は行っていません。
tasks: ブロックの、name: ごとに実施する処理を定義しています
tasksで指定した複数タスクのうち、指定したタスクから後を実行する例です。
- --step オプションで確認のファイアログが出ます
- -v オプションで詳細な出力を表示します
% ansible-playbook -i hosts -v --start-at='run date command if os is RedHat family' --step playbook.yml
ansibleで操作する対象を定義したファイル(インベントリファイル)になります。
- 実際は、 -i オプションでファイルを指定すれば、hostsというファイル名でなくても大丈夫です
ansibleを使ってRaspberryPiのサーバ(Debian系共通) にssmtpをインストールするplaybookです。
| #
# Debian系のセットアップのサンプル
#
- hosts: raspberry_servers
tasks:
# RaspbianはDebian系になるので、パッケージ追加は apt moduleを利用
# フォーマットはこちらを参考に: http://docs.ansible.com/ansible/apt_module.html
#
# % ansible all --become -i hosts -m apt -a "name=chrony update-cache=yes" と同じ内容です
# % ansible-playbook -i hosts -v -l raspberry_servers debian-setup.yml
#
# この処理はどのディストリビューションでも実行される
- name: test connection using ping module
ping:
# 日本語環境の追加 (apt-get でlanguage-packを追加)
- name: install language-pack
apt: name=language-pack-ja update_cache=yes
become: yes
- name: add ja_JP.UTF-8 UTF-8
lineinfile: >-
dest='/etc/locale.gen'
state=present
backrefs=yes
regexp='# ja_JP.UTF-8 UTF-8'
line='ja_JP.UTF-8 UTF-8'
become: yes
- name: exec locale-gen
command: locale-gen
become: yes
- name: update-locale
command: update-locale LANG=ja_JP.UTF-8
become: yes
# 時刻補正 (apt-get でchronyを追加)
- name: install chrony
apt: name=chrony update_cache=yes
become: yes
# timezone変更 (Asia/Tokyo)
- name: Set timezone variables
copy: content='Asia/Tokyo\n' dest=/etc/timezone backup=yes
notify: update tzdata
become: yes
- name: update timezone
command: dpkg-reconfigure -f noninteractive tzdata
become: yes
- name: Check date
command: date
|
| #
# 対象サーバのグループ名
# - [] でくくったものがグループ名です
# - playbookの "hosts:" の部分に指定すると、このグループに属するサーバに対してタスクを実行します
#
[debian_distribution_servers]
# ssh的に解決できるホスト名を記載します
# DNS的なhost名以外に、.ssh/config で指定したHostが利用されます
#
ubuntu
raspbian_server
|
| # 使い方:
# % ansible-playbook -v -i hosts playbook.yml
#
# 内容;
# - hostsファイルに記載したサーバに対して、pingコマンドを実行します。
# - % ansible ubuntu_servers -m ping -i hosts と、コマンドラインで実行したのと同じ、ping moduleを実行します。
# - -v optionを付けると、詳細なメッセージも出力されます。
#
#
#
# 1. Debian系のディストリビューションに対するタスクを実行
# - hostsファイルに、[debian_distribution_servers] のブロックに記載してあるサーバを対象に処理します
# - Raspbian (ラズベリーパイ)は、Debian系に属するため、Raspbianは以下のすべてのタスクが実行されます
- hosts: debian_distribution_servers
tasks:
# この処理はどのディストリビューションでも実行される
- name: test connection using ping module
ping:
# この処理はDebian系のみ実行される
- name: echo hostname if os is Debian family
shell: uname -a
when: "ansible_os_family == 'Debian'"
# この処理はRedHat系のみ実行される
- name: run date command if os is RedHat family
shell: date
when: "ansible_os_family == 'RedHat'"
# この処理は対象のUnix server全て / id コマンドで現在sshでログインしているユーザを表示
- name: show ansible use id
shell: id -a
|
| # 使い方:
# % ansible-playbook -i hosts -v -l raspberry_servers ssmtp-setup.yml (hostsファイルのうち、raspberry_servers と言うグループで指定されたサーバが対象)
# % ansible-playbook -i hosts -v ssmtp-setup.yml (hostsファイルの全サーバが対象)
#
# 内容;
# - hostsファイルに記載したサーバに対して、ssmtpのパッケージ追加、設定ファイル書き換え、テストメール送信を実施します。
# - -v optionを付けると、詳細なメッセージも出力されます。
# - ssmtpの設定ファイルは、ssmtp.conf.base を利用します。こちらもアカウントとパスワードを書き換えてご利用ください。
#
#
# 1. Debian系のディストリビューションに対するタスクを実行
# - hostsファイルに、[debian_distribution_servers] のブロックに記載してあるサーバを対象に処理します
# - Raspbian (ラズベリーパイ)は、Debian系に属するため、Raspbianは以下のすべてのタスクが実行されます
- hosts: raspberry_servers
#
# vars_prompt で、実行時にプロンプトで入力を待ち受けます。この設定では、テスト用メールの宛先を指定します。 default: 部分にはデフォルトの値を設定します。
#
vars_prompt:
- name: "mail_to"
prompt: "Please enter email address to send test mail."
private: no
default: "こちらを書き換えてください@gmail.com"
tasks:
# SSMTPを利用した設定 / ここから
# apt-get でのパッケージ追加 (with_itemsで指定したパッケージを追加します)
# こちらも参考に: https://github.com/oriolrius/ansible-ssmtp
- name: Install mail package
apt: pkg={{ item }} update_cache=yes
with_items:
- mailutils
- ssmtp
become: yes
when: "ansible_os_family == 'Debian'"
# 設定ファイルのコピー (ssmtp.conf.base の値を事前に書き換えておいてください)
- name: copy config file
copy: >
src=ssmtp.conf.base
dest=/etc/ssmtp/ssmtp.conf
mode=0744
become: yes
when: "ansible_os_family == 'Debian'"
# メール送信テスト
# -s のあとにSubjectを指定します
- name: send mail test
#shell: echo "こちらは ansible playbook からのテストメールです。"| /usr/sbin/ssmtp -v -s "test" {{ mail_to }}
shell: echo "こちらは ansible playbook からのテストメールです。"| /usr/bin/mail -s "test" {{ mail_to }}
when: "ansible_os_family == 'Debian'"]
# メール送信テスト(ansibleのmail module)を利用したもの
# こちらの場合は、subjectの部分を書き換えてください
- name: send email test using ansible module
mail:
to='{{ mail_to }}'
subject='Ansible-report'
body='こちらは ansible playbook からのテストメールです。ホスト名 - {{ ansible_hostname }} '
|
| root=SSMTP用のアカウント@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
# The full hostname
AuthUser=SSMTP用のアカウント
AuthPass=SSMTP用のアカウントのパスワード
UseSTARTTLS=YES
UseTLS=YES
AutoLogin=YES
FromLineOverride=YES
|
| #
# Host行で指定した名前を ansibleの inventory-file に利用できます
#
# ご利用のネットワークでDNS登録を行っていなくとも、IPが割り当てられていれば、.ssh/config で指定したHostで
# ssh / ansible的に名前をつけてアクセスできます
#
#
# sample: ラズベリーパイのサーバ
#
Host raspbian_server
HostName raspbian.local # DNS的なホスト名 or IPアドレス
User pi
Port 22
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentitiesOnly yes
LogLevel FATAL
#
# sample: Vagrantで実行しているサーバ
#
Host ubuntu
HostName 192.168.0.11 # サンプルのIPです
User vagrant
Port 22
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentitiesOnly yes
LogLevel FATAL
|