4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ansible 2.9とVagrantをMacで使ってみた

Posted at

早起きしたのでAnsible勉強することにしました:sunny:
日曜日に早起きってなかなかレアです

検証環境:cat:

macOS Catalina(10.15.1)
余談。この本体自体はMacbook Air(11インチ 2012)
思ってたより長生き。メモリが4GBしかない:tea:
cpuも最近買った私のスマホに負けている(とほほ

Virtual boxをmacにインストールしてみる:mouse2:

https://www.virtualbox.org/wiki/Downloads
スクリーンショット 0002-02-02 7.19.09.png
OS X hostsのやつをダウンロードする
あとはいつものようにdmgファイルからインストール進めるだけ、、:relaxed:
と思ったらなにやらうまくいかなかった
スクリーンショット 0002-02-02 7.10.48.png
スクリーンショット 0002-02-02 7.11.52.png
えぇ、、:expressionless:
スクリーンショット 0002-02-02 7.20.45.png
環境設定のセキュリティとプライバシーのとこから↑のスクショの下あたりにvirtualBoxからの要求が残っているので、左下のカギマークを押して解除してからvirtualBoxを許可してあげる
※↑のスクショは既に解決済みスクショ(撮り損ねた、、)

再度インストールを実行すると上手く行った:ok_hand:
スクリーンショット 0002-02-02 7.12.30.png

$ VBoxManage -v
6.1.2r135662

Vagrantをmacにインストールしてみる:cow2:

https://www.vagrantup.com/downloads.html
スクリーンショット 0002-02-02 7.19.01.png
りんごのやつをダウンロード
スクリーンショット 0002-02-02 7.17.35.png
問題なくインストール完了:thumbsup:

$ vagrant -v
Vagrant 2.2.7

Ansibleをmacにインストールしてみる:tiger2:

brewでインストールしてみる

$ brew install ansible
~~🍺省略~~
==> Installing ansible
==> Downloading https://homebrew.bintray.com/bottles/ansible-2.9.3.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/69/693228e5f7c7b2b02581ae94589d28eac2b6b1128d97c87f08e8acfa22f8f035?__gda__=exp=1580596919~hmac=dafa919db241a7985a6b6023e8f64090da920dcfffbbb17bf
######################################################################## 100.0%
==> Pouring ansible-2.9.3.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/ansible/2.9.3: 16,933 files, 211.1MB
~~省略🍺~~

$ ansible --version
ansible 2.9.3
  config file = None
  configured module search path = ['/Users/ユーザー名/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/2.9.3/libexec/lib/python3.8/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.8.1 (default, Dec 27 2019, 18:06:00) [Clang 11.0.0 (clang-1100.0.33.16)]

$ ansible #Tabキー入力候補
ansible             ansible-connection  ansible-doc         ansible-inventory   ansible-pull        ansible-vault
ansible-config      ansible-console     ansible-galaxy      ansible-playbook    ansible-test

たぶん問題ないのでおっけ〜 バージョンは2.9.3(これが後の苦労に繋がる、、)

AnsibleとVagrantをMacで使ってみる(表題):rabbit2:

Ansibleがインストールできたので、環境準備していく:snake:

vagrant用のディレクトリを作成

$ cd /Users/ユーザー名 ※権限アリそうなところに適当に移動する
$ mkdir vagrants
$ mkdir vagrants/ansible_test
$ cd vagrants/ansible_test/ # これからずっと作業することになる場所
$ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.

ぼ、boxがなにも無いーーー!!(当然)

boxを追加する

$ vagrant box add centos/7 --provider virtualbox
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
==> box: Adding box 'centos/7' (v1905.1) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1905.1) for 'virtualbox'!
$ vagrant box list
centos/7 (virtualbox, 1905.1)

一応デフォルトで適切なプロバイダーを選ぶ的なことが記載されていたがaddするとき聞かれて入力するのは手間なので最初から指定しておく
オプションとして--provider virtualboxをつけることにした
Command: vagrant box

--provider PROVIDER - If given, Vagrant will verify the box you are adding is for the given provider. By default, Vagrant automatically detects the proper provider to use.

VagrantFileを作る

$ vagrant init centos/7
$ ls -la
Vagrantfile

作成したVagrantFileの設定を以下のように設定していくお:sushi:

VagrantFile
15行目くらい
  config.vm.box = "centos/7" #これはinitの時に指定したのでokですね
26行目くらい
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  のコメントアウト外す
  config.vm.network "forwarded_port", guest: 80, host: 8080
35行目くらい
  # config.vm.network "private_network", ip: "192.168.33.10"
 のコメントアウト外す
  config.vm.network "private_network", ip: "192.168.33.10"

ここでいったんvagrantの起動と接続に成功するか試す

$ vagrant up
$ vagrant ssh

okならいよいよAnsibleの設定をしてみようの巻
ダメならグーグル先生に聞いてみようのコース

Ansibleの設定をしてみる :dragon:

VagrantFileにAnsibleの設定を追加してみる

VagrantFile
70行目くらいに追加
 config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/ansible.yml"
    ansible.inventory_path = "provisioning/hosts"
    ansible.limit = 'all'
  end

InventoryやPlaybookを作成してみる

まずはInventoryやPlaybookを入れてくためのディレクトリ作成してみる

$ mkdir provisioning

inventoryファイルを作成してみる ※ エディタはお好みの物でok
$ vim provisioning/hosts

provisioning/hosts
[vagrant]
192.168.33.10 #ここにssh-configのホスト名を記述することも可能(らしい、試してない)
[vagrant:vars]
ansible_ssh_private_key_file=/Users/ユーザー名/vagrants/ansible_test/.vagrant/machines/default/virtualbox/private_key
ansible_become=yes
ansible_user=vagrant
ansible_become_method=su
ansible_become_user=root
ansible_become_password=vagrant

ansible_ssh_private_key_fileのパスは/からのパスで書くのをおすすめします

private_keyの場所はこのコマンドで確認できます

$ vagrant ssh-config

Ansibleやってる感でてきた:flushed:

playbookを作成してみる

わりと公式のドキュメントからのコピペです(公式ドキュメントのExample参考になります!)
yum – Manages packages with the yum package manager

nginx入れたかったのでnginxで書いてますが、
apache入れたい方はコメントアウトのとこ外してみてください(試してないけど多分動く

$ vim provisioning/ansible.yml

provisioning/ansible.yml
- name: my ansible start
  hosts: vagrant

  tasks:
  # Note: これ実行すると初回は時間がかかります
  - name: upgrade all packages
    yum:
      name: '*'
      state: latest
  # apache入れたい方はこちら〜
  # - name: install the latest version of Apache
  #   yum:
  #     name: httpd
  #     state: latest
  - name: install the nginx rpm from a remote repo
    yum:
      name: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
      state: installed
  - name: Install a list of packages
    yum:
      name:
        - nginx
        - postgresql
        - postgresql-server
        - git
      state: installed
  - name: nginx service started
    service:
      name: nginx
      state: started
      enabled: yes
  - name: create public directories
    file:
      path: /home/vagrant/app
      state: directory
      mode: '0755'
      owner: vagrant
      group: vagrant

実際にはバージョンの指定だとか、設定ファイルだとかphpやらrubyやら他にも、色々必要な事はあると思いますが、
今回はAnsibleに触れてみよ〜っていう気軽さなので、ここでは解説しません、、
(jinja2:shinto_shrine:とかの話も入れないといけなくなっちゃう:sob:)
あとは公式ドキュメントを読むだけ

ドライランとか

# syntax-check
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --syntax-check
YAML形式に慣れてないとここで泣かされる、、、

# dry-run
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --check
初回実行時(まだrunしてない)はパッケージインストールのとこでエラーがでるかもしれない、リポジトリ周りで

↑dry-runだけで大丈夫です(syntax-check書いたけど)
どうしてもsyntaxの檻から抜け出せない方はこちらの拡張をおすすめしときます!
vscode用です!
https://marketplace.visualstudio.com/items?itemName=vscoss.vscode-ansible

Ansibleをうごかしてみよう!(やっと):snake:

$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml

おそらくここでも数多の壁が立ちはだかるかも知れないですが、ログを見てがんばりましょう、応援してます!:innocent:
めんどくさくなったとか、もうしばらく英語は読みたくないとかではない

てきとうな確認

nginxはいりましたの確認

[root@localhost ~]# nginx -v
nginx version: nginx/1.16.1
[root@localhost ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-02-02 05:56:25 UTC; 13min ago
     Docs: http://nginx.org/en/docs/
  Process: 7508 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 7509 (nginx)
   CGroup: /system.slice/nginx.service
           ├─7509 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─7510 nginx: worker process

ブラウザからもnginxのウェルカムページが表示されるか確認してみる
スクリーンショット 0002-02-02 15.11.51.png

見れました!:confetti_ball:

ついでにディレクトリ作成されてるか確認

$ vagrant ssh
[vagrant@localhost ~]$ ll
合計 0
drwxr-xr-x. 2 vagrant vagrant 6  2月  2 05:56 app

755のvagrant:vagrantのappディレクトリができてますね
時間はなんかおかしいですね、、、というか時刻的にGMTだ、、
これも普段日本の時刻に合わせる時のやり方をすれば良いと思われます
あと作成時間のタイムスタンプとかの設定もできるっぽいので、詳しくは公式ドキュメントご確認ください
file – Manage files and file properties

感想:racehorse:

ちょっと早起きしたからってなんでも出来る気分になっていました。
やってみたら奥が深くて私のような初心者には難しいのではと思いつつも、
現時点で最新のバージョンでやってみました。
Macもぶっちゃけガタがきてて不安だったのですけど(ありがとう:apple:)
反省します、、後悔はしてない!

ひそかにトラブったやつ。。。

$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --check

PLAY [my ansible start] *************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************
The authenticity of host '192.168.33.10 (192.168.33.10)' can't be established.
ECDSA key fingerprint is SHA256:rDFlObtISFdpBb5500Sl+PDQ6Xk1RKoa8tndjwvpukY.
Are you sure you want to continue connecting (yes/no)? yes
fatal: [192.168.33.10]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.33.10' (ECDSA) to the list of known hosts.\r\nvagrant@192.168.33.10: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).", "unreachable": true}

PLAY RECAP **************************************************************************************************************************************************************************************
192.168.33.10              : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

ひみつのカギが!?ダメっていわれるやん!!

$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml --check --private-key=~/vagrants/ansible_test/.vagrant/machines/default/virtualbox/private_key
う、動いた〜

※この設定はInventoryに記述したためコマンド引数で渡す必要はなくなった、R.I.P...:innocent:

become周りにはさらに壮絶な試行錯誤が行われましたが、履歴が汚すぎるのでこの世から葬り去りました:skull_crossbones:

参考文献

非常に勉強になりました。全てのドキュメント著者に感謝
yum – Manages packages with the yum package manager
Understanding privilege escalation: become
How to build your inventory
file – Manage files and file properties
Ansible Quick Start video
MacにVagrantでCentOS7環境を作成
Ansibleをはじめる人に。
AnsibleとVagrantで開発環境を構築する
Ansible ~serviceモジュール~
ansible-playbookコマンドをInventoryファイルなしで実行する

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?