YAML
Ansible
File
centos7
ansible-playbook

【連載01】208.必要なディレクトリを作成しオーナーとパーミッションを設定する

More than 3 years have passed since last update.

当記事はケーススタディの連載となっています。目次は【こちら】です。

最新のソースコードは【GitHub】で公開中です。

サーバの責務はこちらで確認ください。


1.ディレクトリ&パーミッション設定概要

今回のサーバ構築は必要な設定ファイル、SSL証明書、yumでインストールしないミドルウェア等をAnsible管理端末(manageterm)から一旦「adminserv01」に送信し、「apserv01」、「dbserv01」は「adminserv01」にインストールするNFS経由で取得する構成とする。


  • 「adminserv01」は主にNFSのディレクトリ構造やJenkins等のミドルウェアの配置場所である。

  • 「apserv01」、「dbserv01」にはミドルウェアのディレクトリ構造を作成しておく。合わせてミドルウェアのルートディレクトリのパーミッションも設定しておく。

image


2.playbookファイルの相関

image


3.playbook(site.yml)

${ANSIBLE_HOME}/site.yml

メインとなるplaybook(site.yml)参照


4.ディレクトリ&パーミッション設定のplaybook(/operations/0061_filedir.yml)

${ANSIBLE_HOME}/operations/0061_filedir.yml

各サーバのディレクトリ/パーミッション設定のplaybookは以下の通り。playbook中の【】で囲んだコメントの補足に関しては「6.補足説明」を参照。

# ===================

# ファイル&ディレクトリ(filedir.yml)
# ===================

# ===================
# apserv01/adminserv01/dbserv01にインストールするミドルウェアの
# 配置場所や設定ファイル置き場の作成とオーナーとパーミッション設定
# ===================
- hosts: all
sudo: no
remote_user: root
vars_files:

# ===================
# サーバの各種Pathの具体値は後ほど変更があるかもしれないので
# 外部変数化しておく
# ===================
- ../vars/filedir.yml
tasks:

# ===================
# 全てのサーバに
# /var/opt/dataディレクトリをrootユーザー755で作成する。
# 当該フォルダ配下にデータ関係を配置する。
# ===================
- file:
group={{path.dir.data_root.group}} #【4.A:ディレクトリを作成する】
mode={{path.dir.data_root.permision}}
owner={{path.dir.data_root.user}}
path={{path.dir.data_root.path}}
state={{path.dir.data_root.state}}

# ===================
# 全てのサーバに
# /var/opt/data/nfsディレクトリをrootユーザー755で作成する。
# 当該フォルダにはインストーラや設定ファイルなどをコピーする。
# 後ほどNFSサーバを導入し当該ディレクトにファイルをコピーした後
# 資源配布を行うようにする
# ===================
- file:
group={{path.dir.nfs_root.group}}
mode={{path.dir.nfs_root.permision}}
owner={{path.dir.nfs_root.user}}
path={{path.dir.nfs_root.path}}
state={{path.dir.nfs_root.state}}

- hosts: ap_admin
sudo: no
remote_user: root
vars_files:
- ../vars/filedir.yml
tasks:

# ===================
# adminserv01とapserv01にはTOMCATをインストールするので
# TOMCAT関係のディレクトリをtomcatユーザー755で作成する。
# /opt/tomcat
# /var/opt/data/tomcat/webapps
# /var/opt/data/tomcat/work
# ===================
- file:
group={{path.dir.tomcat_home.group}}
mode={{path.dir.tomcat_home.permision}}
owner={{path.dir.tomcat_home.user}}
path={{path.dir.tomcat_home.path}}
state={{path.dir.tomcat_home.state}}
- file:
group={{path.dir.tomcat_data_webapps.group}}
mode={{path.dir.tomcat_data_webapps.permision}}
owner={{path.dir.tomcat_data_webapps.user}}
path={{path.dir.tomcat_data_webapps.path}}
state={{path.dir.tomcat_data_webapps.state}}
- file:
group={{path.dir.tomcat_data_work.group}}
mode={{path.dir.tomcat_data_work.permision}}
owner={{path.dir.tomcat_data_work.user}}
path={{path.dir.tomcat_data_work.path}}
state={{path.dir.tomcat_data_work.state}}

