Help us understand the problem. What is going on with this article?

Vagrant で Ansible 使ってみた

はじめに

業務で Ansible を使うことになったため、調べたことなどを備忘録的にまとめます

環境構築

Vagrant + Virtual Box で、VM を 2 つ用意

VM controller node
用途 Ansible をインストール 管理対象
OS CentOS 7 Ubuntu 18.04
IP 192.168.100.10 192.168.100.20

controller

$ mkdir ansible
$ cd ansible
$ mkdir data
$ vagrant init 
$ vi Vagrantfile

以下のように記述

Vagrant.configure("2") do |config|
  config.vm.define "controller" do |controller|
    controller.vm.box = "bento/ubuntu-18.04"
    controller.vm.hostname = "controller"
    controller.vm.network "private_network", ip: "192.168.100.10", virtualbox__intnet: "mynetwork"
    controller.vm.synced_folder "./data", "/home/vagrant/data"
  end
  config.vm.define "node" do |node|
    node.vm.box = "centos/7"
    node.vm.hostname = "node"
    node.vm.network "private_network", ip: "192.168.100.20", virtualbox__intnet: "mynetwork"
  end
end

VM の SSH 接続情報は以下のコマンドで確認

$ vagrant ssh-config
Host controller
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/f/Vagrant/ansible_x/.vagrant/machines/controller/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

特に大事なのは、IdentityFile~ の行
ここに、秘密鍵が格納されているため、SSH 接続する際はその情報を利用
この秘密鍵をコピーして、VM の中におけば、controller から、node に SSH 接続可能

controller に接続する際は、以下のコマンドを実行

$ ssh -i /Users/f/Vagrant/ansible/controller/.vagrant/machines/default/virtualbox/private_key vagrant@192.168.100.10

[注意]
本来の Vagrant 的な SSH 接続は、vagrant ssh コマンド

接続が確認できたら、controller に Ansible をインストール

Ansible のインストール

[注意]
controller の VM で行う

公式のインストレーションガイド の通りにインストール

$ sudo apt -y update
$ sudo apt -y install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt -y install ansible

インストール確認

$ ansible --version
ansible 2.9.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15+ (default, Oct  7 2019, 17:39:04) [GCC 7.4.0]

Ansible 実行

Ansible を使って、node に Apache をインストール & 起動してみる

以下のファイルを作成

$ tree
.
└── sample
    ├── inventory
    └── playbook.yml
inventory
[node]
192.168.1.200
ansible_ssh_private_key_file=~/.ssh/key/node_private_key

[注意]
node の秘密鍵を、~/.ssh/key/node_private_key600 で格納しておく

playbook.yml
- hosts: node
  become: yes
  tasks:
    - name: install package
      yum:
        name: httpd
        state: installed

    - name: start service
      systemd:
        name: httpd
        state: started
        enabled: yes

必要ファイルが準備できたら以下のコマンドを実行

$ ansible-playbook -i inventory playbook.yml

これで、node で Apache Web サーバが起動している
http://192.168.100.20
にブラウザからアクセスすると、welcome ページが表示される

おまけ

ssh 接続設定
これがあれば、inventory はホスト名だけ書けばいい

~/.ssh/config
Host node
User vagrant
HostName 192.168.100.20
IdentityFile ~/.ssh/private_key/node_private_key
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした