早起きしたのでAnsible勉強することにしました
日曜日に早起きってなかなかレアです
検証環境
macOS Catalina(10.15.1)
余談。この本体自体はMacbook Air(11インチ 2012)
思ってたより長生き。メモリが4GBしかない
cpuも最近買った私のスマホに負けている(とほほ
Virtual boxをmacにインストールしてみる
https://www.virtualbox.org/wiki/Downloads
OS X hostsのやつをダウンロードする
あとはいつものようにdmgファイルからインストール進めるだけ、、
と思ったらなにやらうまくいかなかった
えぇ、、
環境設定のセキュリティとプライバシーのとこから↑のスクショの下あたりにvirtualBoxからの要求が残っているので、左下のカギマークを押して解除してからvirtualBoxを許可してあげる
※↑のスクショは既に解決済みスクショ(撮り損ねた、、)
$ VBoxManage -v
6.1.2r135662
Vagrantをmacにインストールしてみる
https://www.vagrantup.com/downloads.html
りんごのやつをダウンロード
問題なくインストール完了
$ vagrant -v
Vagrant 2.2.7
Ansibleをmacにインストールしてみる
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で使ってみる(表題)
Ansibleがインストールできたので、環境準備していく
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の設定を以下のように設定していくお
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の設定をしてみる
VagrantFileにAnsibleの設定を追加してみる
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
[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やってる感でてきた
playbookを作成してみる
わりと公式のドキュメントからのコピペです(公式ドキュメントのExample参考になります!)
yum – Manages packages with the yum package manager
nginx入れたかったのでnginxで書いてますが、
apache入れたい方はコメントアウトのとこ外してみてください(試してないけど多分動く
$ vim 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とかの話も入れないといけなくなっちゃう)
あとは公式ドキュメントを読むだけ
ドライランとか
# 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をうごかしてみよう!(やっと)
$ ansible-playbook -i provisioning/hosts provisioning/vagrant.yml
おそらくここでも数多の壁が立ちはだかるかも知れないですが、ログを見てがんばりましょう、応援してます!
めんどくさくなったとか、もうしばらく英語は読みたくないとかではない
てきとうな確認
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のウェルカムページが表示されるか確認してみる
見れました!
ついでにディレクトリ作成されてるか確認
$ 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
感想
ちょっと早起きしたからってなんでも出来る気分になっていました。
やってみたら奥が深くて私のような初心者には難しいのではと思いつつも、
現時点で最新のバージョンでやってみました。
Macもぶっちゃけガタがきてて不安だったのですけど(ありがとう)
反省します、、後悔はしてない!
ひそかにトラブったやつ。。。
$ 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...
become周りにはさらに壮絶な試行錯誤が行われましたが、履歴が汚すぎるのでこの世から葬り去りました
参考文献
非常に勉強になりました。全てのドキュメント著者に感謝
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ファイルなしで実行する