Title: Advanced CLI Tasks TODO: Update nodes-tags.md to show assigning tags to machines with web UI; then link to it (for entry 'specify boot option') bug tracking: https://pad.lv/1700795 (IP assignment mode) table_of_contents: True
Advanced CLI Tasks
This is a list of advanced tasks to perform with the MAAS CLI. See MAAS CLI on how to get started.
Update node hostname and power parameters
To update the hostname and power parameters of a node:
maas $PROFILE machine update $SYSTEM_ID \
hostname=$HOSTNAME \
power_type=$POWER_TYPE \
power_parameters_power_address=$POWER_ADDRESS \
power_parameters_power_id=$HOSTNAMEFor example, to configure a KVM-based node:
maas $PROFILE machine update $SYSTEM_ID \
hostname=$HOSTNAME \
power_type=virsh \
power_parameters_power_address=qemu+ssh://ubuntu@$KVM_HOST/system \
power_parameters_power_id=$HOSTNAMESee Common CLI tasks for how to find a node's system id and BMC Power Types for details on different power types.
Relay DHCP
To relay DHCP traffic for a VLAN (source) through another VLAN (target):
maas $PROFILE vlan update $FABRIC_ID $VLAN_VID_SRC relay_vlan=$VLAN_ID_TARGETFor example, to relay VLAN with vid 0 (on fabric-2) through VLAN with id 5002 :
maas $PROFILE vlan update 2 0 relay_van=5002See DHCP relay for more information.
Assign a network interface to a fabric
This task is made easier with the aid of the jq utility. It filters the
maas command (JSON formatted) output and prints it in a desired way. This
allows one to quickly view and compare data. Go ahead and install it:
sudo apt install jqIn summary, an interface is indirectly assigned to a fabric by assigning it to a VLAN. First we need to gather various bits of data.
List some information on all machines:
maas $PROFILE machines read | jq '.[] | \
{hostname:.hostname, system_id: .system_id, status:.status}' --compact-outputExample output:
{"hostname":"node1","system_id":"dfgnnd","status":4}
{"hostname":"node2","system_id":"bkaf6e","status":6}
{"hostname":"node4","system_id":"63wqky","status":6}
{"hostname":"node3","system_id":"qwkmar","status":4}
!!! Note: An interface can only be edited when the corresponding machine has a status of 'Ready'. This is numberically denoted by the integer '4'.
List some information for all interfaces on the machine in question (identified by its system id 'dfgnnd'):
maas $PROFILE interfaces read dfgnnd | jq '.[] | \
{id:.id, name:.name, mac:.mac_address, vid:.vlan.vid, fabric:.vlan.fabric}' --compact-outputExample output:
{"id":8,"name":"eth0","mac":"52:54:00:01:01:01","vid":0,"fabric":"fabric-1"}
{"id":9,"name":"eth1","mac":"52:54:00:01:01:02","vid":null,"fabric":null}
List some information for all fabrics:
maas $PROFILE fabrics read | jq '.[] | \
{name:.name, vlans:.vlans[] | {id:.id, vid:.vid}}' --compact-outputExample output:
{"name":"fabric-0","vlans":{"id":5001,"vid":0}}
{"name":"fabric-1","vlans":{"id":5002,"vid":0}}
{"name":"fabric-2","vlans":{"id":5003,"vid":0}}
This example will show how to move interface '8' (on machine 'dfgnnd') from 'fabric-1' to 'fabric-0'. Based on the gathered information, this will consist of changing the interface's VLAN from '5002' to '5001':
maas $PROFILE interface update dfgnnd 8 vlan=5001 >/dev/nullVerify the operation by relisting information for the machine's interface:
maas $PROFILE interfaces read dfgnnd | jq '.[] | \
{id:.id, name:.name, mac:.mac_address, vid:.vlan.vid, fabric:.vlan.fabric}' --compact-outputThe output shows that the interface is now on fabric-0:
{"id":8,"name":"eth0","mac":"52:54:00:01:01:01","vid":0,"fabric":"fabric-0"}
{"id":9,"name":"eth1","mac":"52:54:00:01:01:02","vid":null,"fabric":null}
Change the IP assignment mode of a network interface
To edit the IP assignment mode of a network interface the existing subnet link first needs to be removed.
Begin by finding the interface ID as well as the interface's subnet link ID with the command:
maas $PROFILE node read $SYSTEM_IDOnce that's done, proceed to unlink and link:
maas $PROFILE interface unlink-subnet $SYSTEM_ID $INTERFACE_ID id=$SUBNET_LINK_ID
maas $PROFILE interface link-subnet $SYSTEM_ID $INTERFACE_ID mode=$IP_MODE subnet=$SUBNET_CIDR [$OPTIONS]For instance, to have interface '58', with subnet link '146', on node 'exqn37' use DHCP on subnet '192.168.1.0/24':
maas $PROFILE interface unlink-subnet exqn37 58 id=146
maas $PROFILE interface link-subnet exqn37 58 mode=dhcp subnet=192.168.1.0/24If, instead of DHCP, a static address was desired, then the second command would have looked like:
maas $PROFILE interface link-subnet exqn37 58 mode=static subnet=192.168.1.0/24 ip_address=192.168.1.113For a summary of IP assignment modes see Post-commission configuration.
Install a rack controller
To install and register a rack controller with the MAAS:
sudo apt install maas-rack-controller
sudo maas-rack register!!! Note: The register command is only needed if the rack controller is not being added to a system that already houses an API server.
You will be asked for the URL of the region API server. If you provide a
hostname ensure it is resolvable. Next, you will be prompted for the secret key
that is stored in file /var/lib/maas/secret on the API server.
You can get the above information from the web UI by visiting the 'Nodes' page, then the Controller tab, and clicking the button 'Add rack controller'. Here is an example of what you may see:
Based on the above, then, we could have also entered:
sudo maas-rack register --url http://10.5.1.5:5240/MAAS \
--secret fa847000e7cb681101d26e3477e6e39eSee Rack controller for an overview.
List rack controllers
To list all rack controllers registered with the region:
maas $PROFILE rack-controllers read | grep hostname | cut -d '"' -f 4Set the default storage layout
To set the default storage layout for all nodes:
maas $PROFILE maas set-config name=default_storage_layout value=$LAYOUT_TYPEFor example, to set the default layout to Flat:
maas $PROFILE maas set-config name=default_storage_layout value=flat!!! Warning "Important": The new default will only apply to newly-commissioned nodes.
See Storage for more details on MAAS storage features.
Set a storage layout
An administrator can set a storage layout for a node with a status of 'Ready' like this:
maas $PROFILE machine set-storage-layout $SYSTEM_ID storage_layout=$LAYOUT_TYPE [$OPTIONS]For example, to set an LVM layout where the logical volume has a size of 5 GB:
maas $PROFILE machine set-storage-layout $SYSTEM_ID storage_layout=lvm lv_size=5368709120All storage sizes are currently required to be specified in bytes.
!!! Warning This will remove the configuration that may exist on any block device.
