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

CreateDevice workflow now calls LSO

parent f38521ef
No related branches found
No related tags found
2 merge requests!11Feature/test provisioning proxy,!10Make create_device use provisioning proxy
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
} }
}, },
"PROVISIONING_PROXY": { "PROVISIONING_PROXY": {
"api_base": "http://localhost:44444", "scheme": "https",
"api_base": "localhost:44444",
"auth": "Bearer <token>", "auth": "Bearer <token>",
"api_version": 1123 "api_version": 1123
} }
......
...@@ -4,28 +4,51 @@ from gso.products.product_blocks.device import DeviceBlockProvisioning ...@@ -4,28 +4,51 @@ from gso.products.product_blocks.device import DeviceBlockProvisioning
from gso import settings from gso import settings
import requests import requests
from gso.products.product_types.device import DeviceProvisioning
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def provision_node( def provision_node(
node_subscription_params: DeviceBlockProvisioning, node_subscription_params: DeviceProvisioning,
callback_url: str, callback_url: str,
dry_run: bool = True): dry_run: bool = True):
oss = settings.load_oss_params() oss = settings.load_oss_params()
pp_params = oss.PROVISIONING_PROXY pp_params = oss.PROVISIONING_PROXY
assert pp_params assert pp_params
logger.debug(f'[disabled] provisioning node {node_subscription_params}') device_params = node_subscription_params.device
logger.debug(f'[disabled] provisioning node {device_params}')
parameters = { parameters = {
'callback': callback_url, 'callback': callback_url,
'dry_run': dry_run, 'dry_run': dry_run,
'device': node_subscription_params.dict() 'device': {
'fqdn': device_params.fqdn,
'lo_address': {
'v4': str(device_params.lo_ipv4_address),
'v6': str(device_params.lo_ipv6_address)
},
'lo_iso_address': device_params.lo_iso_address,
'si_ipv4_network': str(device_params.si_ipv4_network),
'ias_lt_network': {
'v4': str(device_params.ias_lt_ipv4_network),
'v6': str(device_params.ias_lt_ipv6_network)
},
'site_country_code': device_params.site_country_code,
'site_city': device_params.site_city,
'site_latitude': device_params.site_latitude,
'site_longitude': device_params.site_longitude,
'snmp_location': device_params.snmp_location,
'device_type': node_subscription_params.device_type,
'device_vendor': node_subscription_params.device_vendor,
'ts_address': device_params.ts_address,
'ts_port': device_params.ts_port
}
} }
r = requests.post( post_request = requests.post(
f'https://{pp_params.api_base}' f'{pp_params.scheme}://{pp_params.api_base}'
f'/api/device', f'/api/device',
json=parameters) json=parameters)
r.raise_for_status() post_request.raise_for_status()
requests.post()
\ No newline at end of file
...@@ -38,6 +38,7 @@ class IPAMParams(BaseSettings): ...@@ -38,6 +38,7 @@ class IPAMParams(BaseSettings):
class ProvisioningProxyParams(BaseSettings): class ProvisioningProxyParams(BaseSettings):
scheme: str
api_base: str api_base: str
auth: str # FIXME: unfinished auth: str # FIXME: unfinished
api_version: int api_version: int
......
import ipaddress import ipaddress
from uuid import uuid4 from uuid import uuid4
from orchestrator.config.assignee import Assignee
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
...@@ -14,7 +15,8 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form ...@@ -14,7 +15,8 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form
from gso import settings from gso import settings
from gso.services import provisioning_proxy from gso.services import provisioning_proxy
from gso.products.product_types import device from gso.products.product_types.device import DeviceVendor, DeviceInactive, \
DeviceProvisioning
def initial_input_form_generator(product_name: str) -> FormGenerator: def initial_input_form_generator(product_name: str) -> FormGenerator:
...@@ -25,7 +27,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -25,7 +27,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: device.DeviceVendor device_vendor: DeviceVendor
user_input = yield CreateDeviceForm user_input = yield CreateDeviceForm
...@@ -34,7 +36,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -34,7 +36,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 = device.DeviceInactive.from_product_id(product, uuid4()) subscription = DeviceInactive.from_product_id(product, uuid4())
return { return {
"subscription": subscription, "subscription": subscription,
...@@ -43,7 +45,7 @@ def create_subscription(product: UUIDstr) -> State: ...@@ -43,7 +45,7 @@ def create_subscription(product: UUIDstr) -> State:
@step("Get information from IPAM ") @step("Get information from IPAM ")
def get_info_from_ipam(subscription: device.DeviceInactive) -> State: def get_info_from_ipam(subscription: DeviceInactive) -> State:
# lo = ipam.new_device_lo_address() # lo = ipam.new_device_lo_address()
# subscription.device.lo_ipv4_address = lo.v4 # subscription.device.lo_ipv4_address = lo.v4
# subscription.device.lo_ipv6_address = lo.v6 # subscription.device.lo_ipv6_address = lo.v6
...@@ -58,7 +60,7 @@ def get_info_from_ipam(subscription: device.DeviceInactive) -> State: ...@@ -58,7 +60,7 @@ def get_info_from_ipam(subscription: device.DeviceInactive) -> State:
@step("get information about SNMP") @step("get information about SNMP")
def get_snmp_info(subscription: device.DeviceInactive) -> State: def get_snmp_info(subscription: DeviceInactive) -> State:
country = 'Spain' country = 'Spain'
city = 'Barcelona' city = 'Barcelona'
country_code = 'ES' country_code = 'ES'
...@@ -78,11 +80,11 @@ def get_snmp_info(subscription: device.DeviceInactive) -> State: ...@@ -78,11 +80,11 @@ def get_snmp_info(subscription: device.DeviceInactive) -> State:
@step("Initialize subscription") @step("Initialize subscription")
def initialize_subscription( def initialize_subscription(
subscription: device.DeviceInactive, subscription: DeviceInactive,
fqdn: str, fqdn: str,
ts_address: ipaddress.IPv4Address, ts_address: ipaddress.IPv4Address,
ts_port: str, ts_port: str,
device_vendor: device.DeviceVendor device_vendor: 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)
...@@ -90,7 +92,7 @@ def initialize_subscription( ...@@ -90,7 +92,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 = device.DeviceProvisioning.from_other_lifecycle( subscription = DeviceProvisioning.from_other_lifecycle(
subscription, SubscriptionLifecycle.PROVISIONING subscription, SubscriptionLifecycle.PROVISIONING
) )
...@@ -98,13 +100,13 @@ def initialize_subscription( ...@@ -98,13 +100,13 @@ def initialize_subscription(
@step("Provision device [DRY RUN]") @step("Provision device [DRY RUN]")
def provision_device_dry(subscription: device.DeviceProvisioning) -> State: def provision_device_dry(subscription: DeviceProvisioning) -> State:
# TODO: verify this URL # TODO: verify this URL
callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \ callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \
f'/api/process/{subscription.product.product_id}/resume' f'/api/process/{subscription.product.product_id}/resume'
proxy_result = provisioning_proxy.provision_node( provisioning_proxy.provision_node(
subscription.device, subscription,
callback_url callback_url
) )
...@@ -136,32 +138,28 @@ def provision_device_dry(subscription: device.DeviceProvisioning) -> State: ...@@ -136,32 +138,28 @@ def provision_device_dry(subscription: device.DeviceProvisioning) -> State:
# dry_run=True) # dry_run=True)
# TODO: figure out what to return when we are suspending & waiting # TODO: figure out what to return when we are suspending & waiting
# for the provisioning-proxy to call back # for the provisioning-proxy to call back
return {"subscription": proxy_result}
return {'subscription': subscription}
@inputstep("Confirm step", assignee="CHANGES") @inputstep("Confirm step", assignee=Assignee('SYSTEM'))
def confirm_step() -> FormGenerator: def confirm_step(subscription: DeviceProvisioning) -> State:
class ConfirmForm(FormPage): class ConfirmForm(FormPage):
confirm: Accept confirm: Accept
user_input = yield ConfirmForm user_input = yield ConfirmForm
return {"confirm": user_input.confirm} return {'subscription': subscription, 'confirm': user_input}
@step("Provision device [FOR REAL]") @step("Provision device [FOR REAL]")
def provision_device_real( def provision_device_real(subscription: DeviceProvisioning) -> State:
subscription: device.DeviceProvisioning,
fqdn: str,
ts_address: str,
ts_port: str
) -> State:
# TODO: generate actual callback URL # TODO: generate actual callback URL
callback_url = settings.load_oss_params().GENERAL.public_hostname callback_url = settings.load_oss_params().GENERAL.public_hostname
provisioning_proxy.provision_node( provisioning_proxy.provision_node(
subscription.device, subscription,
callback_url, callback_url,
False False
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment