Ansible入門
Ansible入門
概要
サーバーの構成管理ツール
これまでのchefなどの構成管理ツールと違い「sshログインのみ」できればclient側に操作できる。
基本的に構成を管理してるので既にその構成になっているclientには、何もしない。
リンク
参考リンク
Ansibleのドキュメントを読んでみたメモ AnsibleでのEC2接続時エラーへの対処法
イメージ図
基本的な登場人物
- InventoryFile(hosts)...サーバーのリスト 参考
- ansible.cfg...ansibleの設定ファイル
- playbook.yml...サーバ構築のための作業命令を書いておくファイル 参考
試しに作ってみる
HostサーバからDBサーバやWebサーバに設定を流してみる
環境を作ってみる(ansibleを試す環境作成)
ansibleを実行できる環境をつくるので、ansible自体とは関係ないです。
必要なければ飛ばしてください。
vagrant install
2 ディレクトリ作成から初期化
$ mkdir -p Vagrant/ansible $ cd Vagrant/ansible $ vagrant init chef/centos-6.5
3 Vagrantfileを編集
$ ls Vagrantfile $ vim Vagrantfile
下記の箇所を変更
#config.vm.box = 'chef/centos-6.5' config.vm.define "host" do |node| node.vm.box = "chef/centos-6.5" node.vm.hostname = "host" node.vm.network :private_network, ip: "192.168.43.51" end config.vm.define "web" do |node| node.vm.box = "chef/centos-6.5" node.vm.hostname = "web" node.vm.network :private_network, ip: "192.168.43.52" end config.vm.define "db" do |node| node.vm.box = "chef/centos-6.5" node.vm.hostname = "db" node.vm.network :private_network, ip: "192.168.43.53" end
4 vm3台立ち上げる
$ vagrant up
5 起動したらstatus確認
$ vagrant status Current machine states: host running (virtualbox) web running (virtualbox) db running (virtualbox) This environment represents multiple VMs. The VMs are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`.
ansible構築
ansible install
1 hostにログイン
$ vagrant ssh host
2 install
$ wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo rpm -Uvh epel-release-6-8.noarch.rpm $ sudo yum install -y ansible $ ansible --version ansible 1.8.4 configured module search path = None
3 ssh設定をしよう
hostにログインしておきます。
$ vim .ssh/config $ chmod 600 .ssh/config
.ssh/configの中身
Host web HostName 192.168.43.52 Host db HostName 192.168.43.53
4 sshのkeyを作成
$ ssh-keygen -t rsa
5 web,dbのauthorizedkeyに登録
$ ssh-copy-id web $ ssh-copy-id db ※passwordを聞かれたら「vagrant」 passwordを聞かれずにログインできることを確認 $ ssh web $ ssh db
ansibleを使ってみる
Inventoryファイルの作成
$ vim hosts [web] 192.168.43.52 [db] 192.168.43.53
試しにpingしてみる
$ ansible all -i hosts -m ping 192.168.43.52 | success >> { "changed": false, "ping": "pong" } 192.168.43.53 | success >> { "changed": false, "ping": "pong" }
いちいち[-i hosts]とinventoryファイルを指定するのは面倒のでconfigに書いてみる
$ vim ansible.cfg [defaults] hostfile = ./hosts
inventoryファイルを指定しないでpingを売ってみる
$ ansible all -m ping 192.168.43.52 | success >> { "changed": false, "ping": "pong" } 192.168.43.53 | success >> { "changed": false, "ping": "pong" }
playbookを使ってみる
playbookを使ってuserを作成してみる
$ vim playbook.yml --- - hosts: all sudo: yes tasks: - name: add a new user user: name=kiwamu
実行してみる
$ ansible-playbook playbook.yml
その他試してみる
文法が正しいかをチェック ansible-playbook playbook.yml --syntax-check taskの一覧を表示してみる ansible-playbook playbook.yml --list-task ドライランしてみる ansible-playbook playbook.yml --check
いろいろ試してみる
webにhttp,phpをinstallして、index.phpを転送、 dbにmysqlをinstallなどなど
playbookの中身
--- - hosts: all sudo: yes # vars: # username: kiwamu # vars_prompt: # username: "Enter username" tasks: - name: add a new user user: name=kiwamu - name: install libselinux-python yum: name=libselinux-python state=latest - hosts: web sudo: yes tasks: - name: install apache yum: name=httpd state=latest - name: start apache and enabled service: name=httpd state=started enabled=yes - name: change owner file: dest=/var/www/html owner=vagrant recurse=yes - name: copy index.html copy: src=./index.html dest=/var/www/html/index.html owner=vagrant - name: install php pachages yum: name={{item}} state=latest with_items: - php - php-devel - php-mbstring - php-mysql notify: - restart apache - name: copy hello.php copy: src=./hello.php dest=/var/www/html/hello.php owner=vagrant handlers: - name: restart apache service: name=httpd state=restarted - hosts: db sudo: yes tasks: - name: install mysql yum: name={{item}} state=latest with_items: - mysql-server - MySQL-python - name: start mysql and enabled service: name=mysqld state=started enabled=yes - name: create a database mysql_db: name=mydb state=present - name: create a user for mydb mysql_user: name=dbuser password=dbpassword priv=mydb.*:ALL state=present
実行してみる
$ ansible-playbook playbook.yml PLAY [all] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.43.52] ok: [192.168.43.53] TASK: [add a new user] ******************************************************** ok: [192.168.43.53] ok: [192.168.43.52] TASK: [install libselinux-python] ********************************************* ok: [192.168.43.53] ok: [192.168.43.52] PLAY [web] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.43.52] TASK: [install apache] ******************************************************** ok: [192.168.43.52] TASK: [start apache and enabled] ********************************************** ok: [192.168.43.52] TASK: [change owner] ********************************************************** ok: [192.168.43.52] TASK: [copy index.html] ******************************************************* ok: [192.168.43.52] TASK: [install php pachages] ************************************************** ok: [192.168.43.52] => (item=php,php-devel,php-mbstring,php-mysql) TASK: [copy hello.php] ******************************************************** ok: [192.168.43.52] PLAY [db] ********************************************************************* GATHERING FACTS *************************************************************** ok: [192.168.43.53] TASK: [install mysql] ********************************************************* ok: [192.168.43.53] => (item=mysql-server,MySQL-python) TASK: [start mysql and enabled] *********************************************** ok: [192.168.43.53] TASK: [create a database] ***************************************************** ok: [192.168.43.53] TASK: [create a user for mydb] ************************************************ ok: [192.168.43.53] PLAY RECAP ******************************************************************** 192.168.43.52 : ok=10 changed=0 unreachable=0 failed=0 192.168.43.53 : ok=8 changed=0 unreachable=0 failed=0