From b0a8c3244e267eeed680a8d97ddb6176671dc030 Mon Sep 17 00:00:00 2001 From: liyuenan Date: Tue, 14 Mar 2017 15:55:08 +0800 Subject: Support bond created JIRA: - You can add bond according to deploy/conf/network_cfg.yaml. Change-Id: I70f2f03581cf763dbaf7a8a47bdbd46b66620fcb Signed-off-by: liyuenan (cherry picked from commit 2932812260b57e7f67cef655ee2e043bf66b4887) --- .../snippets/kickstart_post_install_network_config | 7 ++-- .../snippets/preseed_post_install_network_config | 7 ++-- .../cobbler/snippets/preseed_software_ansible | 2 +- deploy/bonding.py | 41 ++++++++++++++++++++++ deploy/conf/network_cfg.yaml | 18 +++++++++- deploy/deploy_host.sh | 6 +++- 6 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 deploy/bonding.py diff --git a/deploy/adapters/cobbler/snippets/kickstart_post_install_network_config b/deploy/adapters/cobbler/snippets/kickstart_post_install_network_config index 2c089f92..1a5a7f66 100644 --- a/deploy/adapters/cobbler/snippets/kickstart_post_install_network_config +++ b/deploy/adapters/cobbler/snippets/kickstart_post_install_network_config @@ -426,9 +426,12 @@ declare -A used_logical_interfaces used_logical_interfaces[$iname]=$iname - #if $iface_type in ("slave","bond_slave","bridge_slave","bonded_bridge_slave") + #if $iface_type in ("slave","bridge_slave","bonded_bridge_slave") #set $static = 1 #end if + #if $ip == "" + #set $static = "" + #end if echo "DEVICE=$iname" > $devfile echo "ONBOOT=yes" >> $devfile @@ -514,7 +517,7 @@ echo "GATEWAY=$if_gateway" >> $devfile echo "NETMASK=$netmask" >> $devfile #end if #else -echo "BOOTPROTO=dhcp" >> $devfile +echo "BOOTPROTO=manual" >> $devfile #if $len($name_servers) > 0 echo "PEERDNS=no" >> $devfile #end if diff --git a/deploy/adapters/cobbler/snippets/preseed_post_install_network_config b/deploy/adapters/cobbler/snippets/preseed_post_install_network_config index cb79c556..7d4dcb9d 100644 --- a/deploy/adapters/cobbler/snippets/preseed_post_install_network_config +++ b/deploy/adapters/cobbler/snippets/preseed_post_install_network_config @@ -441,15 +441,18 @@ echo "" >> /etc/network/interfaces used_logical_interface_$iname=$iname - #if $iface_type in ("slave","bond_slave","bridge_slave","bonded_bridge_slave") + #if $iface_type in ("slave","bridge_slave","bonded_bridge_slave") #set $static = 1 #end if + #if $ip == "" + #set $static = "" + #end if echo "auto $iname" >> /etc/network/interfaces #if $static echo "iface $iname inet static" >> /etc/network/interfaces #else -echo "iface $iname inet dhcp" >> /etc/network/interfaces +echo "iface $iname inet manual" >> /etc/network/interfaces #end if #if $iface_type not in ("master","bond","bridge","bonded_bridge_slave") diff --git a/deploy/adapters/cobbler/snippets/preseed_software_ansible b/deploy/adapters/cobbler/snippets/preseed_software_ansible index cde79356..5516c893 100644 --- a/deploy/adapters/cobbler/snippets/preseed_software_ansible +++ b/deploy/adapters/cobbler/snippets/preseed_software_ansible @@ -1 +1 @@ -d-i pkgsel/include string ntp ssh openssh-server wget vim +d-i pkgsel/include string ntp ssh openssh-server wget vim ifenslave diff --git a/deploy/bonding.py b/deploy/bonding.py new file mode 100644 index 00000000..27e76daa --- /dev/null +++ b/deploy/bonding.py @@ -0,0 +1,41 @@ +import os +import sys +import yaml + + +def exec_cmd(cmd): + print cmd + os.system(cmd) + + +def create_bonding(network_info, rsa_file, compass_ip): + for bond in network_info['bond_mappings']: + bond_name = bond['name'] + host_name = bond.get('host') + interfaces = bond.get('bond-slaves') + bond_mode = bond['bond-mode'] + bond_miimon = bond['bond-miimon'] + lacp_rate = bond['bond-lacp_rate'] + xmit_hash_policy = bond['bond-xmit_hash_policy'] + bond_mtu = bond['mtu'] + if interfaces: + for host in host_name: + for interface in interfaces: + exec_cmd("ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -i %s root@%s \ + 'cobbler system edit --name=%s --interface=%s --interface-type=bond_slave --interface-master=%s'" # noqa + % (rsa_file, compass_ip, host, interface, bond_name)) # noqa + + exec_cmd("ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + -i %s root@%s \ + 'cobbler system edit --name=%s --interface=%s --interface-type=bond --bonding-opts=\"miimon=%s mode=%s lacp_rate=%s xmit_hash_policy=%s mtu=%s\"'" # noqa + % (rsa_file, compass_ip, host, bond_name, bond_miimon, bond_mode, lacp_rate, xmit_hash_policy, bond_mtu)) # noqa + +if __name__ == "__main__": + assert(len(sys.argv) == 4) + create_bonding( + yaml.load( + open( + sys.argv[1])), + sys.argv[2], + sys.argv[3]) diff --git a/deploy/conf/network_cfg.yaml b/deploy/conf/network_cfg.yaml index 28224b66..5e704e80 100644 --- a/deploy/conf/network_cfg.yaml +++ b/deploy/conf/network_cfg.yaml @@ -9,7 +9,23 @@ --- nic_mappings: [] -bond_mappings: [] + +bond_mappings: + - name: bond1 + host: + - host1 + - host2 + - host3 + - host4 + - host5 + bond-slaves: + - eth1 + - eth2 + bond-mode: 802.3ad + bond-miimon: 100 + bond-lacp_rate: fast + bond-xmit_hash_policy: layer2 + mtu: 9000 provider_net_mappings: - name: br-prv diff --git a/deploy/deploy_host.sh b/deploy/deploy_host.sh index 6454a4b9..4f756411 100755 --- a/deploy/deploy_host.sh +++ b/deploy/deploy_host.sh @@ -13,6 +13,10 @@ function rename_nics(){ python $COMPASS_DIR/deploy/rename_nics.py $DHA $rsa_file $MGMT_IP $OS_VERSION } +function add_bonding(){ + python $COMPASS_DIR/deploy/bonding.py $NETWORK $rsa_file $MGMT_IP +} + function deploy_host(){ export AYNC_TIMEOUT=20 ssh $ssh_args root@${MGMT_IP} mkdir -p /opt/compass/bin/ansible_callbacks @@ -22,7 +26,7 @@ function deploy_host(){ scp $ssh_args -r ${COMPASS_DIR}/deploy/adapters/ansible/ansible_modules/* root@${MGMT_IP}:/opt/ansible-modules # avoid nodes reboot to fast, cobbler can not give response - (sleep $AYNC_TIMEOUT; rename_nics; reboot_hosts) & + (sleep $AYNC_TIMEOUT; add_bonding; rename_nics; reboot_hosts) & if [[ "$REDEPLOY_HOST" == true ]]; then deploy_flag="redeploy" else -- cgit 1.2.3-korg