Skip to content
Snippets Groups Projects
Commit bcefba8d authored by Erik Reid's avatar Erik Reid
Browse files

use ipam service module

parent 80d54639
No related branches found
No related tags found
1 merge request!5Device workflows
This commit is part of merge request !5. Comments created here will be created in the context of that merge request.
...@@ -23,8 +23,8 @@ def new_service_networks( ...@@ -23,8 +23,8 @@ def new_service_networks(
v6=ipaddress.IPv6Network('dead:beef::/120')) v6=ipaddress.IPv6Network('dead:beef::/120'))
def new_host_address(fqdn: str, networks: ServiceNetworks) -> HostAddresses: def new_device_lo_address(fqdn: str, networks: ServiceNetworks) -> HostAddresses:
# TODO: load from ipam # TODO: load from ipam
return HostAddresses( return HostAddresses(
v4=ipaddress.IPv4Address('10.0.0.1'), v4=ipaddress.IPv4Address('10.10.10.10'),
v6=ipaddress.IPv6Address('dead:beef::1')) v6=ipaddress.IPv6Address('fc00:798:aa:1::10'))
# from typing import List, Optional import ipaddress
from uuid import uuid4 from uuid import uuid4
# from orchestrator.db.models import ProductTable, SubscriptionTable
# from orchestrator.forms.validators import Choice, choice_list
from orchestrator.forms import FormPage from orchestrator.forms import FormPage
from orchestrator.targets import Target from orchestrator.targets import Target
from orchestrator.workflow import inputstep from orchestrator.workflow import inputstep
...@@ -13,9 +11,8 @@ from orchestrator.workflow import done, init, step, workflow ...@@ -13,9 +11,8 @@ from orchestrator.workflow import done, init, step, workflow
from orchestrator.workflows.steps import resync, set_status from orchestrator.workflows.steps import resync, set_status
from orchestrator.workflows.steps import store_process_subscription from orchestrator.workflows.steps import store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form from orchestrator.workflows.utils import wrap_create_initial_input_form
from products.product_types.device import DeviceInactive, DeviceProvisioning from geant_service_orchestrator.products.product_types import device
from products.product_types.device import DeviceVendor from geant_service_orchestrator.services import ipam
import ipaddress
def initial_input_form_generator(product_name: str) -> FormGenerator: def initial_input_form_generator(product_name: str) -> FormGenerator:
...@@ -26,7 +23,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -26,7 +23,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
fqdn: str fqdn: str
ts_address: ipaddress.IPv4Address ts_address: ipaddress.IPv4Address
ts_port: int ts_port: int
device_vendor: DeviceVendor device_vendor: device.DeviceVendor
user_input = yield CreateDeviceForm user_input = yield CreateDeviceForm
...@@ -35,7 +32,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -35,7 +32,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
@step("Create subscription") @step("Create subscription")
def create_subscription(product: UUIDstr) -> State: def create_subscription(product: UUIDstr) -> State:
subscription = DeviceInactive.from_product_id(product, uuid4()) subscription = device.DeviceInactive.from_product_id(product, uuid4())
return { return {
"subscription": subscription, "subscription": subscription,
...@@ -44,26 +41,32 @@ def create_subscription(product: UUIDstr) -> State: ...@@ -44,26 +41,32 @@ def create_subscription(product: UUIDstr) -> State:
@step("Get information from IPAM ") @step("Get information from IPAM ")
def get_info_from_ipam(subscription: DeviceInactive) -> State: def get_info_from_ipam(subscription: device.DeviceInactive) -> State:
subscription.device.lo_ipv4_address = "10.10.10.10" lo = ipam.new_device_lo_address()
subscription.device.lo_ipv6_address = "fc00:798:aa:1::10" subscription.device.lo_ipv4_address = lo.v4
subscription.device.lo_ipv6_address = lo.v6
# TODO: get info about how these are to be generated
subscription.device.lo_iso_address = "49.51e5.0001.0620.4009.6047.00" subscription.device.lo_iso_address = "49.51e5.0001.0620.4009.6047.00"
subscription.device.si_ipv4_network = "192.168.0.0/31" subscription.device.si_ipv4_network = "192.168.0.0/31"
subscription.device.ias_lt_ipv4_network = "192.168.1.0/31" subscription.device.ias_lt_ipv4_network = "192.168.1.0/31"
subscription.device.ias_lt_ipv6_network = "fc00:798:1::150/126" subscription.device.ias_lt_ipv6_network = "fc00:798:1::150/126"
return {"subscription": subscription} return {"subscription": subscription}
@step("get information about SNMP") @step("get information about SNMP")
def get_snmp_info(subscription: DeviceInactive) -> State: def get_snmp_info(subscription: device.DeviceInactive) -> State:
subscription.device.site_country = "Spain" country = 'Spain'
subscription.device.site_city = "Barcelona" city = 'Barcelona'
subscription.device.site_country_code = "ES" country_code = 'ES'
subscription.device.site_latitude = "41.3743" latitude = '41.3743'
subscription.device.site_longitude = "2.1328" longitude = '2.1328'
subscription.device.site_country = country
subscription.device.site_city = city
subscription.device.site_country_code = country_code
subscription.device.site_latitude = latitude
subscription.device.site_longitude = longitude
subscription.device.snmp_location = ( subscription.device.snmp_location = (
"BARCELONA,SPAIN,[41.3743,2.1328]" # TODO: Duplicated data? f'{city.upper()},{country.upper()}[{latitude},{longitude}]'
) )
return {"subscription": subscription} return {"subscription": subscription}
...@@ -71,11 +74,11 @@ def get_snmp_info(subscription: DeviceInactive) -> State: ...@@ -71,11 +74,11 @@ def get_snmp_info(subscription: DeviceInactive) -> State:
@step("Initialize subscription") @step("Initialize subscription")
def initialize_subscription( def initialize_subscription(
subscription: DeviceInactive, subscription: device.DeviceInactive,
fqdn: str, fqdn: str,
ts_address: ipaddress.IPv4Address, ts_address: ipaddress.IPv4Address,
ts_port: str, ts_port: str,
device_vendor: DeviceVendor device_vendor: device.DeviceVendor
) -> State: ) -> State:
subscription.device.fqdn = fqdn subscription.device.fqdn = fqdn
subscription.device.ts_address = str(ts_address) subscription.device.ts_address = str(ts_address)
...@@ -83,7 +86,7 @@ def initialize_subscription( ...@@ -83,7 +86,7 @@ def initialize_subscription(
subscription.device_vendor = device_vendor subscription.device_vendor = device_vendor
subscription.description = f"Device {fqdn} type \ subscription.description = f"Device {fqdn} type \
({subscription.device_type})" ({subscription.device_type})"
subscription = DeviceProvisioning.from_other_lifecycle( subscription = device.DeviceProvisioning.from_other_lifecycle(
subscription, SubscriptionLifecycle.PROVISIONING subscription, SubscriptionLifecycle.PROVISIONING
) )
...@@ -92,7 +95,7 @@ def initialize_subscription( ...@@ -92,7 +95,7 @@ def initialize_subscription(
@step("Provision device [DRY RUN]") @step("Provision device [DRY RUN]")
def provision_device_dry( def provision_device_dry(
subscription: DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str subscription: device.DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str
) -> State: ) -> State:
import ansible_runner import ansible_runner
...@@ -131,7 +134,7 @@ def confirm_step() -> FormGenerator: ...@@ -131,7 +134,7 @@ def confirm_step() -> FormGenerator:
@step("Provision device [FOR REAL]") @step("Provision device [FOR REAL]")
def provision_device_real( def provision_device_real(
subscription: DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str subscription: device.DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str
) -> State: ) -> State:
import ansible_runner import ansible_runner
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment