From a5424b703b2c8c3d5ecf686b1eb367aa57bf1604 Mon Sep 17 00:00:00 2001 From: jjhua Date: Fri, 25 Oct 2013 14:33:18 -0400 Subject: [PATCH] add a new script configbr-ex to configure the IP of the external bridge for network node --- xCAT-OpenStack/lib/perl/xCAT/Cloud.pm | 13 ++++++-- xCAT-OpenStack/postscripts/configbr-ex | 41 ++++++++++++++++++++++++++ xCAT-server/lib/perl/xCAT/Postage.pm | 5 ++-- 3 files changed, 55 insertions(+), 4 deletions(-) create mode 100755 xCAT-OpenStack/postscripts/configbr-ex diff --git a/xCAT-OpenStack/lib/perl/xCAT/Cloud.pm b/xCAT-OpenStack/lib/perl/xCAT/Cloud.pm index 171b7ad4b..72b71d844 100644 --- a/xCAT-OpenStack/lib/perl/xCAT/Cloud.pm +++ b/xCAT-OpenStack/lib/perl/xCAT/Cloud.pm @@ -58,12 +58,14 @@ sub getcloudinfo xCAT::MsgUtils->message("E", "Unable to open $tab table"); return undef; } - my @rs = $ptab->getAllAttribs('name','repository'); + my @rs = $ptab->getAllAttribs('name','repository', 'pubinterface'); foreach my $r ( @rs ) { my $cloud = $r->{'name'}; my $repos = $r->{'repository'}; + my $pubinterface = $r->{'pubinterface'}; $info{ $cloud }{repository} = $repos; + $info{ $cloud }{pubinterface} = $pubinterface; } $tab = "cloud"; @@ -122,11 +124,18 @@ sub getcloudinfo sub getcloudres { my $cloudinfo_hash = shift; + my $node = shift; my $clients = shift; my $cloudres; my $cloudlist; - my $repos; + my $repos;use Data::Dumper; print Dumper($cloudinfo_hash); if( @$clients == 0 ) { + #This should not be a chef-server, and it's a chef-client + if( defined($cloudinfo_hash) && defined($cloudinfo_hash->{$node}) ) { + my $cloud=$cloudinfo_hash->{$node}->{cloud}; + my $pubinterface=$cloudinfo_hash->{$cloud}->{pubinterface}; + $cloudres="PUBINTERFACE='$pubinterface'\nexport PUBINTERFACE\n"; + } return $cloudres; } foreach my $client (@$clients) { diff --git a/xCAT-OpenStack/postscripts/configbr-ex b/xCAT-OpenStack/postscripts/configbr-ex new file mode 100755 index 000000000..2ea97dce6 --- /dev/null +++ b/xCAT-OpenStack/postscripts/configbr-ex @@ -0,0 +1,41 @@ +#!/bin/sh -vx + + +bridge_name="br-ex" + +pubinterface=$PUBINTERFACE +#pubinterface="eth0" +if [ -z "pubinterface" ] +then + errmsg="no pubinterface setting for the $NODE's cloudname in clouds table" + logger -t xcat -p local4.err $errmsg + echo $errmsg + exit -1 +fi +ifconfig $pubinterface 0 + +pubinterface=`echo $pubinterface | sed 's/^ \+//' | sed 's/ \+$//'` +str_value=$(hashget hash_defined_nics $pubinterface) +old_ifs=$IFS +IFS=$',' +array_temp=($str_value) +FS=$old_ifs + +if [ -n "${array_temp[1]}" ];then + str_nic_type=`echo ${array_temp[1]} | tr "[A-Z]" "[a-z]"` +else + if [ `echo $pubinterface | grep -E '(eth|en)[0-9]+'` ];then + str_nic_type="ethernet" + else + errmsg="currently, it only supports eth|en, instead of $pubinterface." + logger -t xcat -p local4.err $errmsg + echo $errmsg + exit -1; + fi +fi + + +configeth $bridge_name ${array_temp[0]} ${array_temp[2]} + + + diff --git a/xCAT-server/lib/perl/xCAT/Postage.pm b/xCAT-server/lib/perl/xCAT/Postage.pm index 250c28eb8..7cd83050e 100644 --- a/xCAT-server/lib/perl/xCAT/Postage.pm +++ b/xCAT-server/lib/perl/xCAT/Postage.pm @@ -485,7 +485,7 @@ sub makescript { my $cloudres; $cfgres = getcfgres($cfginfo_hash, $node, \@clients); if ( $cloud_exists == 1 ) { - $cloudres = getcloudres($cloud_module_name, $cloud_exists, $cloudinfo_hash, \@clients); + $cloudres = getcloudres($cloud_module_name, $cloud_exists, $cloudinfo_hash, $node, \@clients); } #ok, now do everything else.. @@ -1815,6 +1815,7 @@ sub getcloudres my $module_name = shift; my $cloud_exists = shift; my $cloudinfo_hash = shift; + my $node = shift; my $clients = shift; my $result; @@ -1822,7 +1823,7 @@ sub getcloudres if ( $cloud_exists ) { no strict "refs"; if (defined(${$module_name."::"}{getcloudres})) { - $result=${$module_name."::"}{getcloudres}($cloudinfo_hash, $clients); + $result=${$module_name."::"}{getcloudres}($cloudinfo_hash, $node, $clients); } } return $result;