【連載01】209.ローカル(manageterm)にあるファイルをリモート(adminserv01)にコピーする

<b><font color="#ff6633">当記事はケーススタディの連載となっています。目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
<b><font color="#ff6633">最新のソースコードは[【GitHub】](https://github.com/csfactorygihubblog001/blogansible)で公開中です。</font></b>
サーバの責務は<b>[こちら](http://qiita.com/CsFactoryitter/items/032cc339048e52ee3586)</b>で確認ください。

##1.ローカルファイル⇒リモートコピー設定概要
Ansible管理端末(manageterm)にあるyumではインストールしないミドルウェアや設定ファイル等は「manageterm」に事前に作成しておき「adminserv01」に一旦送る。

![image](https://qiita-image-store.s3.amazonaws.com/0/98085/c9522c5e-793b-fe8b-81fa-43647e9cb3f1.png)

##2.playbookファイルの相関

以下に「manageterm」のディレクトリ構造を示す。
ミドルウェアやOS単位にinstaller/settings/firewalldのディレクトリを作成し、その中にZIPファイルや設定ファイルを置く。
outputディレクトリのみ特別で後述するopenvpnで作成したクライアント証明書を配置する。

![image](https://qiita-image-store.s3.amazonaws.com/0/98085/8197a655-86eb-293b-c9a0-85e21811ec98.png)

##3.playbook(site.yml)
${ANSIBLE_HOME}/site.yml
[メインとなるplaybook(site.yml)](http://qiita.com/CsFactoryitter/items/3112c6d504d3b5a58011#3%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A8%E3%81%AA%E3%82%8Bplaybooksiteyml)参照

##4.ローカルからリモートへのファイル転送のplaybook(/operations/0071_filescopy.yml) 
${ANSIBLE_HOME}/operations/0071_filescopy.yml

```yaml:
# ===================
# ローカル(manageterm)にあるファイルをadminserv01にコピーします。
# (後程adminserv01にNFSサーバを導入します。
# ここまで書いてなんですが実際はローカルからサーバにファイルを置く場合は
# rsyncを使用した方が簡単ですね。
# ===================
- hosts: adminserv01
  sudo: no
  vars_files:
    - ../vars/filedir.yml
  remote_user: root
  tasks:

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にJDKを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルをコピーする。
# ===================
    - name: JAVA関連コピー
      file: state=directory path=/var/opt/data/nfs/java/installer/ follow=no recurse=yes  #【4.A:ディレクトリを作成する】
    - file: state=directory path=/var/opt/data/nfs/java/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/java/installer/ dest=/var/opt/data/nfs/java/installer/.  #【4.B:ローカル(manageterm)からリモートのサーバへコピーする】
    -  copy: src=../sendfiles/java/settings/ dest=/var/opt/data/nfs/java/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にTOMCATを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: TOMCAT関連コピー
      file: state=directory path=/var/opt/data/nfs/tomcat/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/tomcat/settings/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/tomcat/firewalld/ follow=no recurse=yes
    -  copy: src=../sendfiles/tomcat/installer/ dest=/var/opt/data/nfs/tomcat/installer/.
    -  copy: src=../sendfiles/tomcat/settings/ dest=/var/opt/data/nfs/tomcat/settings/.
    -  copy: src=../sendfiles/tomcat/firewalld/ dest=/var/opt/data/nfs/tomcat/firewalld/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にSeleniumを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: Selnium関連コピー
      file: state=directory path=/var/opt/data/nfs/selenium/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/selenium/settings/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/selenium/firewalld/ follow=no recurse=yes
    -  copy: src=../sendfiles/selenium/installer/ dest=/var/opt/data/nfs/selenium/installer/.
    -  copy: src=../sendfiles/selenium/settings/ dest=/var/opt/data/nfs/selenium/settings/.
    -  copy: src=../sendfiles/selenium/firewalld/ dest=/var/opt/data/nfs/selenium/firewalld/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にJenkinsを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: JENKINS関連コピー
      file: state=directory path=/var/opt/data/nfs/jenkins_mvn/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/jenkins_mvn/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/jenkins_mvn/installer/ dest=/var/opt/data/nfs/jenkins_mvn/installer/.
    -  copy: src=../sendfiles/jenkins_mvn/settings/ dest=/var/opt/data/nfs/jenkins_mvn/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にnfs exportsを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: NFS関連コピー
      file: state=directory path=/var/opt/data/nfs/nfs/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/nfs/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/nfs/installer/ dest=/var/opt/data/nfs/nfs/installer/.
    -  copy: src=../sendfiles/nfs/settings/ dest=/var/opt/data/nfs/nfs/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)に
# NMONを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: OS関係:NMON, 環境変数のコピー
      file: state=directory path=/var/opt/data/nfs/os/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/os/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/os/installer/ dest=/var/opt/data/nfs/os/installer/.
    -  copy: src=../sendfiles/os/settings/ dest=/var/opt/data/nfs/os/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)に
# Apacheを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: アパッチ関係:サーバ証明書コピー/秘密鍵/SSL設定/apj設定
      file: state=directory path=/var/opt/data/nfs/apache/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/apache/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/apache/installer/ dest=/var/opt/data/nfs/apache/installer/.
    -  copy: src=../sendfiles/apache/settings/ dest=/var/opt/data/nfs/apache/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にMariaDB(MySQL)
# を配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: MarinaDB(MySQL)関係:my.conf
      file: state=directory path=/var/opt/data/nfs/mysql/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/mysql/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/mysql/installer/ dest=/var/opt/data/nfs/mysql/installer/.
    -  copy: src=../sendfiles/mysql/settings/ dest=/var/opt/data/nfs/mysql/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)にopenvpnを配置する為のディレクトリを作成
# 作成したらディレクリにローカル(manageterm)から
# インストーラと設定ファイルとfirewalld設定をコピーする。
# ===================
    - name: openvpn関係
      file: state=directory path=/var/opt/data/nfs/openvpn/installer/ follow=no recurse=yes
    - file: state=directory path=/var/opt/data/nfs/openvpn/settings/ follow=no recurse=yes
    -  copy: src=../sendfiles/openvpn/installer/ dest=/var/opt/data/nfs/openvpn/installer/.
    -  copy: src=../sendfiles/openvpn/settings/ dest=/var/opt/data/nfs/openvpn/settings/.

# ===================
# adminserv01のNFS共有用ディレクトリ(NFS起動前)に
# OpenVPNで作成したクライアント証明書を保存するフォルダをコピーする
# ===================
    - name: OpenVPNにて作成したクライアント証明書を出力するディレクトリの作成
      file: state=directory path=/var/opt/data/nfs/output follow=no recurse=yes

# ===================
# NFSルートディレクトリ(/var/opt/data/nfs)配下のオーナー/パーミッション
# を再帰的にinfra/infra 755に変更する
# ===================
    - 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}}
            recurse=true
```

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

${ANSIBLE_HOME}/vars/filedir.yml

前回の[playbook(/vars/filedir.yml)](http://qiita.com/CsFactoryitter/items/8e0db53921807a6ff409#4%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%AD%E5%AE%9A%E3%81%AEplaybookoperations0061_filediryml)を参照。


##6.補足説明
[4.ローカルからリモートへのファイル転送のplaybook(/operations/0071_filescopy.yml)](#4%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%8B%E3%82%89%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%B8%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%BB%A2%E9%80%81%E3%81%AEplaybookoperations0071_filescopyyml)内のコメント（#【4.A:ディレクトリを作成する】）及び（#【4.B:ローカル(manageterm)からリモートのサーバへコピーする】）について。

4.A fileモジュール補足

>
file: state=directory path=/var/opt/data/nfs/java/installer/ follow=no recurse=yes  #==>【4.A:ディレクトリを作成する】

[208.必要なディレクトリを作成しオーナーとパーミッションを設定するの補足説明](http://qiita.com/CsFactoryitter/items/8e0db53921807a6ff409)でも説明したfileモジュールを使用して、新たにサブディレクトリを作成していく。

<dl>
<dt><font color="#0066ff">fileモジュール</font>(0071_filescopy.yml内コメント【4.A】より)</dt>
</dl>

|名前|説明|補足|
|:------|:------|:------|
|recurse|stateがdirectoryの場合<br>再帰的に変更|chmod -R<br>chown -R|
||既に該当のpathがある場合は何もしない|

4.B copyモジュール補足

>
copy: src=../sendfiles/java/installer/ dest=/var/opt/data/nfs/java/installer/.  #【4.B:ローカル(manageterm)からリモートのサーバへコピーする】

copyモジュールは名前からするとリモートサーバ内でのコピーと勘違いしそうだが、実際はAnsibleを操作しているローカル端末からリモートのサーバにファイルをコピーする。

<dl>
<dt><font color="#0066ff">copyモジュール</font>(0071_filescopy.yml内コメント【4.B】より)</dt>
</dl>

|名前|説明|補足|
|:------|:------|:------|
|src|コピー元|chmod -R<br>chown -R|
|dest|コピー先|リモートのパスを指定|

scpコマンドは以下の例をイメージすると分かり易いと思う。

例：(scp コピー元 コピー先サーバ:パス)

>scp  /tmp/abc  adminser01:/tmp/aaa

次回は「[210.HOSTSを設定する](http://qiita.com/CsFactoryitter/items/087cac080a7a422697cd)」について。

<b><font color="#ff6633">連載の目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f)です。</font></b>