Ubuntu Pastebin

Paste from Marcus@maas at Thu, 6 Jul 2017 15:02:12 +0000

Download as text
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
@julen: Yes, feel free to include it.

## This configuration is for automated configuration of a host in state 'ready'
## It deletes all network and HDD Settings and sets them according to the following scheme:
## 2x10GbE with LACP Port-Channel and VLAN trunk
## 2x1GbE without VLAN as PxE-Interface and heartbeat interface
## 2xSSD as RAID 1 (for EFI, system, etc.) sda and sdb
## 4xSSD as RAID 10, sdc, sdd, sde, sdf (for data)
## 

# list all machines in state 'ready'
 maas ${PROFILE} machines read | jq '.[] | select(.status_name=="Ready") | {hostname: .hostname, system_id: .system_id, status: .status, in: [.interface_set[].name]|sort }' --compact-output

## set variables
HOST_ID=               # eg. swgwn8
HOST_NUM=              # eg. 167 -> used for IP configuration
INTERFACE_10G_1=       # eg. enp5s0f0
INTERFACE_10G_2=       # eg. enp5s0f1
INTERFACE_PXE_BOOT=    # eg. eno1
INTERFACE_HEARTBEAT=   # eg. eno2

## create maas variables
ALL_INTERFACES=$(maas ${PROFILE} interfaces read ${HOST_ID})
MAC_10G_1=$(echo ${ALL_INTERFACES} | jq '.[] | select(.name == "'${INTERFACE_10G_1}'") | .["mac_address"]' | sed -s 's/"//g')
MAC_10G_2=$(echo ${ALL_INTERFACES} | jq '.[] | select(.name == "'${INTERFACE_10G_2}'") | .["mac_address"]' | sed -s 's/"//g')
MAC_PXE_BOOT=$(echo ${ALL_INTERFACES}  | jq '.[] | select(.name == "'${INTERFACE_PXE_BOOT}'") | .["mac_address"]' | sed -s 's/"//g')
MAC_HEARTBEAT=$(echo ${ALL_INTERFACES}  | jq '.[] | select(.name == "'${INTERFACE_HEARTBEAT}'") | .["mac_address"]' | sed 's/"//g')
ID_INTERFACE_10G_1=$(echo ${ALL_INTERFACES}  | jq '.[] | select(.name == "'${INTERFACE_10G_1}'") | .id')
ID_INTERFACE_10G_2=$(echo ${ALL_INTERFACES}  | jq '.[] | select(.name == "'${INTERFACE_10G_2}'") | .id')
ALL_VLANS=$(maas ${PROFILE} vlans read 1)
VLAN_0_ID=$(echo ${ALL_VLANS} | jq '.[] | select(.vid==0) | .id')
VLANS=$(echo ${ALL_VLANS} | jq '.[] |  select(.vid != 0) | .id')
INTERFACE_HEARTBEAT_ID=$(echo ${ALL_INTERFACES}  | jq '.[] | select(.name == "'${INTERFACE_HEARTBEAT}'") | .id ')
ALL_SUBNETS=$(maas ${PROFILE} subnets read)
SUBNET_EC_SDN_NET=$(echo ${ALL_SUBNETS} | jq '.[] | select(.name=="ec-sdn-net") | .id' --compact-output)
SUBNET_HW_NET=$(echo ${ALL_SUBNETS} | jq '.[] | select(.name=="ec-hw-net") | .id' --compact-output)
SUBNET_PXE_BOOT=$(echo ${ALL_SUBNETS} | jq '.[] | select(.name=="pxe-boot") | .id' --compact-output)
SUBNET_HEARTBEAT=$(echo ${ALL_SUBNETS} | jq '.[] | select(.name=="heartbeat") | .id' --compact-output)
echo ${SUBNET_EC_SDN_NET} + ${SUBNET_HW_NET} + ${SUBNET_PXE_BOOT} + ${SUBNET_HEARTBEAT}
#################################

# Create Bonding Device mit MAC-Addresse 'MAC_10G_1'
BOND_0=$(maas ${PROFILE} interfaces create-bond ${HOST_ID} name=bond0 parents={${ID_INTERFACE_10G_1},${ID_INTERFACE_10G_2}} bond_mode=802.3ad mtu=9000 mac_address="${MAC_10G_1}")
 
