AnsibleでConoHaのクラウドをセットアップ(初期設定)

で、いよいよ初期設定かと。

流れとしては、
・libselinux-pythonインストール
・SELinix状態確認
・(SELinuxが有効なら)SELinux無効化
・hostname確認
・hostname変更
・(SELinixを無効化しらなら)再起動
・Server再起動開始待機
・Server起動待機
・hosts.allow追記
・hosts.deny追記
・rootでのalias(dir)設定
・EPELインストール
・REMIインストール
・ユーザー(conoha)作成
・ユーザー(conoha)でのalias(dir)設定
・ユーザー(conoha)でのsudo確認
・ユーザー(conoha)でのsudo追加
・ユーザー(conoha)でのpublicキー登録
・sshdでのPort番号変更
・sshdでのrootログイン拒否
・sshdでのPassword認証拒否
・firewalldインストール
・firewalld起動
・firewalldでのssh port追加
・firewalldでのDMZのssh削除
・firewalldでのEXTERNALDMZのssh削除
・firewalldでのhomeのssh削除
・firewalldでのinternalのssh削除
・firewalld再起動
・sshd再起動
とまあ、ここまで一気に行います。

で、これを行うPlaybookが下記です。

$ sudo vi /etc/ansible/conoha-test/01-initial.yml
- hosts: conoha-test

  vars_files:
   - /etc/ansible/conoha-test/vars/initial.yml

  become: no
  remote_user: root

  tasks:
   - name: libselinux-pythonインストール
     yum: name=libselinux-python state=present

   - name: SELinix状態確認
     shell: getenforce
     register: selinix_result
     changed_when: false

   - name: SELinux無効化
     selinux: state=disabled
     when: selinix_result.stdout != "Disabled"

   - name: hostname確認
     shell: grep {{ hname }} /etc/hostname
     register: hostname_contents
     changed_when: false
     failed_when: false

   - name: hostname変更
     shell: echo {{ hname }} >/etc/hostname
     when: hostname_contents.stdout.find("{{ hname }}") == -1

   - name: SELinix無効化後再起動
     shell: sleep 2s && shutdown -r now
     async: 1
     poll: 0
     when: selinix_result.stdout != "Disabled"

   - name: Server再起動開始待機
     local_action: wait_for host={{ inventory_hostname }} port=22 state=stopped
     when: selinix_result.stdout != "Disabled"

   - name: Server起動待機
     local_action: wait_for host={{ inventory_hostname }} port=22 delay=30
     when: selinix_result.stdout != "Disabled"

   - name: hosts.allow追加
     lineinfile: >
      dest=/etc/hosts.allow
      line="sshd : {{ hssh }}"

   - name: hosts.deny追加
     lineinfile: >
      dest=/etc/hosts.deny
      line="sshd : ALL"

   - name: rootのalias(dir)設定
     lineinfile: >
      dest=/root/.bashrc
      line="alias dir='ls -al --color=auto'"

   - name: rootのalias(dir)設定
     lineinfile: >
      dest=/root/.bashrc
      line="alias dir='ls -al --color=auto'"

   - name: EPELインストール
     yum: name=epel-release state=present

   - name: REMIインストール
     yum: name="http://rpms.famillecollet.com/enterprise/remi-release-7.rpm"

   - name: ユーザー追加
     user:
      name={{ uname }}
      password={{ upass }}
      uid={{ uid }}
      state=present

   - name: alias(dir)設定
     lineinfile: >
      dest=/home/{{ uname }}/.bashrc
      line="alias dir='ls -al --color=auto'"
      state=present

   - name: sudo確認
     shell: grep {{ uname }}$'\t'ALL=\(ALL\)$'\t'ALL /etc/sudoers
     register: sudo_result
     # failed_when: sudo_result.rc not in [ 0, 1 ]
     ignore_errors: true
     changed_when: false

   - name: sudo追加
     shell: sed -i -e 's/root\tALL=(ALL) \tALL/&\n{{ uname }}\tALL=(ALL)\tALL/g' /etc/sudoers
     when: sudo_result.stdout.find("{{ uname }}") == -1

   - name: publicキー登録
     authorized_key:
      user={{ uname }}
      key="{{ lookup('file', ukeypath) }}"
      state=present

   - name: publicキー登録
     authorized_key:
      user={{ uname }}
      key="{{ lookup('file', ukeypath) }}"
      state=present

   - name: Port番号変更
     lineinfile:
      dest=/etc/ssh/sshd_config
      regexp="^#Port 22"
      line="Port {{ sshport }}"
      state=present
      backrefs=yes #regexpでマッチされない場合は追加しない

   - name: rootログイン拒否
     lineinfile:
      dest=/etc/ssh/sshd_config
      regexp="^#PermitRootLogin yes"
      line="PermitRootLogin no"
      state=present
      backrefs=yes #regexpでマッチされない場合は追加しない

   - name: Password認証拒否
     lineinfile:
      dest=/etc/ssh/sshd_config
      regexp="PasswordAuthentication yes"
      line="PasswordAuthentication no"
      state=present
      backrefs=yes #regexpでマッチされない場合は追加しない

   - name: firewalldインストール
     yum: name=firewalld state=present

   - name: firewalld起動
     service: name=firewalld enabled=yes state=started

   - name: ssh port追加
     firewalld:
      permanent=true
      port="{{ sshport }}/tcp"
      state=enabled # "enabled" of "disabled"

   - name: DMZのssh削除
     firewalld:
      permanent=true
      zone=dmz
      service=ssh
      state=disabled # "enabled" of "disabled"

   - name: EXTERNALDMZのssh削除
     firewalld:
      permanent=true
      zone=external
      service=ssh
      state=disabled # "enabled" of "disabled"

   - name: homeのssh削除
     firewalld:
      permanent=true
      zone=home
      service=ssh
      state=disabled # "enabled" of "disabled"

   - name: internalのssh削除
     firewalld:
      permanent=true
      zone=internal
      service=ssh
      state=disabled # "enabled" of "disabled"

   - name: firewalld再起動
     service: name=firewalld state=restarted

   - name: sshd再起動
     service: name=sshd state=restarted

で、ansibleの実行。

$ sudo ansible-playbook /etc/ansible/conoha-test/01-initial.yml -k
SSH password:

とSSHパスワードの入力を求められるので、ConoHaのrootパスワードを入力しましょう。

あとは、眺めているだけで、初期設定が完了してくれるかと。

次は、ミドルウェアインストールかな。

まとめページは、こちらです。

にほんブログ村 IT技術ブログ CentOSへ

コメント