概要
・ansible で始めるインフラ自動化
https://www.slideshare.net/dcubeio/ansible-72056386
設定方法
1:ansibleクライアント、サーバ共に下記実施。
$ sudo apt-get update
$ sudo apt-get install -y python-dev python-pip
$ sudo pip install ansible
2:ansibleサーバ側で、ssh用のコンフィグ設定。クライアント側は、AzureでVM作る時に、公開鍵設定済。これで、ssh IPアドレス でログイン可能。
Host プライベートIPアドレス
HostName プライベートIPアドレス
User ログインユーザ名
IdentityFile 秘密鍵のpath
3:ansibleサーバ側のanbible.cfgに、秘密鍵のpathを設定(private_key_file)
3をやるなら、2は不要。
4:ansibleサーバ側の、/etc/hostsにvncとxrdpのIPアドレス設定
5:inventoryにhostsの設定を反映
inventoryには、hostsの名前を設定すること。IPアドレスは、inventoryには書いてはいけない。
gather factなし
become user
qiita書き方
https://qiita.com/hiroyuki_hon/items/f2a779bb295fd12646ab
https://qiita.com/Qiita/items/c686397e4a0f4f11683d
#よくまとまってるからあとでみる
https://qiita.com/waterada/items/4e64cc6f810a92001c95
#モジュール
##tags
でかいplaybookがある場合に、部分的に実行するために、tagを指定しておく。tag指定しておけば、こんな感じでいける。
http://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html?highlight=include_tasks
$ ansible-playbook example.yml --tags "configuration,packages"
tasks:
- yum:
name: "{{ item }}"
state: installed
loop:
- httpd
- memcached
tags:
- packages
- template:
src: templates/src.j2
dest: /etc/foo.conf
tags:
- configuration
##when
条件を作って、実行制御するためのパラメータ。
http://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement
- name: send channel setting for restapi
become: false
synchronize:
src: channel/
dest: ~/fabric-performance-verification.git/fabricRestTool/artifacts/channel/
delete: yes
when: "'web1' in inventory_hostname"
##command
リモートホストでコマンドを実行する。
http://docs.ansible.com/ansible/latest/modules/command_module.html?highlight=command
- name: install n
command: make -C /tmp/n
##shell
リモートホストにシェルを実行させる。commandとの違いがわからない。どっちでも同じことができるのは確かだと思う。becomeも含めてこれはモジュール?という疑問があるが、とりあえず下記のように指定すれば動くのでは、詳細はこれ以上進めて詰まったらやるで良い。chdirは実行ディレクトリ。
- name: build cryptogen/configtxgen script
become: true
shell: ./bootstrap-1.0.5.sh
args:
chdir: "{{ ansible_env.PWD }}/fabric/scripts"
ignore_errors
playbookは失敗すると止まるが、失敗しても止めたくないときに指定するパラメータ?
http://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html?highlight=ignore_errors
- name: mode old data
shell: mv /root/sar.data.{{ inventory_hostname }} /root/sar.data.{{ inventory_hostname }}.`date '+%Y%m%d-%H%M%S'`
ignore_errors: true
##file
ファイルやディレクトリやシンボリックリンクのパラメータをセットする。copyとかでもできるっぽい。
- name: change owner/group ~/fabric/scripts/bin
become: true
file:
path: "{{ ansible_env.PWD }}/fabric/scripts/bin"
state: directory
owner: "{{ ansible_env.USER }}"
group: "{{ ansible_env.USER }}"
##copy
リモートホストにファイルを転送する。copyするファイルは、「files」ディレクトリの中に配置しておく。
http://docs.ansible.com/ansible/latest/modules/copy_module.html?highlight=copy
- copy:
src: /etc/hosts
dest: /etc/hosts
owner: root
group: root
mode: 0644
##varialbes
http://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables
Variables Defined in a Playbook In a playbook, it’s possible to define variables directly inline like so
- hosts: webservers
vars:
http_port: 80
変数の指定。
##template
テンプレートファイル(jinja2)を展開したファイルをリモートホストへ転送する。ホストのtemplatesディレクトリにあるsrcのファイルをテンプレートとして、リモートのdestにファイルを生成する
http://docs.ansible.com/ansible/latest/modules/template_module.html?highlight=templat
- name: send docker-compose.yml
template:
src: docker-compose.yml
dest: ~/docker-compose.yml
##synchronize
rsyncのラッパー。rsyncほど有能なコマンドではないが、ある程度使える。copyとの違いがいまいちわからない。後続の処理に影響している?
http://docs.ansible.com/ansible/latest/modules/synchronize_module.html?highlight=synchronize
- name: send channel settings
synchronize:
src: channel/
dest: /root/channel/
delete: yes
##include_tasks
現在のplaybookで実行されるタスクのリスト。
http://docs.ansible.com/ansible/latest/modules/include_tasks_module.html?highlight=include_tasks
- include_tasks: install.yml
tags:
- install
##service
リモートホストのサービスを管理する。
http://docs.ansible.com/ansible/latest/modules/service_module.html?highlight=service
- name: restart docker
service:
name: docker
state: restarted
##systemd
リモートホストのsystemdサービスを管理する。serviceでも出来るような気がするが。。。
http://docs.ansible.com/ansible/latest/modules/systemd_module.html?highlight=systemd
- name: service disabled
systemd:
name: sysstat
state: stopped
enabled: false
##apt
APTパッケージのマネジメントを実施する。
http://docs.ansible.com/ansible/latest/modules/apt_module.html?highlight=apt
- name: Install apt docker
apt:
name: "{{ item }}"
update_cache: yes
force: yes
with_items:
- docker-engine
- python-setuptools
- apt-utils
- python-pip
with itemsは、 "{{ item }}"の部分に代入されてaptで繰り返しインストールしてくれる。
##apt_repository
UbuntuとDebianのAPT(Advanced Package Tool)のレポジトリを追加、削除する。
http://docs.ansible.com/ansible/latest/modules/apt_repository_module.html?highlight=apt_repository
- name: Add apt-repogitory for docker
apt_repository:
repo: "deb https://apt.dockerproject.org/repo ubuntu-xenial main"
update_cache: yes
##pip
依存関係にあるPythonのライブラリの管理。
http://docs.ansible.com/ansible/latest/modules/pip_module.html?highlight=pip
- name: pip install
pip:
name: "{{ item }}"
with_items:
- docker-compose
- docker
- dockerpty
- PyYAML
ignore_errors: yes
##git
gitのレポジトリの管理。destのディレクトリの中身に、repoで指定した箇所のファイルが入る。
http://docs.ansible.com/ansible/latest/modules/git_module.html?highlight=git
- name: download n
git:
repo: "{{ n_repo }}"
dest: /tmp/n
##docker image
Dockerのimagesを、Build, load or pullする。
http://docs.ansible.com/ansible/latest/modules/docker_image_module.html?highlight=docker_image
- name: pull an image
docker_image:
name: hyperledger/fabric-ca:x86_64-1.0.5
NameはたぶんDockerHubにあるイメージの名前をそのまま指定する。
Tagでつけるバージョンについても、dockerhubのhyperledger/fabric-caのページにある、tagsのページに記載がある。
ホストにある、compose-ymlのテンプレートのファイル名とディレクトリの場所を指定して、コントロールされる側に送る。
##docker_service
docker composeファイルを使った、startしたりshutdownしたり、servicesをscaleしたりする。とりあえず、ディレクトリ指定して、docker-compose.ymlを実行するものだという理解でよい。
http://docs.ansible.com/ansible/latest/modules/docker_service_module.html?highlight=docker_service
- name: Deploy the CA using docker compose
docker_service:
project_src: ~/
files: docker-compose.yml