Skip to content
Snippets Groups Projects
Verified Commit 4c346d4f authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

reformat some files, make tox pass

parent 99ed5627
No related branches found
No related tags found
1 merge request!16Feature/ipam integration
...@@ -12,18 +12,18 @@ ...@@ -12,18 +12,18 @@
"password": "robot-user-password" "password": "robot-user-password"
}, },
"LO": { "LO": {
"V4": {"containers": ["1.1.0.0/24"], "mask": 32}, "V4": {"containers": ["1.1.0.0/24"], "networks": [], "mask": 32},
"V6": {"containers": ["dead:beef::/64"], "mask": 128}, "V6": {"containers": ["dead:beef::/64"], "networks": [], "mask": 128},
"domain_name": ".lo" "domain_name": ".lo"
}, },
"TRUNK": { "TRUNK": {
"V4": {"containers": ["1.1.1.0/24"], "mask": 31}, "V4": {"containers": ["1.1.1.0/24"], "networks": [], "mask": 31},
"V6": {"containers": ["dead:beef::/64"], "mask": 126}, "V6": {"containers": ["dead:beef::/64"], "networks": [], "mask": 126},
"domain_name": ".trunk" "domain_name": ".trunk"
}, },
"GEANT_IP": { "GEANT_IP": {
"V4": {"containers": ["1.1.2.0/24"], "mask": 31}, "V4": {"containers": ["1.1.2.0/24"], "networks": [], "mask": 31},
"V6": {"containers": ["dead:beef::/64"], "mask": 126}, "V6": {"containers": ["dead:beef::/64"], "networks": [], "mask": 126},
"domain_name": ".geantip" "domain_name": ".geantip"
} }
}, },
......
...@@ -19,10 +19,11 @@ from gso.products.product_types import device ...@@ -19,10 +19,11 @@ from gso.products.product_types import device
from gso.products.product_types.device import DeviceInactive, \ from gso.products.product_types.device import DeviceInactive, \
DeviceProvisioning DeviceProvisioning
from gso.products.product_types.site import Site from gso.products.product_types.site import Site
from gso.services import _ipam
from gso.services import provisioning_proxy from gso.services import provisioning_proxy
from gso.services.provisioning_proxy import await_pp_results, \ from gso.services.provisioning_proxy import await_pp_results, \
confirm_pp_results confirm_pp_results
from gso.services import ipam, _ipam
def site_selector() -> list: def site_selector() -> list:
site_subscriptions = {} site_subscriptions = {}
...@@ -85,21 +86,13 @@ def iso_from_ipv4(ipv4_address): ...@@ -85,21 +86,13 @@ def iso_from_ipv4(ipv4_address):
@step('Get information from IPAM') @step('Get information from IPAM')
def get_info_from_ipam(subscription: DeviceProvisioning) -> State: def get_info_from_ipam(subscription: DeviceProvisioning) -> State:
# lo = ipam.new_device_lo_address() lo0_alias = re.sub('.geant.net', '', subscription.device.device_fqdn)
# subscription.device.lo_ipv4_address = lo.v4 lo0_name = f'lo0.{lo0_alias}'
# subscription.device.lo_ipv6_address = lo.v6 lo0_addr = _ipam.allocate_service_host(hostname=lo0_name,
# TODO: get info about how these should be generated service_type='LO',
lo0_alias = re.sub(".geant.net", "", subscription.device.device_fqdn) cname_aliases=[lo0_alias])
lo0_name = f"lo0.{lo0_alias}"
#print(lo0_alias)
lo0_addr = _ipam.allocate_service_host(hostname=lo0_name, service_type='LO', cname_aliases=[lo0_alias])
subscription.device.device_lo_ipv4_address = lo0_addr.v4 subscription.device.device_lo_ipv4_address = lo0_addr.v4
subscription.device.device_lo_ipv6_address = lo0_addr.v6 subscription.device.device_lo_ipv6_address = lo0_addr.v6
# subscription.device.device_lo_ipv4_address = \
# ipam.new_service_host()
# ipaddress.ip_address('10.10.10.20')
# subscription.device.device_lo_ipv6_address = \
# ipaddress.ip_address('fc00:798:10::20')
subscription.device.device_lo_iso_address \ subscription.device.device_lo_iso_address \
= iso_from_ipv4(str(subscription.device.device_lo_ipv4_address)) = iso_from_ipv4(str(subscription.device.device_lo_ipv4_address))
subscription.device.device_si_ipv4_network = '192.168.0.0/31' subscription.device.device_si_ipv4_network = '192.168.0.0/31'
...@@ -123,20 +116,19 @@ def initialize_subscription( ...@@ -123,20 +116,19 @@ def initialize_subscription(
subscription.device.device_vendor = device_vendor subscription.device.device_vendor = device_vendor
subscription.device.device_site \ subscription.device.device_site \
= Site.from_subscription(device_site[0]).site = Site.from_subscription(device_site[0]).site
fqdn = f"{hostname}.{subscription.device.device_site.site_name.lower()}.{subscription.device.device_site.site_country_code.lower()}.geant.net" fqdn = f'{hostname}.{subscription.device.device_site.site_name.lower()}.' \
#fqdn = str(hostname + '.' + f'{subscription.device.device_site.site_country_code.lower()}' \
# subscription.device.device_site.site_name.lower() + '.' + f'.geant.net'
# subscription.device.device_site.site_country_code.lower() +
# '.geant.net')
subscription.device.device_fqdn = fqdn subscription.device.device_fqdn = fqdn
subscription.device.device_role = device_role subscription.device.device_role = device_role
subscription.description = f'Device {fqdn} ' \ subscription.description = f'Device {fqdn} ' \
f'({subscription.device_type})' f'({subscription.device_type})'
subscription = device.DeviceProvisioning.from_other_lifecycle( subscription = device.DeviceProvisioning.from_other_lifecycle(
subscription, SubscriptionLifecycle.PROVISIONING subscription, SubscriptionLifecycle.PROVISIONING
) )
return {'subscription': subscription, 'fqdn': fqdn} return {'subscription': subscription}
@step('Provision device [DRY RUN]') @step('Provision device [DRY RUN]')
......
...@@ -2,9 +2,10 @@ import contextlib ...@@ -2,9 +2,10 @@ import contextlib
import json import json
import os import os
import socket import socket
import pytest
import tempfile import tempfile
import pytest
@pytest.fixture(scope='session') @pytest.fixture(scope='session')
def configuration_data(): def configuration_data():
...@@ -26,17 +27,21 @@ def configuration_data(): ...@@ -26,17 +27,21 @@ def configuration_data():
"password": "robot-user-password" "password": "robot-user-password"
}, },
"LO": { "LO": {
"V4": {"containers": ["10.255.255.0/24"], "mask": 32}, "V4": {"containers": ["10.255.255.0/24"], "networks": [],
"V6": {"containers": ["dead:beef::/64"], "mask": 128}, "mask": 32},
"V6": {"containers": ["dead:beef::/64"], "networks": [],
"mask": 128},
"domain_name": ".lo" "domain_name": ".lo"
}, },
"TRUNK": { "TRUNK": {
"V4": { "V4": {
"containers": ["10.255.255.0/24", "10.255.254.0/24"], "containers": ["10.255.255.0/24", "10.255.254.0/24"],
"networks": [],
"mask": 31 "mask": 31
}, },
"V6": { "V6": {
"containers": ["dead:beef::/64", "dead:beee::/64"], "containers": ["dead:beef::/64", "dead:beee::/64"],
"networks": [],
"mask": 126 "mask": 126
}, },
"domain_name": ".trunk" "domain_name": ".trunk"
...@@ -44,10 +49,12 @@ def configuration_data(): ...@@ -44,10 +49,12 @@ def configuration_data():
"GEANT_IP": { "GEANT_IP": {
"V4": { "V4": {
"containers": ["10.255.255.0/24", "10.255.254.0/24"], "containers": ["10.255.255.0/24", "10.255.254.0/24"],
"networks": [],
"mask": 31 "mask": 31
}, },
"V6": { "V6": {
"containers": ["dead:beef::/64", "dead:beee::/64"], "containers": ["dead:beef::/64", "dead:beee::/64"],
"networks": [],
"mask": 126 "mask": 126
}, },
"domain_name": ".geantip" "domain_name": ".geantip"
......
import ipaddress import ipaddress
import re import re
import responses import responses
from gso.services import ipam from gso.services import ipam
...@@ -7,12 +8,12 @@ from gso.services import ipam ...@@ -7,12 +8,12 @@ from gso.services import ipam
@responses.activate @responses.activate
def test_new_service_networks(data_config_filename): def test_new_service_networks(data_config_filename):
responses.add( responses.add(
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/network.*'), url=re.compile(r'.*/wapi.*/network.*'),
json={ json={
'_ref': 'network/ZG5zLm5ldHdvcmskMTAuMjU1LjI1NS4yMC8zMi8w:10.255.255.20/32/default', # noqa: E501 '_ref': 'network/ZG5zLm5ldHdvcmskMTAuMjU1LjI1NS4yMC8zMi8w:10.255.2'
'55.20/32/default', # noqa: E501
'network': '10.255.255.20/32' 'network': '10.255.255.20/32'
} }
) )
...@@ -21,7 +22,8 @@ def test_new_service_networks(data_config_filename): ...@@ -21,7 +22,8 @@ def test_new_service_networks(data_config_filename):
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/ipv6network.*'), url=re.compile(r'.*/wapi.*/ipv6network.*'),
json={ json={
'_ref': 'ipv6network/ZG5zLm5ldHdvcmskZGVhZDpiZWVmOjoxOC8xMjgvMA:dead%3Abeef%3A%3A18/128/default', # noqa: E501 '_ref': 'ipv6network/ZG5zLm5ldHdvcmskZGVhZDpiZWVmOjoxOC8xMjgvMA:de'
'ad%3Abeef%3A%3A18/128/default', # noqa: E501
'network': 'dead:beef::18/128' 'network': 'dead:beef::18/128'
} }
) )
...@@ -35,23 +37,25 @@ def test_new_service_networks(data_config_filename): ...@@ -35,23 +37,25 @@ def test_new_service_networks(data_config_filename):
@responses.activate @responses.activate
def test_new_service_host(data_config_filename): def test_new_service_host(data_config_filename):
responses.add( responses.add(
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/record:host$'), url=re.compile(r'.*/wapi.*/record:host$'),
json='record:host/ZG5zLmhvc3QkLm5vbl9ETlNfaG9zdF9yb290LjAuMTY4MzcwNTU4MzY3MC5nc28udGVzdA:test.lo/%20' # noqa: E501 json='record:host/ZG5zLmhvc3QkLm5vbl9ETlNfaG9zdF9yb290LjAuMTY4MzcwNTU4'
'MzY3MC5nc28udGVzdA:test.lo/%20' # noqa: E501
) )
responses.add( responses.add(
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/record:a$'), url=re.compile(r'.*/wapi.*/record:a$'),
json='record:a/ZG5zLmJpbmRfYSQuX2RlZmF1bHQuZ3NvLHRlc3QsMTAuMjU1LjI1NS44:test.lo/default' # noqa: E501 json='record:a/ZG5zLmJpbmRfYSQuX2RlZmF1bHQuZ3NvLHRlc3QsMTAuMjU1LjI1NS4'
'4:test.lo/default' # noqa: E501
) )
responses.add( responses.add(
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/record:aaaa$'), url=re.compile(r'.*/wapi.*/record:aaaa$'),
json='record:aaaa/ZG5zLmJpbmRfYSQuX2RlZmF1bHQuZ3NvLHRlc3QsMTAuMjU1LjI1NS44:test.lo/default' # noqa: E501 json='record:aaaa/ZG5zLmJpbmRfYSQuX2RlZmF1bHQuZ3NvLHRlc3QsMTAuMjU1LjI1'
'NS44:test.lo/default' # noqa: E501
) )
responses.add( responses.add(
...@@ -59,7 +63,8 @@ def test_new_service_host(data_config_filename): ...@@ -59,7 +63,8 @@ def test_new_service_host(data_config_filename):
url=re.compile(r'.*/wapi.*/network.*'), url=re.compile(r'.*/wapi.*/network.*'),
json=[ json=[
{ {
"_ref": "network/ZG5zLm5ldHdvcmskMTAuMjU1LjI1NS4yMC8zMi8w:10.255.255.20/32/default", # noqa: E501 "_ref": "network/ZG5zLm5ldHdvcmskMTAuMjU1LjI1NS4yMC8zMi8w:10.2"
"55.255.20/32/default", # noqa: E501
"network": "10.255.255.20/32", "network": "10.255.255.20/32",
"network_view": "default" "network_view": "default"
} }
...@@ -72,7 +77,8 @@ def test_new_service_host(data_config_filename): ...@@ -72,7 +77,8 @@ def test_new_service_host(data_config_filename):
url=re.compile(r'.*/wapi.*/ipv6network.*'), url=re.compile(r'.*/wapi.*/ipv6network.*'),
json=[ json=[
{ {
"_ref": "ipv6network/ZG5zLm5ldHdvcmskZGVhZDpiZWVmOjoxOC8xMjgvMA:dead%3Abeef%3A%3A18/128/default", # noqa: E501 "_ref": "ipv6network/ZG5zLm5ldHdvcmskZGVhZDpiZWVmOjoxOC8xMjgvM"
"A:dead%3Abeef%3A%3A18/128/default", # noqa: E501
"network": "dead:beef::18/128", "network": "dead:beef::18/128",
"network_view": "default" "network_view": "default"
} }
...@@ -81,13 +87,17 @@ def test_new_service_host(data_config_filename): ...@@ -81,13 +87,17 @@ def test_new_service_host(data_config_filename):
responses.add( responses.add(
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/network.*/.*?_function=next_available_ip&num=1.*'), # noqa: E501 url=re.compile(
r'.*/wapi.*/network.*/.*?_function=next_available_ip&num=1.*'),
# noqa: E501
json={'ips': ['10.255.255.20']} json={'ips': ['10.255.255.20']}
) )
responses.add( responses.add(
method=responses.POST, method=responses.POST,
url=re.compile(r'.*/wapi.*/ipv6network.*/.*?_function=next_available_ip&num=1.*'), # noqa: E501 url=re.compile(
r'.*/wapi.*/ipv6network.*/.*?_function=next_available_ip&num=1.*'),
# noqa: E501
json={'ips': ['dead:beef::18']} json={'ips': ['dead:beef::18']}
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment