Updating NIC properties in SmartOS

A long time ago I provisioned a container for development processes but I used static ip address instead of just using dhcp.

UUID                                  TYPE  RAM      STATE             ALIAS
f86adbd1-f00d-45f9-bbff-326206f13264  LX    256      running           minecraft_bedrock
2d1bd872-ff7b-423f-a4c0-5a7e8767bb14  OS    1024     running           bcontrol
a234ec28-2af2-4640-890b-185210f8fc7b  OS    8192     running           illumos-dev

Luckily updating attributes for a container is easy in SmartOS. In my case I just want to update the ip address and gateway for the container. To accomplish that we just need to pass the tag 'update_nics' to vmadm and specify the attributes that are going to change. But first we need to validate that our update object is properly defined, using vmadm validate.

echo ' {"update_nics": [ {"gateways": [""], "ips": [""] , "mac": "72:75:cc:10:d7:81" } ] }' | vmadm validate  update joyent

My zone is of type joyent so I'm using that so the validate function will use that container type spec to validate against my proposed update. The result should be:

VALID 'update' payload for joyent brand VMs.

Now we can confidently apply our change

[root@dev01 ~]# echo ' {"update_nics": [ {"gateways": [""], "ips": [""] , "mac": "72:75:cc:10:d7:81" } ] }' | vmadm update a234ec28-2af2-4640-890b-185210f8fc7b
Successfully updated VM a234ec28-2af2-4640-890b-185210f8fc7b

The next time the container is started, the changes will be applied. As I'm not doing anything at this moment on that zone I'll rebooted.

[root@dev01 ~]# vmadm reboot a234ec28-2af2-4640-890b-185210f8fc7b
Successfully completed reboot for VM a234ec28-2af2-4640-890b-185210f8fc7b

Now let's check if the update worked.

[root@dev01 ~]# zlogin a234ec28-2af2-4640-890b-185210f8fc7b
[Connected to zone 'a234ec28-2af2-4640-890b-185210f8fc7b' pts/3]
Last login: Mon Mar  4 12:08:57 on pts/3
   __        .                   .
 _|  |_      | .-. .  . .-. :--. |-
|_    _|     ;|   ||  |(.-' |  | |
  |__|   `--'  `-' `;-| `-' '  ' `-'
                   /  ; Instance (base-64-lts 21.4.0)
                   `-'  https://docs.joyent.com/images/smartos/base

[root@a234ec28-2af2-4640-890b-185210f8fc7b ~]# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet netmask ff000000
net0: flags=40001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,L3PROTECT> mtu 1500 index 2
        inet netmask ffffff00 broadcast
        ether 72:75:cc:10:d7:81
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
        inet6 ::1/128
[root@a234ec28-2af2-4640-890b-185210f8fc7b ~]#

There are more examples like this in VMADM(8) manpage.


Figure 1: Bords de la côte à Saint-Jean-du-Doigt, Bretagne (1895)