mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	[CLOUDSTACK-10020] Changes to make marvin work with projects and VPCs (#2206)
Co-authored-by: dahn <daan.hoogland@shapeblue.com>
This commit is contained in:
		
							parent
							
								
									f4f35a8995
								
							
						
					
					
						commit
						5316810aa3
					
				| @ -451,19 +451,38 @@ class VirtualMachine: | ||||
|     @classmethod | ||||
|     def access_ssh_over_nat( | ||||
|             cls, apiclient, services, virtual_machine, allow_egress=False, | ||||
|             networkid=None): | ||||
|             networkid=None, vpcid=None): | ||||
|         """ | ||||
|         Program NAT and PF rules to open up ssh access to deployed guest | ||||
|         @return: | ||||
|         """ | ||||
|         # VPCs have ACLs managed differently | ||||
|         if vpcid: | ||||
|             public_ip = PublicIPAddress.create( | ||||
|                 apiclient=apiclient, | ||||
|                 accountid=virtual_machine.account, | ||||
|                 zoneid=virtual_machine.zoneid, | ||||
|                 domainid=virtual_machine.domainid, | ||||
|                 services=services, | ||||
|             networkid=networkid | ||||
|                 vpcid=vpcid | ||||
|             ) | ||||
| 
 | ||||
|             nat_rule = NATRule.create( | ||||
|                 apiclient=apiclient, | ||||
|                 virtual_machine=virtual_machine, | ||||
|                 services=services, | ||||
|                 ipaddressid=public_ip.ipaddress.id, | ||||
|                 networkid=networkid) | ||||
|         else: | ||||
|             public_ip = PublicIPAddress.create( | ||||
|                 apiclient=apiclient, | ||||
|                 accountid=virtual_machine.account, | ||||
|                 zoneid=virtual_machine.zoneid, | ||||
|                 domainid=virtual_machine.domainid, | ||||
|                 services=services, | ||||
|                 networkid=networkid, | ||||
|             ) | ||||
| 
 | ||||
|             FireWallRule.create( | ||||
|                 apiclient=apiclient, | ||||
|                 ipaddressid=public_ip.ipaddress.id, | ||||
| @ -476,9 +495,9 @@ class VirtualMachine: | ||||
|                 apiclient=apiclient, | ||||
|                 virtual_machine=virtual_machine, | ||||
|                 services=services, | ||||
|             ipaddressid=public_ip.ipaddress.id | ||||
|         ) | ||||
|         if allow_egress: | ||||
|                 ipaddressid=public_ip.ipaddress.id) | ||||
| 
 | ||||
|         if allow_egress and not vpcid: | ||||
|             try: | ||||
|                 EgressFireWallRule.create( | ||||
|                     apiclient=apiclient, | ||||
| @ -502,7 +521,7 @@ class VirtualMachine: | ||||
|                hostid=None, keypair=None, ipaddress=None, mode='default', | ||||
|                method='GET', hypervisor=None, customcpunumber=None, | ||||
|                customcpuspeed=None, custommemory=None, rootdisksize=None, | ||||
|                rootdiskcontroller=None, macaddress=None, datadisktemplate_diskoffering_list={}): | ||||
|                rootdiskcontroller=None, vpcid=None, macaddress=None, datadisktemplate_diskoffering_list={}): | ||||
|         """Create the instance""" | ||||
| 
 | ||||
|         cmd = deployVirtualMachine.deployVirtualMachineCmd() | ||||
| @ -654,7 +673,8 @@ class VirtualMachine: | ||||
|                         services, | ||||
|                         virtual_machine, | ||||
|                         allow_egress=allow_egress, | ||||
|                         networkid=cmd.networkids[0] if cmd.networkids else None) | ||||
|                         networkid=cmd.networkids[0] if cmd.networkids else None, | ||||
|                         vpcid=vpcid) | ||||
|                 elif mode.lower() == 'basic': | ||||
|                     if virtual_machine.publicip is not None: | ||||
|                         # EIP/ELB (netscaler) enabled zone | ||||
| @ -1042,7 +1062,7 @@ class Volume: | ||||
| 
 | ||||
