From 950008048849526cd0e392e7b45fb4fb0f6e5cdb Mon Sep 17 00:00:00 2001 From: anthony Date: Mon, 30 Jul 2012 12:06:19 -0700 Subject: [PATCH 01/11] CS-15708 : fix network cleanup --- patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh | 2 +- patches/systemvm/debian/config/opt/cloud/bin/vpc_snat.sh | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh index 35394646854..c624c41e9f3 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh @@ -143,7 +143,7 @@ destroy_guest_network() { sudo iptables -D INPUT -i $dev -p udp -m udp --dport 53 -j ACCEPT sudo iptables -t mangle -D PREROUTING -i $dev -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark sudo iptables -t nat -A POSTROUTING -s $subnet/$mask -o $dev -j SNAT --to-source $ip - destroy_acl_outbound_chain + destroy_acl_chain desetup_usage desetup_dnsmasq desetup_apache2 diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_snat.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_snat.sh index ff88354dc49..3db9a2d1713 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_snat.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_snat.sh @@ -33,8 +33,6 @@ usage() { add_snat() { logger -t cloud "$(basename $0):Added SourceNAT $pubIp on interface $ethDev" vpccidr=$(getVPCcidr) - sudo iptables -D FORWARD -s $vpccidr ! -d $vpccidr -j ACCEPT - sudo iptables -A FORWARD -s $vpccidr ! -d $vpccidr -j ACCEPT sudo iptables -t nat -D POSTROUTING -j SNAT -o $ethDev --to-source $pubIp sudo iptables -t nat -A POSTROUTING -j SNAT -o $ethDev --to-source $pubIp return $? From a17c542fd688356c6cf0c2f8c91a29d3e413e272 Mon Sep 17 00:00:00 2001 From: anthony Date: Mon, 30 Jul 2012 12:24:07 -0700 Subject: [PATCH 02/11] CS-15680 : set broadcast IP --- .../debian/config/opt/cloud/bin/vpc_guestnw.sh | 2 +- .../debian/config/opt/cloud/bin/vpc_ipassoc.sh | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh index c624c41e9f3..61c5a7ecb02 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh @@ -115,7 +115,7 @@ desetup_usage() { create_guest_network() { logger -t cloud " $(basename $0): Create network on interface $dev, gateway $gw, network $ip/$mask " # setup ip configuration - sudo ip addr add dev $dev $ip/$mask + sudo ip addr add dev $dev $ip/$mask brd + sudo ip link set $dev up sudo arping -c 3 -I $dev -A -U -s $ip $ip # setup rules to allow dhcp/dns request diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh index 40c1e4d996a..8ef19e41f45 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_ipassoc.sh @@ -58,7 +58,7 @@ add_an_ip () { sudo ip link show $ethDev | grep "state DOWN" > /dev/null local old_state=$? - sudo ip addr add dev $ethDev $pubIp/$mask + sudo ip addr add dev $ethDev $pubIp/$mask brd + if [ $old_state -eq 0 ] then sudo ip link set $ethDev up @@ -76,7 +76,7 @@ add_an_ip () { remove_an_ip () { logger -t cloud "$(basename $0):Removing ip $pubIp on interface $ethDev" - local existingIpMask=$(sudo ip addr show dev $ethDev | grep "inet " | awk '{print $2}') + local existingIpMask=$(sudo ip addr show dev $ethDev | grep -v "inet6" | grep "inet " | awk '{print $2}') sudo ip addr del dev $ethDev $pubIp/$mask # reapply IPs in this interface @@ -86,7 +86,7 @@ remove_an_ip () { then continue fi - sudo ip addr add dev $ethDev $ipMask + sudo ip addr add dev $ethDev $ipMask brd + done remove_routing @@ -148,14 +148,14 @@ fi if [ "$Aflag" == "1" ] then - add_an_ip $publicIp && + add_an_ip unlock_exit $? $lock $locked fi if [ "$Dflag" == "1" ] then - remove_an_ip $publicIp && + remove_an_ip unlock_exit $? $lock $locked fi From 2388bd8f82d4f6e598730a27ab13616ba26189eb Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Tue, 31 Jul 2012 02:02:17 +0530 Subject: [PATCH 03/11] CS-15044:API changes to provide UI option to view the list of instances which are part of the guestnetwork is not availble --- .../com/cloud/api/response/NicResponse.java | 7 ++++ .../src/com/cloud/api/ApiResponseHelper.java | 1 + ui/scripts/instances.js | 33 ++++++++++++++----- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/api/src/com/cloud/api/response/NicResponse.java b/api/src/com/cloud/api/response/NicResponse.java index 53793f16c31..01d6d3b3740 100755 --- a/api/src/com/cloud/api/response/NicResponse.java +++ b/api/src/com/cloud/api/response/NicResponse.java @@ -26,6 +26,9 @@ public class NicResponse extends BaseResponse { @SerializedName("networkid") @Param(description="the ID of the corresponding network") private final IdentityProxy networkId = new IdentityProxy("networks"); + @SerializedName("networkname") @Param(description="the name of the corresponding network") + private String networkName ; + @SerializedName(ApiConstants.NETMASK) @Param(description="the netmask of the nic") private String netmask; @@ -65,6 +68,10 @@ public class NicResponse extends BaseResponse { this.networkId.setValue(networkid); } + public void setNetworkName(String networkname) { + this.networkName = networkname; + } + public void setNetmask(String netmask) { this.netmask = netmask; } diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 175baa6dfeb..1e4f82626fd 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -1588,6 +1588,7 @@ public class ApiResponseHelper implements ResponseGenerator { nicResponse.setGateway(singleNicProfile.getGateway()); nicResponse.setNetmask(singleNicProfile.getNetmask()); nicResponse.setNetworkid(singleNicProfile.getNetworkId()); + nicResponse.setNetworkName(ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId()).getName() ); if (acct.getType() == Account.ACCOUNT_TYPE_ADMIN) { if (singleNicProfile.getBroadCastUri() != null) { nicResponse.setBroadcastUri(singleNicProfile.getBroadCastUri().toString()); diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js index 04b83398ec4..e6bcbf7dbdd 100644 --- a/ui/scripts/instances.js +++ b/ui/scripts/instances.js @@ -1179,9 +1179,11 @@ nics: { title: 'label.nics', multiple: true, + cache:false, fields: [ { name: { label: 'label.name', header: true }, + networkname: {label: 'Network Name' }, ipaddress: { label: 'label.ip.address' }, type: { label: 'label.type' }, gateway: { label: 'label.gateway' }, @@ -1195,17 +1197,32 @@ } ], dataProvider: function(args) { - args.response.success({data: $.map(args.context.instances[0].nic, function(nic, index) { - var name = 'NIC ' + (index + 1); + + $.ajax({ + url:createURL("listVirtualMachines&details=nics&id=" + args.context.instances[0].id), + dataType: "json", + async:true, + success:function(json) { + + args.response.success({ + data: $.map(args.context.instances[0].nic, function(nic, index) { + var name = 'NIC ' + (index + 1); + var networkname = json.listvirtualmachinesresponse.virtualmachine[0].nic[index].networkname; + if (nic.isdefault) { + name += ' (' + _l('label.default') + ')'; + } + return $.extend(nic, { + name: name, + networkname: networkname + }); + }) + }); - if (nic.isdefault) { - name += ' (' + _l('label.default') + ')'; - } - return $.extend(nic, { - name: name + } }); - })}); + } + }, /** From ba2c05cc552167b8a4d1e2e71e8b6dc6fc71adc5 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 30 Jul 2012 13:33:17 -0700 Subject: [PATCH 04/11] Allow EIP/ELB network creation only in Basic zone --- server/src/com/cloud/network/NetworkManagerImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 8c855af2ff2..d4fd891edd7 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2935,6 +2935,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag "service disabled are allowed in security group enabled zone", null); } } + + //don't allow eip/elb networks in Advance zone + if (ntwkOff.getElasticIp() || ntwkOff.getElasticLb()) { + throw new InvalidParameterValueException("Elastic IP and Elastic LB services are supported in zone of type " + NetworkType.Basic, null); + } } // VlanId can be specified only when network offering supports it From 587189e3025a8d6cfeb0a701b9eb1d3300241a52 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Mon, 30 Jul 2012 14:29:47 -0700 Subject: [PATCH 05/11] CS-15726: Use custom validation for tagger widget Show a generic dialog box for tagger validation, instead of using jQuery validate --it conflicted with the detail view's edit fields and prevented submission unless the key and value fields were filled out. --- ui/scripts/ui/widgets/tagger.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/ui/scripts/ui/widgets/tagger.js b/ui/scripts/ui/widgets/tagger.js index f671342c99c..c6169454cb2 100644 --- a/ui/scripts/ui/widgets/tagger.js +++ b/ui/scripts/ui/widgets/tagger.js @@ -1,13 +1,26 @@ (function($, cloudStack) { + var isFormValid = function($form) { + var key = $form.find('input[name=key]').val(); + var value = $form.find('input[name=value]').val(); + + if (!key || !value) { + cloudStack.dialog.notice({ message: 'Please specify a tag key and value' }); + + return false; + } + + return true; + }; + var elems = { inputArea: function(args) { var $form = $('
').addClass('tag-input'); var $keyField = $('
').addClass('field key'); var $keyLabel = $('