diff --git a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsHelper.py b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsHelper.py index 9095558a55f..835c18950f7 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/cs/CsHelper.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/cs/CsHelper.py @@ -224,4 +224,4 @@ def copy(src, dest): except IOError: logging.Error("Could not copy %s to %s" % (src, dest)) else: - logging.info("Copied %s to %s" % (src, dest)) \ No newline at end of file + logging.info("Copied %s to %s" % (src, dest)) diff --git a/systemvm/patches/debian/config/opt/cloud/bin/merge.py b/systemvm/patches/debian/config/opt/cloud/bin/merge.py index 374cf2ccb4f..aa676827adb 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/merge.py +++ b/systemvm/patches/debian/config/opt/cloud/bin/merge.py @@ -145,10 +145,13 @@ class updateDataBag: dp['gateway'] = d['router_guest_gateway'] dp['nic_dev_id'] = d['device'][3] dp['nw_type'] = 'guest' + dp = PrivateGatewayHack.update_network_type_for_privategateway(dbag, dp) qf = QueueFile() qf.load({'ip_address': [dp], 'type': 'ips'}) if 'domain_name' not in d.keys() or d['domain_name'] == '': d['domain_name'] = "cloudnine.internal" + + d = PrivateGatewayHack.update_network_type_for_privategateway(dbag, d) return cs_guestnetwork.merge(dbag, d) def process_dhcp_entry(self, dbag): @@ -274,3 +277,46 @@ class QueueFile: os.makedirs(path) timestamp = str(int(round(time.time()))) os.rename(origPath, path + "/" + self.fileName + "." + timestamp) + + +class PrivateGatewayHack: + + + @classmethod + def update_network_type_for_privategateway(cls, dbag, data): + ip = data['router_guest_ip'] if 'router_guest_ip' in data.keys() else data['public_ip'] + + initial_data = cls.load_inital_data() + has_private_gw_ip = cls.if_config_has_privategateway(initial_data) + private_gw_matches = 'privategateway' in initial_data['config'] and cls.ip_matches_private_gateway_ip(ip, initial_data['config']['privategateway']) + + if has_private_gw_ip and private_gw_matches: + data['nw_type'] = "public" + logging.debug("Updating nw_type for ip %s" % ip) + else: + logging.debug("Not updating nw_type for ip %s because has_private_gw_ip = %s and private_gw_matches = %s " % (ip, has_private_gw_ip, private_gw_matches)) + return data + + + @classmethod + def if_config_has_privategateway(cls, dbag): + return 'privategateway' in dbag['config'].keys() and dbag['config']['privategateway'] != "None" + + + @classmethod + def ip_matches_private_gateway_ip(cls, ip, private_gateway_ip): + new_ip_matches_private_gateway_ip = False + if ip == private_gateway_ip: + new_ip_matches_private_gateway_ip = True + return new_ip_matches_private_gateway_ip + + + @classmethod + def load_inital_data(cls): + initial_data_bag = DataBag() + initial_data_bag.setKey('cmdline') + initial_data_bag.load() + initial_data = initial_data_bag.getDataBag() + logging.debug("Initial data = %s" % initial_data) + + return initial_data