mirror of
https://github.com/churchers/vm-bhyve.git
synced 2025-12-10 16:59:46 +01:00
Merge pull request #594 from metalefty/cloud-init/pubkeys
Add support for injecting multiple SSH pubkeys
This commit is contained in:
@@ -273,10 +273,11 @@ To list downloaded images:
|
||||
default FreeBSD-14.2-RELEASE-amd64.raw
|
||||
default xenial-server-cloudimg-amd64-uefi1.img
|
||||
|
||||
## Using cloud init
|
||||
## Using cloud-init
|
||||
|
||||
vm-bhyve has basic support for providing cloud-init configuration to the guest. You can enable it with `-C` option
|
||||
to `vm create` command. You can also pass public SSH key to be injected into the guest with option `-k <file>`.
|
||||
The public key file can contain multiple public SSH keys, one per line, in the `authorized_keys` format.
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
12
lib/vm-core
12
lib/vm-core
@@ -139,7 +139,7 @@ core::list(){
|
||||
core::create(){
|
||||
local _name _opt _size _vmdir _disk _disk_dev _num=0
|
||||
local _zfs_opts _disk_size _template="default" _ds="default" _ds_path _img _cpu _memory _uuid
|
||||
local _enable_cloud_init _cloud_init_dir _ssh_public_key _ssh_key_file _network_config _mac
|
||||
local _enable_cloud_init _cloud_init_dir _ssh_public_keys _ssh_public_key _ssh_key_file _network_config _mac
|
||||
|
||||
while getopts d:t:s:i:c:m:Ck:n: _opt ; do
|
||||
case $_opt in
|
||||
@@ -185,7 +185,7 @@ core::create(){
|
||||
|
||||
[ -z "${_enable_cloud_init}" ] && util::err "cloud-init is required for injecting public key. Use -C to enable it."
|
||||
[ ! -r "${_ssh_key_file}" ] && util::err "can't read file with public key (${_ssh_key_file})"
|
||||
_ssh_public_key="$(cat "${_ssh_key_file}")"
|
||||
_ssh_public_keys="$(sed -e '/^$/d' -e '/^#/d' "${_ssh_key_file}")"
|
||||
fi
|
||||
|
||||
# if we're on zfs, make a new filesystem
|
||||
@@ -306,11 +306,15 @@ resize_rootfs: True
|
||||
manage_etc_hosts: localhost
|
||||
EOF
|
||||
|
||||
if [ -n "${_ssh_public_key}" ]; then
|
||||
if [ -n "${_ssh_public_keys}" ]; then
|
||||
cat << EOF >> "${_cloud_init_dir}/user-data"
|
||||
ssh_authorized_keys:
|
||||
EOF
|
||||
echo "${_ssh_public_keys}" | while read -r _ssh_public_key; do
|
||||
cat << EOF >> "${_cloud_init_dir}/user-data"
|
||||
- ${_ssh_public_key}
|
||||
EOF
|
||||
done
|
||||
fi
|
||||
|
||||
makefs -t cd9660 -o R,L=cidata "${VM_DS_PATH}/${_name}/seed.iso" ${_cloud_init_dir} || util::err "Can't write seed.iso for cloud-init"
|
||||
@@ -342,7 +346,7 @@ core::write_img(){
|
||||
if [ ! -r "${_disk_dev}" ]; then
|
||||
sleep 1
|
||||
i=$(($i+1))
|
||||
else
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -163,7 +163,7 @@ Usage: vm ...
|
||||
datastore add <name> <path>
|
||||
list [-r]
|
||||
info [name] [...]
|
||||
create [-d datastore] [-t template] [-s size] [-m memory] [-c vCPUs] <name>
|
||||
create [-d datastore] [-t template] [-s size] [-m memory] [-c vCPUs] [-i vm-image] [-C -k pubkeys] <name>
|
||||
install [-fi] <name> <iso>
|
||||
start [-fi] <name> [...]
|
||||
stop <name> [...]
|
||||
|
||||
Reference in New Issue
Block a user