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

use ipam service module

parent 80d54639
Branches
Tags
1 merge request!5Device workflows
...@@ -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