Skip to content
Snippets Groups Projects

Add sites, and add integration of IPtrunks and routers with LSO deployment

Merged Karel van Klink requested to merge feature/new_device_model_and_sites_and_orgs into develop
6 files
+ 117
36
Compare changes
  • Side-by-side
  • Inline
Files
6
import logging
import logging
from gso.products.product_types.device \
import requests
import DeviceBlock
from orchestrator import inputstep
 
from orchestrator.config.assignee import Assignee
 
from orchestrator.forms import FormPage, ReadOnlyField
 
from orchestrator.forms.validators import Accept, Label, LongText
 
from orchestrator.types import UUIDstr, State
 
from gso import settings
from gso import settings
# 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: DeviceBlock,
node_subscription_params: DeviceProvisioning,
 
process_id: UUIDstr,
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
 
callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \
 
f'/api/processes/{process_id}/resume'
 
logger.debug(f'[disabled] provisioning node {device_params}')
 
 
parameters = {
 
'callback': callback_url,
 
'dry_run': dry_run,
 
'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
 
}
 
}
 
 
post_request = requests.post(
 
f'{pp_params.scheme}://{pp_params.api_base}'
 
f'/api/device',
 
json=parameters)
 
post_request.raise_for_status()
 
 
 
@inputstep('Await provisioning proxy results', assignee=Assignee('SYSTEM'))
 
def await_pp_results() -> State:
 
class ProvisioningResultPage(FormPage):
 
class Config:
 
title = 'Do NOT click on confirm in this step!'
 
 
warning_label: Label = 'This step relies on an external service to ' \
 
'send an update to the orchestrator, do not ' \
 
'interfere with this process please.'
 
pp_run_results: dict = {'state': 'not_ready'}
 
confirm: Accept = Accept('INCOMPLETE')
 
 
result_page = yield ProvisioningResultPage
 
 
return result_page.dict()
 
 
 
@inputstep('Confirm provisioning proxy results', assignee=Assignee('SYSTEM'))
 
def confirm_pp_results(state: State) -> State:
 
class ConfirmRunPage(FormPage):
 
class Config:
 
title = 'Execution completed, please confirm the results.'
 
 
run_status: str = ReadOnlyField(state['pp_run_results']['status'])
 
run_results: LongText = ReadOnlyField(
 
f"{state['pp_run_results']['output']}")
 
confirm: Accept = Accept('INCOMPLETE')
 
 
yield ConfirmRunPage
# r = requests.get(
return state
# f'https://{pp_params.api_base}'
# f'/api/version',
# params=node_subscription_params.dict())
# r.raise_for_status()
Loading