- hosts: db_admin
sudo: no
remote_user: root
vars_files:
- ../vars/filedir.yml
tasks:

# ===================
# adminserv01とdbserv01にはMariadb(mysql)をインストールするので
# MariaDB関係のディレクトリをmysqlユーザー755で作成する。
# /var/opt/data/mysql
# ===================
- file:
group={{path.dir.mysql_data_home.group}}
mode={{path.dir.mysql_data_home.permision}}
owner={{path.dir.mysql_data_home.user}}
path={{path.dir.mysql_data_home.path}}
state={{path.dir.mysql_data_home.state}}

- hosts: adminserv01
sudo: no
remote_user: root
vars_files:
- ../vars/filedir.yml
tasks:
- debug: msg="NFSディレクトリ作成します。"

# ===================
# adminserv01にNFSを後ほどインストールする。
#
# (1)apserv01とdbserv01はNFSクライアントになって
# adminserv01にNFS接続し以下のディレクトリから
# 資源を取得し各種インストールをすることにする。
# ・/var/opt/data/nfs/installer(インストーラやzip置き場)
# ・/var/opt/data/nfs/work(一次ディレクトリ)
# ・/var/opt/data/nfs/settings(設定ファイル置き場)
#
# (2)JenkinsとSeleniumはadminserv01にインストーする為
# 以下のディレクトリを作っておく
# ・/var/opt/data/jenkins
# ・/var/opt/data/selenium
# ===================
- file:
group={{path.dir.nfs_installer.group}}
mode={{path.dir.nfs_installer.permision}}
owner={{path.dir.nfs_installer.user}}
path={{path.dir.nfs_installer.path}}
state={{path.dir.nfs_installer.state}}
- file:
group={{path.dir.nfs_work.group}}
mode={{path.dir.nfs_work.permision}}
owner={{path.dir.nfs_work.user}}
path={{path.dir.nfs_work.path}}
state={{path.dir.nfs_work.state}}
- file:
group={{path.dir.nfs_settings.group}}
mode={{path.dir.nfs_settings.permision}}
owner={{path.dir.nfs_settings.user}}
path={{path.dir.nfs_settings.path}}
state={{path.dir.nfs_settings.state}}
- file:
group={{path.dir.jenkins_root.group}}
mode={{path.dir.jenkins_root.permision}}
owner={{path.dir.jenkins_root.user}}
path={{path.dir.jenkins_root.path}}
state={{path.dir.jenkins_root.state}}

- debug: msg="Seleniumディレクトリ作成します。"
- file:
group={{path.dir.selenium_home.group}}
mode={{path.dir.selenium_home.permision}}
owner={{path.dir.selenium_home.user}}
path={{path.dir.selenium_home.path}}
state={{path.dir.selenium_home.state}}
- file:
group={{path.dir.selenium_log.group}}
mode={{path.dir.selenium_log.permision}}
owner={{path.dir.selenium_log.user}}
path={{path.dir.selenium_log.path}}
state={{path.dir.selenium_log.state}}

- hosts: apservers
sudo: no
remote_user: root
vars_files:
- ../vars/filedir.yml
tasks:
- file:

# ===================
# apserv01は外部公開WEBサーバの為HTTPS利用を前提とする。
# 証明書関係を配置する以下のディレクトリを作成する
# /etc/ssl/apserv_cets
# ===================
group={{path.dir.ssl_root.group}}
mode={{path.dir.ssl_root.permision}}
owner={{path.dir.ssl_root.user}}
path={{path.dir.ssl_root.path}}
state={{path.dir.ssl_root.state}}


5.変数設定playbook(/vars/filedir.yml)

${ANSIBLE_HOME}/vars/filedir.yml

【】で囲んだコメントの補足に関しては「6.補足説明」を参照。

  path:

