@@ -470,6 +470,7 @@ def _generate_create_dict(
470470 datacenter = None , os_code = None , image_id = None ,
471471 dedicated = False , public_vlan = None , private_vlan = None ,
472472 private_subnet = None , public_subnet = None ,
473+ public_router = None , private_router = None ,
473474 userdata = None , nic_speed = None , disks = None , post_uri = None ,
474475 private = False , ssh_keys = None , public_security_groups = None ,
475476 private_security_groups = None , boot_mode = None , transient = False , ** kwargs ):
@@ -533,6 +534,15 @@ def _generate_create_dict(
533534 if datacenter :
534535 data ["datacenter" ] = {"name" : datacenter }
535536
537+ if private_router or public_router :
538+ if private_vlan or public_vlan or private_subnet or public_subnet :
539+ raise exceptions .SoftLayerError ("You have to select network vlan or network vlan with a subnet or "
540+ "only router, not all options" )
541+ network_components = self ._create_network_components (public_vlan , private_vlan ,
542+ private_subnet , public_subnet ,
543+ private_router , public_router )
544+ data .update (network_components )
545+
536546 if private_vlan or public_vlan or private_subnet or public_subnet :
537547 network_components = self ._create_network_components (public_vlan , private_vlan ,
538548 private_subnet , public_subnet )
@@ -581,7 +591,8 @@ def _generate_create_dict(
581591
582592 def _create_network_components (
583593 self , public_vlan = None , private_vlan = None ,
584- private_subnet = None , public_subnet = None ):
594+ private_subnet = None , public_subnet = None ,
595+ private_router = None , public_router = None ):
585596 parameters = {}
586597 if private_vlan :
587598 parameters ['primaryBackendNetworkComponent' ] = {"networkVlan" : {"id" : int (private_vlan )}}
@@ -598,6 +609,12 @@ def _create_network_components(
598609
599610 parameters ['primaryBackendNetworkComponent' ]['networkVlan' ]['primarySubnet' ] = {'id' : int (private_subnet )}
600611
612+ if private_router :
613+ parameters ['primaryBackendNetworkComponent' ] = {"router" : {"id" : int (private_router )}}
614+
615+ if public_router :
616+ parameters ['primaryNetworkComponent' ] = {"router" : {"id" : int (public_router )}}
617+
601618 return parameters
602619
603620 @retry (logger = LOGGER )
@@ -685,14 +702,31 @@ def verify_create_instance(self, **kwargs):
685702 kwargs .pop ('tags' , None )
686703 create_options = self ._generate_create_dict (** kwargs )
687704 template = self .guest .generateOrderTemplate (create_options )
688- if 'private_subnet' in kwargs or 'public_subnet' in kwargs :
705+ if kwargs .get ('public_router' ) or kwargs .get ('private_router' ):
706+ if kwargs .get ('private_vlan' ) or kwargs .get ('public_vlan' ) or kwargs .get ('private_subnet' ) \
707+ or kwargs .get ('public_subnet' ):
708+ raise exceptions .SoftLayerError ("You have to select network vlan or network vlan with a subnet or "
709+ "only router, not all options" )
710+ vsi = template ['virtualGuests' ][0 ]
711+ network_components = self ._create_network_components (kwargs .get ('public_vlan' , None ),
712+ kwargs .get ('private_vlan' , None ),
713+ kwargs .get ('private_subnet' , None ),
714+ kwargs .get ('public_subnet' , None ),
715+ kwargs .get ('private_router' , None ),
716+ kwargs .get ('public_router' , None ))
717+ vsi .update (network_components )
718+
719+ if kwargs .get ('private_subnet' ) or kwargs .get ('public_subnet' ):
689720 vsi = template ['virtualGuests' ][0 ]
690721 network_components = self ._create_network_components (kwargs .get ('public_vlan' , None ),
691722 kwargs .get ('private_vlan' , None ),
692723 kwargs .get ('private_subnet' , None ),
693724 kwargs .get ('public_subnet' , None ))
694725 vsi .update (network_components )
695726
727+ print ("template" )
728+ print (template )
729+
696730 return template
697731
698732 def create_instance (self , ** kwargs ):
@@ -1121,6 +1155,7 @@ def order_guest(self, guest_object, test=False):
11211155 if guest_object .get ('placement_id' ):
11221156 template ['virtualGuests' ][0 ]['placementGroupId' ] = guest_object .get ('placement_id' )
11231157
1158+ print (template )
11241159 if test :
11251160 result = self .client .call ('Product_Order' , 'verifyOrder' , template )
11261161 else :
0 commit comments