Snippets

Akiko.T AnsibleのSample (基本 / ssmtpの簡単な設定)

Created by Akiko.T last modified

このファイルについて

  • こちらは、ansibleの簡単なサンプルになります

ファイルの説明

.ssh/config

  • sshの設定のサンプルです
  • ansible利用にあたっては、対象サーバにsshで接続できるように設定が必要です
  • また、ansibleのinventory fileに指定したサーバ名が解決できるようにしておく必要があります
  • ~/.ssh/config ファイルに相当します

playbook.yml

基本 / 実行方法

ansibleを使って簡単なタスクを実行させるためのファイルです

  • % ansible-playbook -v -i hosts playbook.yml で実行できます
  • この例では、hosts ファイルをplaybookと同じ階層に配置しています
  • 標準では、対象サーバ内で実行したコマンドの出力は、ansible実行側には表示されません
  • -v オプションをつけると詳細な出力を表示します
  • --check オプションをつけて実行すると、チェックのみでdry run (実際には実行しない)モードで動きます

サンプルのplaybook.ymlでは、OSに対する書き込み動作 (ファイルの配置や作成、編集)は行っていません。

tasks: 部分

tasks: ブロックの、name: ごとに実施する処理を定義しています

特定のタスクから実行する方法

tasksで指定した複数タスクのうち、指定したタスクから後を実行する例です。

  • --step オプションで確認のファイアログが出ます
  • -v オプションで詳細な出力を表示します
% ansible-playbook -i hosts -v --start-at='run date command if os is RedHat family' --step playbook.yml

hosts

ansibleで操作する対象を定義したファイル(インベントリファイル)になります。

  • 実際は、 -i オプションでファイルを指定すれば、hostsというファイル名でなくても大丈夫です

ssmtp-setup.yml

ansibleを使ってRaspberryPiのサーバ(Debian系共通) にssmtpをインストールするplaybookです。

基本 / 実行方法

  • % ansible-playbook -i hosts -v -l raspberry_servers ssmtp-setup.yml  (hostsファイルのうち、raspberry_servers と言うグループで指定されたサーバが対象)
  • % ansible-playbook -i hosts -v ssmtp-setup.yml  (hostsファイルの全サーバが対象)

  • 設定の際に、ssmtp.conf.base をテンプレートとして利用します。あらかじめ値を編集してください。

  • このplaybookでは、必要になるパッケージの追加と、設定ファイルの更新といった、OSに対する変更が入ります。
#
# 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

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.