dir:
data_root:
path: /var/opt/data #【5.A:外部変数設定にしておく】
user: infra
group: infra
state: directory
permision: 755
tomcat_home:
path: /opt/tomcat
user: tomcat
group: tomcat
state: directory
permision: 755
selenium_home:
path: /opt/selenium
user: selenium
group: selenium
state: directory
permision: 755
selenium_log:
path: /var/log/selenium
user: selenium
group: selenium
state: directory
permision: 755

mysql_data_home:
path: /var/opt/data/mysql
user: mysql
group: mysql
state: directory
permision: 755
tomcat_data_webapps:
path: /var/opt/data/tomcat/webapps
user: tomcat
group: tomcat
state: directory
permision: 755
tomcat_data_work:
path: /var/opt/data/tomcat/work
user: tomcat
group: tomcat
state: directory
permision: 755
nfs_root:
path: /var/opt/data/nfs
user: infra
group: infra
state: directory
permision: 777
nfs_installer:
path: /var/opt/data/nfs/installer
user: infra
group: infra
state: directory
permision: 777
nfs_work:
path: /var/opt/data/nfs/work
user: infra
group: infra
state: directory
permision: 777
nfs_settings:
path: /var/opt/data/nfs/settings
user: infra
group: infra
state: directory
permision: 777
jenkins_root:
path: /var/opt/data/jenkins
user: tomcat
group: tomcat
state: directory
permision: 777
ssl_root:
path: /etc/ssl/apserv_cets
user: root
group: root
state: directory
permision: 777
file:
tomcat:
install_check_file: /opt/tomcat/bin/startup.sh
installer: /var/opt/data/nfs/installer/tomcat7.tar.gz
unzip_ch_path: /tmp/.
unzip_after_file: /tmp/apache-tomcat-7.0.65
nmon:
install_check_file: /bin/nmon
installer: /var/opt/data/nfs/installer/centos7.tar.gz
unzip_ch_path: /bin
unzip_after_file: /bin/nmon_x86_64_centos7
java:
install_check_cmd: which java
installer: /var/opt/data/nfs/installer/jdk-7u79-linux-x64.rpm


6.補足説明

4.ディレクトリ&パーミッション設定のplaybook(/operations/0061_filedir.yml)内のコメント(#【4.A:ディレクトリを作成する】)及び5.変数設定playbook(/vars/filedir.yml)内のコメント(#【5.A:外部変数設定にしておく】)について。

ファイル/ディレクトリのパーミッションを設定する。


- file:

group={{path.dir.data_root.group}} #【4.A:ディレクトリを作成する】
mode={{path.dir.data_root.permision}}
owner={{path.dir.data_root.user}}
path={{path.dir.data_root.path}}
state={{path.dir.data_root.state}}

ここではfiledir.ymlを参照して「5.A」の変数値を設定する。

{{path.dir.data_root.group}}の部分はfiledir.ymlの以下の部分に該当する。


path:

dir:

data_root:





group: infra


fileモジュールfileとあるが、実際はファイルだけでなくディレクトリやシンボリックリンクファイルの設定が可能。

名前
説明
補足

group
オーナーグループを設定
chgrp、chownに該当

mode
パーミッションを設定
chmodに該当

owner
オーナーを設定
chmodに該当

path
設定対象のパスを記述。
・ディレクトリ
・ファイル

state
pathに指定した対象の属性を指定。
・file
・link
・directory
・hard
・touch
・absent
absentは削除する


7.補足の補足

実際はファイルの作成を一ヵ所でやるのではなく(今回のようなファイル作成playbookを作るのではなく)、TOMCATをインストールするplaybook等で作成する方が凝縮度が高まりplaybook単体での試験がしやすいというメリットがある。

プログラムも同様だが、何かの前提がないと動作しないものは外部依存度が高まり、修正や単体での再実行がしにくくなる。

一方でディレクトリを作る場合、「このplaybookを直せば良い」と管理がしやすいというメリットがある。

どんなことにも言えるが、分散管理集中管理にはそれぞれにメリット・デメリットがあるので、適宜設計して実行する方がよいと思う。(Ansibleもプログラムを設計する力同様のスキルが必要かと思われる。)

次回は「209.ローカル(manageterm)にあるファイルをリモート(adminserv01)にコピーする」について。

連載の目次は【こちら】です。