|     @classmethod | ||||
|     def create_custom_disk(cls, apiclient, services, account=None, | ||||
|                            domainid=None, diskofferingid=None): | ||||
|                            domainid=None, diskofferingid=None, projectid=None): | ||||
|         """Create Volume from Custom disk offering""" | ||||
|         cmd = createVolume.createVolumeCmd() | ||||
|         cmd.name = services["diskname"] | ||||
| @ -1065,19 +1085,22 @@ class Volume: | ||||
| 
 | ||||
|         if account: | ||||
|             cmd.account = account | ||||
|         else: | ||||
|         elif "account" in services: | ||||
|             cmd.account = services["account"] | ||||
| 
 | ||||
|         if domainid: | ||||
|             cmd.domainid = domainid | ||||
|         else: | ||||
|         elif "domainid" in services: | ||||
|             cmd.domainid = services["domainid"] | ||||
| 
 | ||||
|         if projectid: | ||||
|             cmd.projectid = projectid | ||||
| 
 | ||||
|         return Volume(apiclient.createVolume(cmd).__dict__) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def create_from_snapshot(cls, apiclient, snapshot_id, services, | ||||
|                              account=None, domainid=None): | ||||
|                              account=None, domainid=None, projectid=None): | ||||
|         """Create Volume from snapshot""" | ||||
|         cmd = createVolume.createVolumeCmd() | ||||
|         cmd.name = "-".join([services["diskname"], random_gen()]) | ||||
| @ -1091,12 +1114,16 @@ class Volume: | ||||
|             cmd.ispublic = False | ||||
|         if account: | ||||
|             cmd.account = account | ||||
|         else: | ||||
|         elif "account" in services: | ||||
|             cmd.account = services["account"] | ||||
|         if domainid: | ||||
|             cmd.domainid = domainid | ||||
|         else: | ||||
|         elif "domainid" in services: | ||||
|             cmd.domainid = services["domainid"] | ||||
| 
 | ||||
|         if projectid: | ||||
|             cmd.projectid = projectid | ||||
| 
 | ||||
|         return Volume(apiclient.createVolume(cmd).__dict__) | ||||
| 
 | ||||
|     @classmethod | ||||
| @ -1445,8 +1472,8 @@ class Template: | ||||
|         return Template(apiclient.createTemplate(cmd).__dict__) | ||||
| 
 | ||||
|     @classmethod | ||||
|     def create_from_snapshot(cls, apiclient, snapshot, services, | ||||
|                              random_name=True): | ||||
|     def create_from_snapshot(cls, apiclient, snapshot, services, account=None, | ||||
|                              domainid=None, projectid=None, random_name=True): | ||||
|         """Create Template from snapshot""" | ||||
|         # Create template from Snapshot ID | ||||
|         cmd = createTemplate.createTemplateCmd() | ||||
| @ -1485,6 +1512,17 @@ class Template: | ||||
|             raise Exception( | ||||
|                 "Unable to find Ostype is required for creating template") | ||||
| 
 | ||||
|         cmd.snapshotid = snapshot.id | ||||
| 
 | ||||
|         if account: | ||||
|             cmd.account = account | ||||
|         if domainid: | ||||
|             cmd.domainid = domainid | ||||
|         if projectid: | ||||
|             cmd.projectid = projectid | ||||
| 
 | ||||
|         return Template(apiclient.createTemplate(cmd).__dict__) | ||||
| 
 | ||||
|     def delete(self, apiclient, zoneid=None): | ||||
|         """Delete Template""" | ||||
| 
 | ||||
| @ -3921,7 +3959,7 @@ class VpnCustomerGateway: | ||||
| 
 | ||||
|     @classmethod | ||||
|     def create(cls, apiclient, services, name, gateway, cidrlist, | ||||
|                account=None, domainid=None): | ||||
|                account=None, domainid=None, projectid=None): | ||||
|         """Create VPN Customer Gateway""" | ||||
|         cmd = createVpnCustomerGateway.createVpnCustomerGatewayCmd() | ||||
|         cmd.name = name | ||||
| @ -3945,6 +3983,9 @@ class VpnCustomerGateway: | ||||
|             cmd.account = account | ||||
|         if domainid: | ||||
|             cmd.domainid = domainid | ||||
|         if projectid: | ||||
|             cmd.projectid = projectid | ||||
| 
 | ||||
|         return VpnCustomerGateway( | ||||
|             apiclient.createVpnCustomerGateway(cmd).__dict__) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user