Commit fc578f5c authored by Romain Courteaud's avatar Romain Courteaud

slapos_cloud: add Remote Node portal type

It will be used to create cross master allocation
parent e95c0044
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
</portal_type> </portal_type>
<portal_type id="Compute Node Module"> <portal_type id="Compute Node Module">
<item>Instance Node</item> <item>Instance Node</item>
<item>Remote Node</item>
</portal_type> </portal_type>
<portal_type id="Hosting Subscription Module"> <portal_type id="Hosting Subscription Module">
<item>Hosting Subscription</item> <item>Hosting Subscription</item>
...@@ -20,6 +21,9 @@ ...@@ -20,6 +21,9 @@
<portal_type id="Instance Tree Module"> <portal_type id="Instance Tree Module">
<item>Instance Tree</item> <item>Instance Tree</item>
</portal_type> </portal_type>
<portal_type id="Remote Node">
<item>Compute Partition</item>
</portal_type>
<portal_type id="Software Installation Module"> <portal_type id="Software Installation Module">
<item>Software Installation</item> <item>Software Installation</item>
</portal_type> </portal_type>
......
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
<portal_type id="Instance Tree Module"> <portal_type id="Instance Tree Module">
<item>business_application</item> <item>business_application</item>
</portal_type> </portal_type>
<portal_type id="Remote Node">
<item>specialise</item>
</portal_type>
<portal_type id="Slave Instance"> <portal_type id="Slave Instance">
<item>aggregate</item> <item>aggregate</item>
<item>specialise</item> <item>specialise</item>
......
...@@ -5,4 +5,7 @@ ...@@ -5,4 +5,7 @@
<portal_type id="Hosting Subscription Module"> <portal_type id="Hosting Subscription Module">
<item>Hosting Subscription</item> <item>Hosting Subscription</item>
</portal_type> </portal_type>
<portal_type id="Remote Node">
<item>Compute Partition</item>
</portal_type>
</hidden_content_type_list> </hidden_content_type_list>
\ No newline at end of file
...@@ -69,6 +69,12 @@ ...@@ -69,6 +69,12 @@
<portal_type id="Person"> <portal_type id="Person">
<item>SlaposPersonConstraint</item> <item>SlaposPersonConstraint</item>
</portal_type> </portal_type>
<portal_type id="Remote Node">
<item>Computer</item>
<item>SlapOSReferenceConstraint</item>
<item>SlapOSVirtualMasterConstraint</item>
<item>SlaposComputeNodeConstraint</item>
</portal_type>
<portal_type id="Slave Instance"> <portal_type id="Slave Instance">
<item>InstanceTree</item> <item>InstanceTree</item>
<item>Reference</item> <item>Reference</item>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Base Type" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>content_icon</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>factory</string> </key>
<value> <string>addXMLObject</string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<tuple>
<string>item</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Remote Node</string> </value>
</item>
<item>
<key> <string>init_script</string> </key>
<value> <string>RemoteNode_init</string> </value>
</item>
<item>
<key> <string>permission</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Base Type</string> </value>
</item>
<item>
<key> <string>type_class</string> </key>
<value> <string>Item</string> </value>
</item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>type_mixin</string> </key>
<value>
<tuple/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -47,6 +47,10 @@ ...@@ -47,6 +47,10 @@
<type>Project</type> <type>Project</type>
<workflow>project_slap_interface_workflow</workflow> <workflow>project_slap_interface_workflow</workflow>
</chain> </chain>
<chain>
<type>Remote Node</type>
<workflow>compute_node_slap_interface_workflow</workflow>
</chain>
<chain> <chain>
<type>Slave Instance</type> <type>Slave Instance</type>
<workflow>edit_workflow, instance_slap_interface_workflow, item_workflow, slapos_cloud_interaction_workflow</workflow> <workflow>edit_workflow, instance_slap_interface_workflow, item_workflow, slapos_cloud_interaction_workflow</workflow>
......
...@@ -76,6 +76,10 @@ for compute_node_list, is_slave_on_same_instance_tree_allocable in compute_node_ ...@@ -76,6 +76,10 @@ for compute_node_list, is_slave_on_same_instance_tree_allocable in compute_node_
shared_partition = shared_instance.getAggregateValue(portal_type='Compute Partition') shared_partition = shared_instance.getAggregateValue(portal_type='Compute Partition')
if shared_partition is not None: if shared_partition is not None:
partition_uid_list.append(shared_partition.getUid()) partition_uid_list.append(shared_partition.getUid())
elif compute_node.getPortalType() == 'Remote Node':
parent_uid_list.append(compute_node.getUid())
else: else:
raise NotImplementedError('Unsupported Node type: %s' % compute_node.getPortalType()) raise NotImplementedError('Unsupported Node type: %s' % compute_node.getPortalType())
...@@ -183,6 +187,7 @@ else: ...@@ -183,6 +187,7 @@ else:
for compute_partition_candidate in portal.portal_catalog( for compute_partition_candidate in portal.portal_catalog(
limit=limit, **query_kw): limit=limit, **query_kw):
compute_partition_candidate = compute_partition_candidate.getObject() compute_partition_candidate = compute_partition_candidate.getObject()
if compute_partition_candidate.getParentValue().getCapacityScope() == "close": if compute_partition_candidate.getParentValue().getCapacityScope() == "close":
# The compute_node was closed on this partition, so skip it. # The compute_node was closed on this partition, so skip it.
continue continue
......
portal = context.getPortalObject()
reference = "REMOTE-%s" % portal.portal_ids.generateNewId(
id_group='slap_instance_node_reference',
id_generator='uid', default=1)
context.edit(reference=reference)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>RemoteNode_init</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -477,6 +477,56 @@ class DefaultScenarioMixin(TestSlapOSSecurityMixin): ...@@ -477,6 +477,56 @@ class DefaultScenarioMixin(TestSlapOSSecurityMixin):
portal_type='Internet Protocol Address')], portal_type='Internet Protocol Address')],
connection_dict.values()) connection_dict.values())
def checkRemoteInstanceAllocation(self, person_user_id, person_reference,
instance_title, software_release, software_type, server,
project_reference):
self.login(person_user_id)
self.personRequestInstanceNotReady(
software_release=software_release,
software_type=software_type,
partition_reference=instance_title,
project_reference=project_reference
)
self.checkCloudContract(person_user_id, person_reference,
instance_title, software_release, software_type, server)
self.stepCallSlaposAllocateInstanceAlarm()
self.tic()
self.personRequestInstance(
software_release=software_release,
software_type=software_type,
partition_reference=instance_title,
project_reference=project_reference
)
# now instantiate it on compute_node and set some nice connection dict
# XXX XXX self.simulateSlapgridCP(server)
# let's find instances of user and check connection strings
instance_tree_list = [q.getObject() for q in
self._getCurrentInstanceTreeList()
if q.getTitle() == instance_title]
self.assertEqual(1, len(instance_tree_list))
instance_tree = instance_tree_list[0]
software_instance = instance_tree.getSuccessorValue()
self.assertEqual(software_instance.getTitle(),
instance_tree.getTitle())
connection_dict = software_instance.getConnectionXmlAsDict()
self.assertSameSet((), connection_dict.keys())
"""
self.assertSameSet(('url_1', 'url_2'), connection_dict.keys())
self.login()
partition = software_instance.getAggregateValue()
self.assertSameSet(
['http://%s/' % q.getIpAddress() for q in
partition.contentValues(portal_type='Internet Protocol Address')],
connection_dict.values())"""
def checkSlaveInstanceUnallocation(self, person_user_id, def checkSlaveInstanceUnallocation(self, person_user_id,
person_reference, instance_title, person_reference, instance_title,
software_release, software_type, server, software_release, software_type, server,
......
...@@ -18,7 +18,7 @@ assert compute_partition.getPortalType() == "Compute Partition" ...@@ -18,7 +18,7 @@ assert compute_partition.getPortalType() == "Compute Partition"
instance.edit(aggregate_value=compute_partition, activate_kw={'tag': 'allocate_%s' % compute_partition_url}) instance.edit(aggregate_value=compute_partition, activate_kw={'tag': 'allocate_%s' % compute_partition_url})
compute_node = compute_partition.getParentValue() compute_node = compute_partition.getParentValue()
if compute_node.getPortalType() == 'Compute Node':
compute_node.ComputeNode_checkAndUpdateCapacityScope( compute_node.ComputeNode_checkAndUpdateCapacityScope(
allocated_instance=instance allocated_instance=instance
) )
...@@ -52,6 +52,12 @@ ...@@ -52,6 +52,12 @@
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>script_RequestedInstance_allocatePartition</string> </value> <value> <string>script_RequestedInstance_allocatePartition</string> </value>
......
installation = state_change['object'] installation = state_change['object']
compute_node = installation.getAggregateValue(portal_type="Compute Node") compute_node = installation.getAggregateValue(portal_type=["Remote Node", "Compute Node"])
if compute_node is not None: if compute_node is not None:
compute_node.activate( compute_node.activate(
after_path_and_method_id=(installation.getPath(), ('immediateReindexObject', 'recursiveImmediateReindexObject'))).reindexObject() after_path_and_method_id=(installation.getPath(), ('immediateReindexObject', 'recursiveImmediateReindexObject'))).reindexObject()
...@@ -60,6 +60,12 @@ ...@@ -60,6 +60,12 @@
</tuple> </tuple>
</value> </value>
</item> </item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>script_SoftwareInstallation_reindexComputeNode</string> </value> <value> <string>script_SoftwareInstallation_reindexComputeNode</string> </value>
......
...@@ -2,9 +2,11 @@ Allocation Supply Line | Allocation Supply Cell ...@@ -2,9 +2,11 @@ Allocation Supply Line | Allocation Supply Cell
Allocation Supply Module | Allocation Supply Allocation Supply Module | Allocation Supply
Allocation Supply | Allocation Supply Line Allocation Supply | Allocation Supply Line
Compute Node Module | Instance Node Compute Node Module | Instance Node
Compute Node Module | Remote Node
Compute Node | Certificate Login Compute Node | Certificate Login
Hosting Subscription Module | Hosting Subscription Hosting Subscription Module | Hosting Subscription
Instance Tree Module | Instance Tree Instance Tree Module | Instance Tree
Remote Node | Compute Partition
Software Installation Module | Software Installation Software Installation Module | Software Installation
Software Instance Module | Slave Instance Software Instance Module | Slave Instance
Software Instance Module | Software Instance Software Instance Module | Software Instance
......
...@@ -7,6 +7,7 @@ Hosting Subscription Module | business_application ...@@ -7,6 +7,7 @@ Hosting Subscription Module | business_application
Instance Node | specialise Instance Node | specialise
Instance Tree Module | business_application Instance Tree Module | business_application
Instance Tree | destination_section Instance Tree | destination_section
Remote Node | specialise
Slave Instance | aggregate Slave Instance | aggregate
Slave Instance | specialise Slave Instance | specialise
Software Installation Module | business_application Software Installation Module | business_application
......
Allocation Supply Line | Allocation Supply Cell Allocation Supply Line | Allocation Supply Cell
Hosting Subscription Module | Hosting Subscription Hosting Subscription Module | Hosting Subscription
\ No newline at end of file Remote Node | Compute Partition
\ No newline at end of file
...@@ -7,6 +7,7 @@ Hosting Subscription Module ...@@ -7,6 +7,7 @@ Hosting Subscription Module
Instance Node Instance Node
Instance Tree Instance Tree
Instance Tree Module Instance Tree Module
Remote Node
Slave Instance Slave Instance
Software Installation Software Installation
Software Installation Module Software Installation Module
......
...@@ -36,6 +36,10 @@ Instance Tree | TextDocument ...@@ -36,6 +36,10 @@ Instance Tree | TextDocument
Instance Tree | Url Instance Tree | Url
Instance Tree | VariationRange Instance Tree | VariationRange
Person | SlaposPersonConstraint Person | SlaposPersonConstraint
Remote Node | Computer
Remote Node | SlapOSReferenceConstraint
Remote Node | SlapOSVirtualMasterConstraint
Remote Node | SlaposComputeNodeConstraint
Slave Instance | InstanceTree Slave Instance | InstanceTree
Slave Instance | Reference Slave Instance | Reference
Slave Instance | SlapOSReferenceConstraint Slave Instance | SlapOSReferenceConstraint
......
...@@ -18,6 +18,7 @@ Instance Tree | instance_tree_workflow ...@@ -18,6 +18,7 @@ Instance Tree | instance_tree_workflow
Organisation | organisation_slap_interface_workflow Organisation | organisation_slap_interface_workflow
Person | person_slap_interface_workflow Person | person_slap_interface_workflow
Project | project_slap_interface_workflow Project | project_slap_interface_workflow
Remote Node | compute_node_slap_interface_workflow
Slave Instance | edit_workflow Slave Instance | edit_workflow
Slave Instance | instance_slap_interface_workflow Slave Instance | instance_slap_interface_workflow
Slave Instance | item_workflow Slave Instance | item_workflow
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment