oinume journal

Scratchpad of what I learned

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内にシェルでログインする