You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by om...@apache.org on 2020/01/30 13:21:38 UTC
[incubator-dlab] 01/01: [DLAB-1493]: Added users_subnet_range
functionality to GCP
This is an automated email from the ASF dual-hosted git repository.
omartushevskyi pushed a commit to branch DLAB-1493
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit 75d55aad46cccf109edd9a73f160aa1cab59a689
Author: Oleh Martushevskyi <Ol...@epam.com>
AuthorDate: Thu Jan 30 15:21:27 2020 +0200
[DLAB-1493]: Added users_subnet_range functionality to GCP
---
.../general/scripts/gcp/common_create_subnet.py | 108 +++++++++++++--------
.../src/general/scripts/gcp/project_prepare.py | 9 +-
2 files changed, 73 insertions(+), 44 deletions(-)
diff --git a/infrastructure-provisioning/src/general/scripts/gcp/common_create_subnet.py b/infrastructure-provisioning/src/general/scripts/gcp/common_create_subnet.py
index 7131764..d547458 100644
--- a/infrastructure-provisioning/src/general/scripts/gcp/common_create_subnet.py
+++ b/infrastructure-provisioning/src/general/scripts/gcp/common_create_subnet.py
@@ -36,57 +36,81 @@ parser.add_argument('--region', type=str, default='')
parser.add_argument('--vpc_selflink', type=str, default='')
parser.add_argument('--prefix', type=str, default='')
parser.add_argument('--vpc_cidr', type=str, default='')
+parser.add_argument('--user_subnets_range', type=str, default='')
args = parser.parse_args()
if __name__ == "__main__":
- empty_vpc = False
- private_subnet_size = ipaddress.ip_network(u'0.0.0.0/{}'.format(args.prefix)).num_addresses
- subnets_cidr = []
- try:
- subnets = GCPMeta().get_vpc(args.vpc_selflink.split('/')[-1])['subnetworks']
- except KeyError:
- empty_vpc = True
- subnets = []
- for subnet in subnets:
- subnets_cidr.append(GCPMeta().get_subnet(subnet.split('/')[-1], args.region)['ipCidrRange'])
- sortkey = lambda addr: \
- (int(addr.split("/")[0].split(".")[0]),
- int(addr.split("/")[0].split(".")[1]),
- int(addr.split("/")[0].split(".")[2]),
- int(addr.split("/")[0].split(".")[3]),
- int(addr.split("/")[1]))
- sorted_subnets_cidr = sorted(subnets_cidr, key=sortkey)
+ if args.user_subnets_range == '' or args.ssn:
+ empty_vpc = False
+ private_subnet_size = ipaddress.ip_network(u'0.0.0.0/{}'.format(args.prefix)).num_addresses
+ subnets_cidr = []
+ try:
+ subnets = GCPMeta().get_vpc(args.vpc_selflink.split('/')[-1])['subnetworks']
+ except KeyError:
+ empty_vpc = True
+ subnets = []
+ for subnet in subnets:
+ subnets_cidr.append(GCPMeta().get_subnet(subnet.split('/')[-1], args.region)['ipCidrRange'])
+ sortkey = lambda addr: \
+ (int(addr.split("/")[0].split(".")[0]),
+ int(addr.split("/")[0].split(".")[1]),
+ int(addr.split("/")[0].split(".")[2]),
+ int(addr.split("/")[0].split(".")[3]),
+ int(addr.split("/")[1]))
+ sorted_subnets_cidr = sorted(subnets_cidr, key=sortkey)
- if not empty_vpc:
- last_ip = int(ipaddress.IPv4Address(sorted_subnets_cidr[0].split('/')[0].decode("utf-8")))
- else:
- last_ip = int(ipaddress.IPv4Address(args.vpc_cidr.split('/')[0].decode("utf-8")))
- previous_subnet_size = private_subnet_size
- for cidr in sorted_subnets_cidr:
- first_ip = int(ipaddress.IPv4Address(cidr.split('/')[0].decode("utf-8")))
- if first_ip - last_ip < private_subnet_size or previous_subnet_size < private_subnet_size:
- subnet_size = ipaddress.ip_network(u'{}'.format(cidr)).num_addresses
- last_ip = first_ip + subnet_size - 1
- previous_subnet_size = subnet_size
+ if not empty_vpc:
+ last_ip = int(ipaddress.IPv4Address(sorted_subnets_cidr[0].split('/')[0].decode("utf-8")))
else:
- break
+ last_ip = int(ipaddress.IPv4Address(args.vpc_cidr.split('/')[0].decode("utf-8")))
+ previous_subnet_size = private_subnet_size
+ for cidr in sorted_subnets_cidr:
+ first_ip = int(ipaddress.IPv4Address(cidr.split('/')[0].decode("utf-8")))
+ if first_ip - last_ip < private_subnet_size or previous_subnet_size < private_subnet_size:
+ subnet_size = ipaddress.ip_network(u'{}'.format(cidr)).num_addresses
+ last_ip = first_ip + subnet_size - 1
+ previous_subnet_size = subnet_size
+ else:
+ break
- dlab_subnet_cidr = ''
- if empty_vpc:
- dlab_subnet_cidr = '{0}/{1}'.format(ipaddress.ip_address(last_ip), args.prefix)
+ dlab_subnet_cidr = ''
+ if empty_vpc:
+ dlab_subnet_cidr = '{0}/{1}'.format(ipaddress.ip_address(last_ip), args.prefix)
+ else:
+ if previous_subnet_size < private_subnet_size:
+ while True:
+ try:
+ dlab_subnet_cidr = '{0}/{1}'.format(ipaddress.ip_address(last_ip + 1), args.prefix)
+ ipaddress.ip_network(dlab_subnet_cidr.decode('utf-8'))
+ break
+ except ValueError:
+ last_ip = last_ip + 2
+ continue
+ else:
+ dlab_subnet_cidr = '{0}/{1}'.format(ipaddress.ip_address(last_ip + 1), args.prefix)
else:
- if previous_subnet_size < private_subnet_size:
- while True:
- try:
- dlab_subnet_cidr = '{0}/{1}'.format(ipaddress.ip_address(last_ip + 1), args.prefix)
- ipaddress.ip_network(dlab_subnet_cidr.decode('utf-8'))
- break
- except ValueError:
- last_ip = last_ip + 2
- continue
+ pre_defined_subnet_list = []
+ subnet_cidr = args.user_subnets_range.split('-')[0].replace(' ', '')
+ pre_defined_subnet_list.append(subnet_cidr)
+ while str(subnet_cidr) != args.user_subnets_range.split('-')[1].replace(' ', ''):
+ subnet = ipaddress.ip_network(u'{}'.format(subnet_cidr))
+ num_addr = subnet.num_addresses
+ first_ip = int(ipaddress.IPv4Address(u'{}'.format(subnet.network_address)))
+ next_subnet = ipaddress.ip_network(u'{}/{}'.format(ipaddress.ip_address(first_ip + num_addr),
+ args.prefix))
+ pre_defined_subnet_list.append(next_subnet.compressed)
+ subnet_cidr = next_subnet
+ existed_subnet_list = []
+ response = GCPMeta().get_vpc(args.vpc_selflink.split('/')[-1])['subnetworks']
+ for subnet in response:
+ existed_subnet_list.append(GCPMeta().get_subnet(subnet.split('/')[-1], args.region)['ipCidrRange'])
+ available_subnets = list(set(pre_defined_subnet_list) - set(existed_subnet_list))
+ if not available_subnets:
+ print("There is no available subnet to create. Aborting...")
+ sys.exit(1)
else:
- dlab_subnet_cidr = '{0}/{1}'.format(ipaddress.ip_address(last_ip + 1), args.prefix)
+ dlab_subnet_cidr = available_subnets[0]
if args.subnet_name != '':
if GCPMeta().get_subnet(args.subnet_name, args.region):
diff --git a/infrastructure-provisioning/src/general/scripts/gcp/project_prepare.py b/infrastructure-provisioning/src/general/scripts/gcp/project_prepare.py
index 02b5561..b7f7833 100644
--- a/infrastructure-provisioning/src/general/scripts/gcp/project_prepare.py
+++ b/infrastructure-provisioning/src/general/scripts/gcp/project_prepare.py
@@ -100,6 +100,10 @@ if __name__ == "__main__":
"endpoint_tag": project_conf['endpoint_tag'],
"product": "dlab"}
project_conf['allowed_ip_cidr'] = os.environ['conf_allowed_ip_cidr']
+ if 'conf_user_subnets_range' in os.environ:
+ project_conf['user_subnets_range'] = os.environ['conf_user_subnets_range']
+ else:
+ project_conf['user_subnets_range'] = ''
# FUSE in case of absence of user's key
try:
@@ -119,9 +123,10 @@ if __name__ == "__main__":
try:
logging.info('[CREATE SUBNET]')
print('[CREATE SUBNET]')
- params = "--subnet_name {} --region {} --vpc_selflink {} --prefix {} --vpc_cidr {}" \
+ params = "--subnet_name {} --region {} --vpc_selflink {} --prefix {} --vpc_cidr {} --user_subnets_range '{}'" \
.format(project_conf['private_subnet_name'], project_conf['region'], project_conf['vpc_selflink'],
- project_conf['private_subnet_prefix'], project_conf['vpc_cidr'])
+ project_conf['private_subnet_prefix'], project_conf['vpc_cidr'],
+ project_conf['user_subnets_range'])
try:
local("~/scripts/{}.py {}".format('common_create_subnet', params))
project_conf['private_subnet_cidr'] = GCPMeta().get_subnet(project_conf['private_subnet_name'],
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org