# Create Bridge auf dem gerade erzeugten bonding Device mit VLAN '0'
BOND0_ID=$(echo ${BOND_0} | jq '. | .id ')
BR0=$(maas ${PROFILE} interfaces create-bridge ${HOST_ID} name=br0 mac_address=${MAC_10G_1} vlan=${VLAN_0_ID} mtu=9000 parent=${BOND0_ID})
 
# Create all VLAN-Bridges (br0 -> vlan<NUM> -> br-vlan<NUM>)
BR0_ID=$(echo ${BR0} | jq '. | .id ')
for MY_VLAN_ID in $VLANS ; do
  NEW_VLAN=$(maas ${PROFILE} interfaces create-vlan ${HOST_ID} vlan=${MY_VLAN_ID} mtu=9000 parent=${BR0_ID})
  NEW_VLAN_DEVICE_ID=$(echo ${NEW_VLAN} | jq '. | .id ')
  NEW_VLAN_ID=$(echo ${NEW_VLAN} | jq '. | .vlan.vid ')
  NET=$(echo ${ALL_SUBNETS} | jq '.[] | select(.vlan.id=='${MY_VLAN_ID}') | .cidr | select(.[0:3]=="10.") | split("/") | .[0] | split(".") | [.[0,1,2]] | join(".")' | sed 's/"//g')
  IP_ADDR=${NET}.${HOST_NUM}
  echo "NEW_VLAN_ID=${NEW_VLAN_ID} ; NEW_VLAN_DEVICE_ID=${NEW_VLAN_DEVICE_ID} ; NET=${NET} ; IP=${IP_ADDR}"
  VLAN_BRIDGE=$(maas ${PROFILE} interfaces create-bridge ${HOST_ID} name=br-vlan${NEW_VLAN_ID} mac_address=${MAC_10G_1} parent=${NEW_VLAN_DEVICE_ID} mtu=9000)
  NEW_VLAN_DEVICE_ID=$(echo ${VLAN_BRIDGE} | jq '. | .id ')
  if [ "${NET}" != "" ] ; then
    SUBNET_LINK=$(maas ${PROFILE} interface link-subnet ${HOST_ID} ${NEW_VLAN_DEVICE_ID} mode="STATIC" subnet="${NET}.0/24" ip_address="${IP_ADDR}")
    if [ $? == 0 ] ; then
        echo "subnet ${NET}.0/24 linked to bridge \"br-vlan${NEW_VLAN_ID}\" with IP \"${IP_ADDR}\""
    else
        echo "WARNING: could not link subnet \"${NET}.0/24\" to bridge \"br-vlan${NEW_VLAN_ID}\" with IP \"${IP_ADDR}\""
        echo "  Message: ${SUBNET_LINK}"
    fi
  else
    echo "WARNING: No valid subnet found for VLAN ${NEW_VLAN_ID}"
  fi
done

## Should have some output like:
#    NEW_VLAN_ID=1 ; NEW_VLAN_DEVICE_ID=247 ; NET=10.10.6 ; IP=10.10.6.167
#    subnet 10.10.6.0/24 linked to bridge "br-vlan606" with IP "10.10.6.167"
#    NEW_VLAN_ID=2 ; NEW_VLAN_DEVICE_ID=249 ; NET=10.10.5 ; IP=10.10.5.167
#    subnet 10.10.5.0/24 linked to bridge "br-vlan605" with IP "10.10.5.167"
#    NEW_VLAN_ID=3 ; NEW_VLAN_DEVICE_ID=251 ; NET= ; IP=.167
#    WARNING: No valid subnet found for VLAN 3

HB_BRIDGE=$(maas ${PROFILE} interfaces create-bridge ${HOST_ID} name=br-heartbeat mac_address="${MAC_HEARTBEAT}" mtu=9000 parent=${INTERFACE_HEARTBEAT_ID})
BR_HEARTBEAT_ID=$(echo ${HB_BRIDGE} | jq '. | .id ')
SUBNET_LINK=$(maas ${PROFILE} interface link-subnet ${HOST_ID} ${BR_HEARTBEAT_ID} mode="STATIC" subnet=${SUBNET_HEARTBEAT} ip_address=10.10.20.${HOST_NUM})
if [ $? == 0 ] ; then
    echo "subnet ${NET}.0/24 linked to bridge \"br-vlan${NEW_VLAN_ID}\" with IP \"${NET}.${HOST_NUM}\""
