multipassでAnsibleの動作確認用のVMを作る
モチベーション
趣味で開発しているプロダクトのためにVPSを立てていて、Ansibleで各種ミドルウェアの設定をしているんだけど、VirtualBoxのApple Silicon への対応が微妙なのでmultipassを使ってVMを立てる+Ansible Playbookを流してセットアップするということをやってみたのでそのメモ。
multipassでVMを立ち上げる
まず初めにssh用の秘密鍵と公開鍵を生成する。multipassでVMを立ち上げるときはデフォルトでSSH用の鍵を生成してくれるけど、Ansibleでsshするときの鍵を作っておく。
ssh-keygen -t rsa -b 4096 -C multipass -f multipass
次に、以下のようなcloud-init.ymlを作成する。
users:
- default
- name: multipass
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- "ssh-rsa <上で生成した公開鍵>"
multipass launchでVMを立ち上げる時に、--cloud-init オプションで先ほどのcloud-init.ymlを指定する。これを行うことでmultipassユーザーの authorized_keys に上で作成したSSHの公開鍵がセットされる。
multipass launch -n vps -c=1 -m=1G -d=5G --cloud-init=cloud-init.yml
次にVMのIPアドレスを確認する。
multipass info vps
Name: vps
State: Running
IPv4: 192.168.64.13
Release: Ubuntu 22.04.2 LTS
Image hash: f6b5b3a980f2 (Ubuntu 22.04 LTS)
CPU(s): 1
Load: 0.20 0.11 0.04
Disk usage: 1.4GiB out of 4.7GiB
Memory usage: 151.3MiB out of 962.5MiB
Mounts: --
Ansibleのinventoryファイルを以下のようにする。
[local]
default ansible_host=<上で調べたIP> ansible_port=22 ansible_user='multipass' ansible_ssh_private_key_file='multipass'
最後にansible-playbookを実行する。
ANSIBLE_SSH_ARGS='-o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --inventory-file=ansible/inventory/multipass --timeout=30 -v -D ./ansible/hoge.yml
multipassのコマンドメモ
- multipass transfer : VMからファイルをコピーする or ホストからVMにファイルをコピーする
multipass shell: VM内にシェルでログインする