else
    echo "WARNING: could not link subnet \"${NET}.0/24\" to bridge \"br-vlan${NEW_VLAN_ID}\" with IP \"${NET}.${HOST_NUM}\""
    echo "  Message: ${SUBNET_LINK}"
fi

### Now delete all HDD configuration
## delete all LVs
ALL_LVS=$(maas ${PROFILE} volume-groups read ${HOST_ID} | jq '.[] |."logical_volumes"[] | "\(.system_id):\(.id)"' --compact-output | sed 's/"//g')
for THIS_LV in ${ALL_LVS} ; do
  THIS_HOST_ID=$(echo ${THIS_LV} | awk -F":" '{print $1}')
  THIS_LV_ID=$(echo ${THIS_LV} | awk -F":" '{print $2}')
  maas ${PROFILE} block-device unmount ${THIS_HOST_ID} ${THIS_LV_ID}
  maas ${PROFILE} block-device delete ${THIS_HOST_ID} ${THIS_LV_ID}
done
 
## delete all volume-groups
ALL_VG_IDS=$(maas ${PROFILE} volume-groups read ${HOST_ID} | jq '.[] | .id')
for VG_ID in ${ALL_VG_IDS} ; do
  maas ${PROFILE} volume-group delete ${HOST_ID} ${VG_ID}
done
 
## delete all md-RAID Devices
MD_RAIDS=$(maas ${PROFILE} raids read ${HOST_ID})
MD_DEVICES=$(echo ${MD_RAIDS} | jq '.[] | .id')
for MD_DEVICE in ${MD_DEVICES} ; do
  SYSTEM_ID=$(echo $PARTITION | awk -F":" '{print $1}')
  DEVICE_ID=$(echo $PARTITION | awk -F":" '{print $2}')
  ID=$(echo $PARTITION | awk -F":" '{print $3}')
  maas ${PROFILE} raid delete ${HOST_ID} ${MD_DEVICE}
done
#
 
## delete all partitions
BLOCK_DEVICES=$(maas ${PROFILE} block-devices read ${HOST_ID})
PARTITIONS=$(echo ${BLOCK_DEVICES} | jq '.[] | ."partitions"[] | "\(.system_id):\(.device_id):\(.id)"' --compact-output | sed 's/"//g')
 
for PARTITION in ${PARTITIONS} ; do
  SYSTEM_ID=$(echo $PARTITION | awk -F":" '{print $1}')
  DEVICE_ID=$(echo $PARTITION | awk -F":" '{print $2}')
  ID=$(echo $PARTITION | awk -F":" '{print $3}')
  maas ${PROFILE} partition delete ${SYSTEM_ID} ${DEVICE_ID} ${ID}
done

####### Partitioning ##########################
BLOCK_DEVICES=$(maas ${PROFILE} block-devices read ${HOST_ID})
SDC_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="sdc") | .id')
SDD_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="sdd") | .id')
SDE_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="sde") | .id')
SDF_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="sdf") | .id')

RAID_MD1=$(maas ${PROFILE} raids create ${HOST_ID} name=md1 level=raid-10 block_devices={${SDC_ID},${SDD_ID},${SDE_ID},${SDF_ID}})
BLOCK_DEVICES=$(maas ${PROFILE} block-devices read ${HOST_ID})
MD1_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="md1") | .id')

## SDA and SDB with 4 partitions
## 2x EFI, 
## 1x /boot (im RAID)
## 1x SWAP (im RAID)
## 1x / (ROOT) (im RAID)

SDA_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="sda") | .id')
SDB_ID=$(echo $BLOCK_DEVICES | jq ' .[] |select(.name=="sdb") | .id')

### EFI
EFI_PARTITION_A=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDA_ID} size=200M uuid=$(uuidgen) bootable=yes)
SDA_EFI_ID=$(echo ${EFI_PARTITION_A} | jq ' . | .id')
EFI_PARTITION_A=$(maas ${PROFILE} partition format ${HOST_ID} ${SDA_ID} ${SDA_EFI_ID} fstype=fat32 uuid=$(uuidgen) label="efi-A")
maas ${PROFILE} partition mount $(echo ${EFI_PARTITION_A} | jq '. | "\(.system_id) \(.device_id) \(.id)"' | sed 's/"//g') mount_point="/boot/efi"

EFI_PARTITION_B=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDB_ID} size=200M uuid=$(uuidgen) bootable=no)
SDB_EFI_ID=$(echo ${EFI_PARTITION_B} | jq ' . | .id')
EFI_PARTITION_B=$(maas ${PROFILE} partition format ${HOST_ID} ${SDB_ID} ${SDB_EFI_ID} fstype=fat32 uuid=$(uuidgen) label="efi-B")

### /boot Partition erstellen
BOOT_PARTITION_A=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDA_ID} size=2G uuid=$(uuidgen) bootable=no)
BOOT_A_ID=$(echo ${BOOT_PARTITION_A} | jq ' . | .id')
BOOT_PARTITION_B=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDB_ID} size=2G uuid=$(uuidgen) bootable=no)
BOOT_B_ID=$(echo ${BOOT_PARTITION_B} | jq ' . | .id')
RAID_BOOT=$(maas ${PROFILE} raids create ${HOST_ID} name=md4 level=raid-1 partitions={${BOOT_A_ID},${BOOT_B_ID}})
DEVICE_ID=$(echo ${RAID_BOOT} | jq ' . | .id')
ID=$(echo ${RAID_BOOT} | jq ' . | .virtual_device | .id')

BOOT_PARTITION=$(maas ${PROFILE} block-device format ${HOST_ID} ${ID} fstype=ext4 uuid=$(uuidgen) label="boot")
maas ${PROFILE} block-device mount ${HOST_ID} ${ID} mount_point="/boot"

### SWAP Partition erstellen
SWAP_PARTITION_A=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDA_ID} size=10G uuid=$(uuidgen) bootable=no)
SWAP_A_ID=$(echo ${SWAP_PARTITION_A} | jq ' . | .id')
SWAP_PARTITION_B=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDB_ID} size=10G uuid=$(uuidgen) bootable=no)
SWAP_B_ID=$(echo ${SWAP_PARTITION_B} | jq ' . | .id')
RAID_SWAP=$(maas ${PROFILE} raids create ${HOST_ID} name=md3 level=raid-1 partitions={${SWAP_A_ID},${SWAP_B_ID}})
DEVICE_ID=$(echo ${RAID_SWAP} | jq ' . | .id')
ID=$(echo ${RAID_SWAP} | jq ' . | .virtual_device | .id')

SWAP_PARTITION=$(maas ${PROFILE} block-device format ${HOST_ID} ${ID} fstype=swap uuid=$(uuidgen) label="SWAP")
#maas ${PROFILE} block-device mount ${HOST_ID} ${ID} mount_point="/boot"

### ROOT Partition erstellen
MAX_SIZE_A=$(maas ${PROFILE} block-devices read ${HOST_ID} | jq '.[] | select(.name=="sda") | .available_size')
ROOT_PARTITION_A=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDA_ID} size=${MAX_SIZE_A} uuid=$(uuidgen) bootable=no)
ROOT_A_ID=$(echo ${ROOT_PARTITION_A} | jq ' . | .id')
MAX_SIZE_B=$(maas ${PROFILE} block-devices read ${HOST_ID} | jq '.[] | select(.name=="sdb") | .available_size')
ROOT_PARTITION_B=$(maas ${PROFILE} partitions create ${HOST_ID} ${SDB_ID} size=${MAX_SIZE_B} uuid=$(uuidgen) bootable=no)
ROOT_B_ID=$(echo ${ROOT_PARTITION_B} | jq ' . | .id')
RAID_ROOT=$(maas ${PROFILE} raids create ${HOST_ID} name=md0 level=raid-1 partitions={${ROOT_A_ID},${ROOT_B_ID}})
DEVICE_ID=$(echo ${RAID_ROOT} | jq ' . | .id')
ID=$(echo ${RAID_ROOT} | jq ' . | .virtual_device | .id')

ROOT_PARTITION=$(maas ${PROFILE} block-device format ${HOST_ID} ${ID} fstype=ext4 uuid=$(uuidgen) label="ROOT")
maas ${PROFILE} block-device mount ${HOST_ID} ${ID} mount_point="/"
Download as text