Commit f449cb6c authored by Alain Takoudjou's avatar Alain Takoudjou

slapos_cloud migrated to new business template format

parent 66cb8262
...@@ -56,11 +56,6 @@ ...@@ -56,11 +56,6 @@
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string>DROP TABLE IF EXISTS computer_partition\n
</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
...@@ -50,11 +50,6 @@ ...@@ -50,11 +50,6 @@
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string>DROP TABLE IF EXISTS software_instance_tree\n
</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
...@@ -50,15 +50,6 @@ ...@@ -50,15 +50,6 @@
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
DELETE FROM computer_partition WHERE <dtml-sqltest uid op=eq type=int>\n
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
DELETE FROM email WHERE <dtml-sqltest uid op=eq type=int>
\ No newline at end of file
...@@ -18,14 +18,6 @@ ...@@ -18,14 +18,6 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>z0_uncatalog_email</string> </value> <value> <string>z0_uncatalog_email</string> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
DELETE FROM email WHERE <dtml-sqltest uid op=eq type=int>
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
...@@ -50,15 +50,6 @@ ...@@ -50,15 +50,6 @@
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
DELETE FROM software_instance_tree WHERE <dtml-sqltest uid op=eq type=int>\n
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
DELETE FROM
computer_partition
WHERE
<dtml-in uid>
uid=<dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if>
</dtml-in>
;
<dtml-var "'\0'">
<dtml-let row_list="[]">
<dtml-in prefix="loop" expr="_.range(_.len(uid))">
<dtml-let free_for_request="ComputerPartition_isFreeForRequest[loop_item]">
<dtml-let software_type="ComputerPartition_getSoftwareType[loop_item]">
<dtml-in prefix="url" expr="ComputerPartition_getAvailableSoftwareReleaseUrlStringList[loop_item]" no_push_item>
<dtml-call expr="row_list.append([
uid[loop_item],
url_item,
free_for_request,
software_type])">
</dtml-in>
</dtml-let>
</dtml-let>
</dtml-in>
<dtml-if "row_list">
INSERT INTO
computer_partition
VALUES
<dtml-in prefix="row" expr="row_list">
(
<dtml-sqlvar expr="row_item[0]" type="int">,
<dtml-sqlvar expr="row_item[1]" type="string">,
<dtml-sqlvar expr="row_item[2]" type="int">,
<dtml-sqlvar expr="row_item[3]" type="string">
)
<dtml-if sequence-end><dtml-else>,</dtml-if>
</dtml-in>
</dtml-if>
</dtml-let>
...@@ -53,54 +53,6 @@ ComputerPartition_getSoftwareType</string> </value> ...@@ -53,54 +53,6 @@ ComputerPartition_getSoftwareType</string> </value>
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
DELETE FROM\n
computer_partition\n
WHERE\n
<dtml-in uid>\n
uid=<dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if>\n
</dtml-in>\n
;\n
\n
<dtml-var "\'\\0\'">\n
\n
<dtml-let row_list="[]">\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
<dtml-let free_for_request="ComputerPartition_isFreeForRequest[loop_item]">\n
<dtml-let software_type="ComputerPartition_getSoftwareType[loop_item]">\n
<dtml-in prefix="url" expr="ComputerPartition_getAvailableSoftwareReleaseUrlStringList[loop_item]" no_push_item>\n
<dtml-call expr="row_list.append([\n
uid[loop_item],\n
url_item,\n
free_for_request,\n
software_type])">\n
</dtml-in>\n
</dtml-let>\n
</dtml-let>\n
</dtml-in>\n
\n
<dtml-if "row_list">\n
INSERT INTO\n
computer_partition\n
VALUES\n
<dtml-in prefix="row" expr="row_list">\n
(\n
<dtml-sqlvar expr="row_item[0]" type="int">,\n
<dtml-sqlvar expr="row_item[1]" type="string">,\n
<dtml-sqlvar expr="row_item[2]" type="int">,\n
<dtml-sqlvar expr="row_item[3]" type="string">\n
)\n
<dtml-if sequence-end><dtml-else>,</dtml-if>\n
</dtml-in>\n
</dtml-if>\n
</dtml-let>\n
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
<dtml-let email_list="[]">
<dtml-in prefix="loop" expr="_.range(_.len(uid))">
<dtml-if expr="getPortalType[loop_item] in ['Email', 'Software Release', 'Software Installation', 'Software Instance', 'Hosting Subscription']">
<dtml-call expr="email_list.append(loop_item)">
</dtml-if>
</dtml-in>
<dtml-if expr="_.len(email_list) > 0">
REPLACE INTO
email
VALUES
<dtml-in prefix="loop" expr="email_list">
(
<dtml-sqlvar expr="uid[loop_item]" type="int">,
<dtml-sqlvar expr="getUrlString[loop_item]" type="string" optional>
)
<dtml-if sequence-end><dtml-else>,</dtml-if>
</dtml-in>
</dtml-if>
</dtml-let>
\ No newline at end of file
...@@ -20,32 +20,6 @@ getPortalType</string> </value> ...@@ -20,32 +20,6 @@ getPortalType</string> </value>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>z_catalog_email_list</string> </value> <value> <string>z_catalog_email_list</string> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
<dtml-let email_list="[]">\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
<dtml-if expr="getPortalType[loop_item] in [\'Email\', \'Software Release\', \'Software Installation\', \'Software Instance\', \'Hosting Subscription\']">\n
<dtml-call expr="email_list.append(loop_item)">\n
</dtml-if>\n
</dtml-in>\n
<dtml-if expr="_.len(email_list) > 0">\n
REPLACE INTO\n
email\n
VALUES\n
<dtml-in prefix="loop" expr="email_list">\n
(\n
<dtml-sqlvar expr="uid[loop_item]" type="int">, \n
<dtml-sqlvar expr="getUrlString[loop_item]" type="string" optional>\n
)\n
<dtml-if sequence-end><dtml-else>,</dtml-if>\n
</dtml-in>\n
</dtml-if>\n
</dtml-let>
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
REPLACE INTO
catalog
(`uid`, `security_uid`, `owner`, `viewable_owner`, `path`, `relative_url`, `parent_uid`, `id`, `description`, `title`, `meta_type`,
`portal_type`, `opportunity_state`, `corporate_registration_code`, `ean13_code`, `validation_state`, `simulation_state`,
`causality_state`, `invoice_state`, `payment_state`, `event_state`, `immobilisation_state`, `reference`, `grouping_reference`,
`source_reference`, `destination_reference`, `string_index`, `int_index`, `float_index`, `has_cell_content`, `modification_date`)
VALUES
<dtml-in prefix="loop" expr="_.range(_.len(uid))">
(
<dtml-sqlvar expr="uid[loop_item]" type="int">,
<dtml-sqlvar expr="security_uid[loop_item]" type="int">,
<dtml-sqlvar expr="getOwnerInfo[loop_item]['id']" type="string">,
<dtml-sqlvar expr="(getViewPermissionOwner[loop_item] is not None) and getViewPermissionOwner[loop_item] or ''" type="string" optional>,
<dtml-sqlvar expr="getPath[loop_item]" type="string">,
<dtml-sqlvar expr="getRelativeUrl[loop_item]" type="string">,
<dtml-sqlvar expr="getParentUid[loop_item]" type="int">,
<dtml-sqlvar expr="id[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getDescription[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getTitle[loop_item]" type="string" optional>,
<dtml-sqlvar expr="meta_type[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getPortalType[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getOpportunityState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getCorporateRegistrationCode[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getEan13Code[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getValidationState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getSimulationState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getCausalityState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getInvoiceState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getPaymentState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getEventState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getImmobilisationState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getGroupingReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getSourceReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getDestinationReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getStringIndex[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getIntIndex[loop_item]" type="int" optional>,
<dtml-sqlvar expr="getFloatIndex[loop_item]" type="float" optional>,
<dtml-sqlvar expr="hasCellContent[loop_item]" type="int" optional>,
<dtml-sqlvar expr="getModificationDate[loop_item]" type="datetime" optional>
)
<dtml-if sequence-end><dtml-else>,</dtml-if>
</dtml-in>
...@@ -80,57 +80,6 @@ getModificationDate</string> </value> ...@@ -80,57 +80,6 @@ getModificationDate</string> </value>
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
REPLACE INTO\n
catalog\n
(`uid`, `security_uid`, `owner`, `viewable_owner`, `path`, `relative_url`, `parent_uid`, `id`, `description`, `title`, `meta_type`,\n
`portal_type`, `opportunity_state`, `corporate_registration_code`, `ean13_code`, `validation_state`, `simulation_state`,\n
`causality_state`, `invoice_state`, `payment_state`, `event_state`, `immobilisation_state`, `reference`, `grouping_reference`,\n
`source_reference`, `destination_reference`, `string_index`, `int_index`, `float_index`, `has_cell_content`, `modification_date`)\n
VALUES\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
(\n
<dtml-sqlvar expr="uid[loop_item]" type="int">, \n
<dtml-sqlvar expr="security_uid[loop_item]" type="int">,\n
<dtml-sqlvar expr="getOwnerInfo[loop_item][\'id\']" type="string">,\n
<dtml-sqlvar expr="(getViewPermissionOwner[loop_item] is not None) and getViewPermissionOwner[loop_item] or \'\'" type="string" optional>,\n
<dtml-sqlvar expr="getPath[loop_item]" type="string">,\n
<dtml-sqlvar expr="getRelativeUrl[loop_item]" type="string">,\n
<dtml-sqlvar expr="getParentUid[loop_item]" type="int">,\n
<dtml-sqlvar expr="id[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getDescription[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getTitle[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="meta_type[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getPortalType[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getOpportunityState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getCorporateRegistrationCode[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getEan13Code[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getValidationState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getSimulationState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getCausalityState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getInvoiceState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getPaymentState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getEventState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getImmobilisationState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getGroupingReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getSourceReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getDestinationReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getStringIndex[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getIntIndex[loop_item]" type="int" optional>,\n
<dtml-sqlvar expr="getFloatIndex[loop_item]" type="float" optional>,\n
<dtml-sqlvar expr="hasCellContent[loop_item]" type="int" optional>,\n
<dtml-sqlvar expr="getModificationDate[loop_item]" type="datetime" optional>\n
)\n
<dtml-if sequence-end><dtml-else>,</dtml-if>\n
</dtml-in>\n
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
REPLACE INTO
catalog
(`uid`, `security_uid`, `owner`, `viewable_owner`, `path`, `relative_url`, `parent_uid`, `id`, `description`, `title`, `meta_type`,
`portal_type`, `opportunity_state`, `corporate_registration_code`, `ean13_code`, `validation_state`, `simulation_state`,
`causality_state`, `invoice_state`, `payment_state`, `event_state`, `immobilisation_state`, `reference`, `grouping_reference`, `grouping_date`,
`source_reference`, `destination_reference`, `string_index`, `int_index`, `float_index`, `has_cell_content`, `creation_date`,
`modification_date`)
VALUES
<dtml-in prefix="loop" expr="_.range(_.len(uid))">
(
<dtml-sqlvar expr="uid[loop_item]" type="int">,
<dtml-sqlvar expr="security_uid[loop_item]" type="int">,
<dtml-sqlvar expr="getOwnerInfo[loop_item]['id']" type="string">,
<dtml-sqlvar expr="(getViewPermissionOwner[loop_item] is not None) and getViewPermissionOwner[loop_item] or ''" type="string" optional>,
<dtml-sqlvar expr="getPath[loop_item]" type="string">,
<dtml-sqlvar expr="getRelativeUrl[loop_item]" type="string">,
<dtml-sqlvar expr="getParentUid[loop_item]" type="int">,
<dtml-sqlvar expr="id[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getDescription[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getTitle[loop_item]" type="string" optional>,
<dtml-sqlvar expr="meta_type[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getPortalType[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getOpportunityState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getCorporateRegistrationCode[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getEan13Code[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getValidationState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getSimulationState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getCausalityState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getInvoiceState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getPaymentState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getEventState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getImmobilisationState[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getGroupingReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getGroupingDate[loop_item]" type="datetime" optional>,
<dtml-sqlvar expr="getSourceReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getDestinationReference[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getStringIndex[loop_item]" type="string" optional>,
<dtml-sqlvar expr="getIntIndex[loop_item]" type="int" optional>,
<dtml-sqlvar expr="getFloatIndex[loop_item]" type="float" optional>,
<dtml-sqlvar expr="hasCellContent[loop_item]" type="int" optional>,
<dtml-sqlvar expr="getCreationDate[loop_item]" type="datetime" optional>,
<dtml-sqlvar expr="getModificationDate[loop_item]" type="datetime" optional>
)
<dtml-if sequence-end><dtml-else>,</dtml-if>
</dtml-in>
...@@ -82,60 +82,6 @@ getModificationDate</string> </value> ...@@ -82,60 +82,6 @@ getModificationDate</string> </value>
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
REPLACE INTO\n
catalog\n
(`uid`, `security_uid`, `owner`, `viewable_owner`, `path`, `relative_url`, `parent_uid`, `id`, `description`, `title`, `meta_type`,\n
`portal_type`, `opportunity_state`, `corporate_registration_code`, `ean13_code`, `validation_state`, `simulation_state`,\n
`causality_state`, `invoice_state`, `payment_state`, `event_state`, `immobilisation_state`, `reference`, `grouping_reference`, `grouping_date`,\n
`source_reference`, `destination_reference`, `string_index`, `int_index`, `float_index`, `has_cell_content`, `creation_date`,\n
`modification_date`)\n
VALUES\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
(\n
<dtml-sqlvar expr="uid[loop_item]" type="int">, \n
<dtml-sqlvar expr="security_uid[loop_item]" type="int">,\n
<dtml-sqlvar expr="getOwnerInfo[loop_item][\'id\']" type="string">,\n
<dtml-sqlvar expr="(getViewPermissionOwner[loop_item] is not None) and getViewPermissionOwner[loop_item] or \'\'" type="string" optional>,\n
<dtml-sqlvar expr="getPath[loop_item]" type="string">,\n
<dtml-sqlvar expr="getRelativeUrl[loop_item]" type="string">,\n
<dtml-sqlvar expr="getParentUid[loop_item]" type="int">,\n
<dtml-sqlvar expr="id[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getDescription[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getTitle[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="meta_type[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getPortalType[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getOpportunityState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getCorporateRegistrationCode[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getEan13Code[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getValidationState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getSimulationState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getCausalityState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getInvoiceState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getPaymentState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getEventState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getImmobilisationState[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getGroupingReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getGroupingDate[loop_item]" type="datetime" optional>,\n
<dtml-sqlvar expr="getSourceReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getDestinationReference[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getStringIndex[loop_item]" type="string" optional>,\n
<dtml-sqlvar expr="getIntIndex[loop_item]" type="int" optional>,\n
<dtml-sqlvar expr="getFloatIndex[loop_item]" type="float" optional>,\n
<dtml-sqlvar expr="hasCellContent[loop_item]" type="int" optional>,\n
<dtml-sqlvar expr="getCreationDate[loop_item]" type="datetime" optional>,\n
<dtml-sqlvar expr="getModificationDate[loop_item]" type="datetime" optional>\n
)\n
<dtml-if sequence-end><dtml-else>,</dtml-if>\n
</dtml-in>\n
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
DELETE FROM
software_instance_tree
WHERE
<dtml-in uid>
uid=<dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if>
</dtml-in>
;
<dtml-var "'\0'">
<dtml-let row_list="[]">
<dtml-in prefix="loop" expr="_.range(_.len(uid))">
<dtml-if expr="getSpecialiseUid[loop_item]">
<dtml-call expr="row_list.append([
uid[loop_item],
getSpecialiseUid[loop_item]])">
</dtml-if>
</dtml-in>
<dtml-if "row_list">
INSERT INTO
software_instance_tree
VALUES
<dtml-in prefix="row" expr="row_list">
(
<dtml-sqlvar expr="row_item[0]" type="int">,
<dtml-sqlvar expr="row_item[1]" type="int">
)
<dtml-if sequence-end><dtml-else>,</dtml-if>
</dtml-in>
</dtml-if>
</dtml-let>
...@@ -51,46 +51,6 @@ getSpecialiseUid</string> </value> ...@@ -51,46 +51,6 @@ getSpecialiseUid</string> </value>
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string encoding="cdata"><![CDATA[
DELETE FROM\n
software_instance_tree\n
WHERE\n
<dtml-in uid>\n
uid=<dtml-sqlvar sequence-item type="int"><dtml-if sequence-end><dtml-else> OR </dtml-if>\n
</dtml-in>\n
;\n
\n
<dtml-var "\'\\0\'">\n
\n
<dtml-let row_list="[]">\n
<dtml-in prefix="loop" expr="_.range(_.len(uid))">\n
<dtml-if expr="getSpecialiseUid[loop_item]">\n
<dtml-call expr="row_list.append([\n
uid[loop_item],\n
getSpecialiseUid[loop_item]])">\n
</dtml-if>\n
</dtml-in>\n
\n
<dtml-if "row_list">\n
INSERT INTO\n
software_instance_tree\n
VALUES\n
<dtml-in prefix="row" expr="row_list">\n
(\n
<dtml-sqlvar expr="row_item[0]" type="int">,\n
<dtml-sqlvar expr="row_item[1]" type="int">\n
)\n
<dtml-if sequence-end><dtml-else>,</dtml-if>\n
</dtml-in>\n
</dtml-if>\n
</dtml-let>\n
]]></string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
# Host:
# Database: test
# Table: 'computer_partition'
#
CREATE TABLE `computer_partition` (
`uid` BIGINT UNSIGNED NOT NULL,
`software_release_url` varchar(255),
`free_for_request` INT(1),
`software_type` VARCHAR(255),
PRIMARY KEY (`uid`, `software_release_url`)
) ENGINE=InnoDB;
...@@ -56,21 +56,6 @@ ...@@ -56,21 +56,6 @@
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string># Host:\n
# Database: test\n
# Table: \'computer_partition\'\n
#\n
CREATE TABLE `computer_partition` (\n
`uid` BIGINT UNSIGNED NOT NULL,\n
`software_release_url` varchar(255),\n
`free_for_request` INT(1),\n
`software_type` VARCHAR(255),\n
PRIMARY KEY (`uid`, `software_release_url`)\n
) ENGINE=InnoDB;\n
</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
# Host:
# Database: test
# Table: 'software_instance_tree'
#
CREATE TABLE `software_instance_tree` (
`uid` BIGINT UNSIGNED NOT NULL,
`root_uid` BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (`uid`, `root_uid`)
) ENGINE=InnoDB;
...@@ -56,19 +56,6 @@ ...@@ -56,19 +56,6 @@
<key> <string>max_rows_</string> </key> <key> <string>max_rows_</string> </key>
<value> <int>1000</int> </value> <value> <int>1000</int> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string># Host:\n
# Database: test\n
# Table: \'software_instance_tree\'\n
#\n
CREATE TABLE `software_instance_tree` (\n
`uid` BIGINT UNSIGNED NOT NULL,\n
`root_uid` BIGINT UNSIGNED NOT NULL,\n
PRIMARY KEY (`uid`, `root_uid`)\n
) ENGINE=InnoDB;\n
</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
CREATE TABLE `versioning` (
`uid` BIGINT UNSIGNED NOT NULL,
`version` varchar(255) default '',
`language` varchar(5) default '',
`revision` varchar(10) default '',
`subject_set_uid` INT UNSIGNED,
`effective_date` datetime default NULL,
`expiration_date` datetime default NULL,
`creation_date_index` INT,
`frequency_index` INT,
PRIMARY KEY (`uid`),
KEY `version` (`version`),
KEY `language` (`language`),
KEY `subject_set_uid` (`subject_set_uid`),
KEY `effective_date` (`effective_date`),
KEY `expiration_date` (`expiration_date`),
KEY `frequency_index` (`creation_date_index`, `frequency_index`)
) ENGINE=InnoDB;
...@@ -24,28 +24,6 @@ ...@@ -24,28 +24,6 @@
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>z_create_versioning</string> </value> <value> <string>z_create_versioning</string> </value>
</item> </item>
<item>
<key> <string>src</string> </key>
<value> <string>CREATE TABLE `versioning` (\n
`uid` BIGINT UNSIGNED NOT NULL,\n
`version` varchar(255) default \'\',\n
`language` varchar(5) default \'\',\n
`revision` varchar(10) default \'\',\n
`subject_set_uid` INT UNSIGNED,\n
`effective_date` datetime default NULL,\n
`expiration_date` datetime default NULL,\n
`creation_date_index` INT,\n
`frequency_index` INT,\n
PRIMARY KEY (`uid`),\n
KEY `version` (`version`),\n
KEY `language` (`language`),\n
KEY `subject_set_uid` (`subject_set_uid`),\n
KEY `effective_date` (`effective_date`),\n
KEY `expiration_date` (`expiration_date`),\n
KEY `frequency_index` (`creation_date_index`, `frequency_index`)\n
) ENGINE=InnoDB;\n
</string> </value>
</item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
portal = context.getPortalObject()
select_dict= {'default_aggregate_uid': None}
portal.portal_catalog.searchAndActivate(
portal_type=('Slave Instance', 'Software Instance'),
validation_state='validated',
default_aggregate_uid=None,
select_dict=select_dict,
left_join_list=select_dict.keys(),
method_id='SoftwareInstance_tryToAllocatePartition',
packet_size=1, # Separate calls to many transactions
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,25 +48,6 @@ ...@@ -48,25 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
select_dict= {\'default_aggregate_uid\': None}\n
portal.portal_catalog.searchAndActivate(\n
portal_type=(\'Slave Instance\', \'Software Instance\'),\n
validation_state=\'validated\',\n
default_aggregate_uid=None,\n
select_dict=select_dict,\n
left_join_list=select_dict.keys(),\n
\n
method_id=\'SoftwareInstance_tryToAllocatePartition\',\n
packet_size=1, # Separate calls to many transactions\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, NegatedQuery
portal.portal_catalog.searchAndActivate(
portal_type='Hosting Subscription',
validation_state='validated',
where_expression="related_predecessor_title_1_catalog.title <> catalog.title",
predecessor_title=NegatedQuery(SimpleQuery(predecessor_title=None, comparison_operator='is')),
method_id='HostingSubscription_assertPredecessor',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,27 +48,6 @@ ...@@ -48,27 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
portal = context.getPortalObject()\n
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, NegatedQuery\n
\n
portal.portal_catalog.searchAndActivate(\n
portal_type=\'Hosting Subscription\',\n
validation_state=\'validated\',\n
where_expression="related_predecessor_title_1_catalog.title <> catalog.title",\n
predecessor_title=NegatedQuery(SimpleQuery(predecessor_title=None, comparison_operator=\'is\')),\n
method_id=\'HostingSubscription_assertPredecessor\',\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
portal.portal_catalog.searchAndActivate(
portal_type=["Slave Instance", "Software Instance"],
validation_state="validated",
specialise_validation_state="archived",
method_id='Instance_tryToGarbageCollect',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
\n
portal.portal_catalog.searchAndActivate(\n
portal_type=["Slave Instance", "Software Instance"],\n
validation_state="validated",\n
specialise_validation_state="archived",\n
method_id=\'Instance_tryToGarbageCollect\',\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
select_dict= {'default_aggregate_uid': None}
portal.portal_catalog.searchAndActivate(
portal_type=('Slave Instance', 'Software Instance'),
validation_state='validated',
default_aggregate_uid=None,
select_dict=select_dict,
left_join_list=select_dict.keys(),
method_id='Instance_tryToGarbageCollectNonAllocatedRootTree',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,24 +48,6 @@ ...@@ -48,24 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
select_dict= {\'default_aggregate_uid\': None}\n
portal.portal_catalog.searchAndActivate(\n
portal_type=(\'Slave Instance\', \'Software Instance\'),\n
validation_state=\'validated\',\n
default_aggregate_uid=None,\n
select_dict=select_dict,\n
left_join_list=select_dict.keys(),\n
\n
method_id=\'Instance_tryToGarbageCollectNonAllocatedRootTree\',\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
select_dict= {'default_aggregate_uid': None}
portal.portal_catalog.searchAndActivate(
portal_type=('Slave Instance', 'Software Instance'),
validation_state='validated',
default_aggregate_uid=None,
select_dict=select_dict,
left_join_list=select_dict.keys(),
method_id='SoftwareInstance_tryToInvalidateIfDestroyed',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,24 +48,6 @@ ...@@ -48,24 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
select_dict= {\'default_aggregate_uid\': None}\n
portal.portal_catalog.searchAndActivate(\n
portal_type=(\'Slave Instance\', \'Software Instance\'),\n
validation_state=\'validated\',\n
default_aggregate_uid=None,\n
select_dict=select_dict,\n
left_join_list=select_dict.keys(),\n
\n
method_id=\'SoftwareInstance_tryToInvalidateIfDestroyed\',\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
category = portal.restrictedTraverse("portal_categories/allocation_scope/open/public", None)
if category is not None:
portal.portal_catalog.searchAndActivate(
portal_type='Computer',
default_allocation_scope_uid=category.getUid(),
validation_state="validated",
method_id='Computer_checkAndUpdateCapacityScope',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,22 +48,6 @@ ...@@ -48,22 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
\n
category = portal.restrictedTraverse("portal_categories/allocation_scope/open/public", None)\n
if category is not None:\n
portal.portal_catalog.searchAndActivate(\n
portal_type=\'Computer\',\n
default_allocation_scope_uid=category.getUid(),\n
validation_state="validated",\n
method_id=\'Computer_checkAndUpdateCapacityScope\',\n
activate_kw={\'tag\': tag}\n
)\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
portal.portal_catalog.searchAndActivate(
portal_type=["Software Instance", "Slave Instance"],
default_aggregate_relative_url="computer_module/%/%",
validation_state="invalidated",
method_id='Instance_tryToUnallocatePartition',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
\n
portal.portal_catalog.searchAndActivate(\n
portal_type=["Software Instance", "Slave Instance"],\n
default_aggregate_relative_url="computer_module/%/%",\n
validation_state="invalidated",\n
method_id=\'Instance_tryToUnallocatePartition\',\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
portal = context.getPortalObject()
portal.portal_catalog.searchAndActivate(
portal_type=["Slave Instance", "Software Instance"],
validation_state="validated",
specialise_validation_state="validated",
method_id='Instance_tryToStopCollect',
activate_kw={'tag': tag}
)
context.activate(after_tag=tag).getId()
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
\n
portal.portal_catalog.searchAndActivate(\n
portal_type=["Slave Instance", "Software Instance"],\n
validation_state="validated",\n
specialise_validation_state="validated",\n
method_id=\'Instance_tryToStopCollect\',\n
activate_kw={\'tag\': tag}\n
)\n
\n
context.activate(after_tag=tag).getId()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit, params</string> </value> <value> <string>tag, fixit, params</string> </value>
......
computer = context.REQUEST.get('here')
software_release = context
return computer.Computer_getSoftwareReleaseState(software_release.getUid())
...@@ -48,14 +48,6 @@ ...@@ -48,14 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = context.REQUEST.get(\'here\')\n
software_release = context\n
\n
return computer.Computer_getSoftwareReleaseState(software_release.getUid())\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>*args, **kwargs</string> </value> <value> <string>*args, **kwargs</string> </value>
......
current = context.REQUEST.get('here')
if current.getPortalType() == 'Software Release':
software_release = current
computer = context
else:
computer = current
software_release = context
return computer.Computer_getSoftwareReleaseUsage(software_release.getUid())
...@@ -48,19 +48,6 @@ ...@@ -48,19 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>current = context.REQUEST.get(\'here\')\n
if current.getPortalType() == \'Software Release\': \n
software_release = current\n
computer = context\n
else:\n
computer = current\n
software_release = context\n
\n
return computer.Computer_getSoftwareReleaseUsage(software_release.getUid())\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>*args, **kwargs</string> </value> <value> <string>*args, **kwargs</string> </value>
......
portal = context.getPortalObject()
network = context
computter_list_uid = [x.getUid() for x in network.getSubordinationRelatedValueList()]
kw['portal_type']='Software Installation'
kw['validation_state']='validated'
kw['default_aggregate_uid']=computter_list_uid
return portal.portal_catalog(**kw)
...@@ -48,19 +48,6 @@ ...@@ -48,19 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
network = context\n
\n
computter_list_uid = [x.getUid() for x in network.getSubordinationRelatedValueList()]\n
kw[\'portal_type\']=\'Software Installation\'\n
kw[\'validation_state\']=\'validated\'\n
kw[\'default_aggregate_uid\']=computter_list_uid\n
\n
return portal.portal_catalog(**kw)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
network = context
portal = context.getPortalObject()
software_release = context.REQUEST.get('here')
computer_uid_list = [x.getUid() for x in context.getSubordinationRelatedValueList()]
return portal.portal_catalog.countResults(
portal_type='Computer Partition',
parent_uid=computer_uid_list,
free_for_request=0,
software_release_url=software_release.getUrlString()
)[0][0]
...@@ -48,22 +48,6 @@ ...@@ -48,22 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>network = context\n
portal = context.getPortalObject()\n
software_release = context.REQUEST.get(\'here\')\n
\n
computer_uid_list = [x.getUid() for x in context.getSubordinationRelatedValueList()]\n
\n
return portal.portal_catalog.countResults(\n
portal_type=\'Computer Partition\',\n
parent_uid=computer_uid_list,\n
free_for_request=0,\n
software_release_url=software_release.getUrlString()\n
)[0][0]\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>*args, **kwargs</string> </value> <value> <string>*args, **kwargs</string> </value>
......
network = context
# XXX - The use of current authenticated person will return always 'Close' if
# the person is administrator (such as 'zope' user) but not the owner of computer
#
# person = context.ERP5Site_getAuthenticatedMemberPersonValue()
allocation_state = 'Close'
software_type = ''
filter_kw = {}
for computer in network.getSubordinationRelatedValueList():
person = computer.getSourceAdministrationValue()
filter_kw['computer_guid']=computer.getReference()
try:
isAllowed = person.Person_restrictMethodAsShadowUser(shadow_document=person,
callable_object=person.Person_findPartition,
argument_list=[software_release_url, software_type, 'Software Instance',
filter_kw],
argument_dict={'test_mode': True}
)
if isAllowed:
allocation_state = 'Open'
break
except:
continue
return allocation_state
...@@ -48,37 +48,6 @@ ...@@ -48,37 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>network = context\n
\n
# XXX - The use of current authenticated person will return always \'Close\' if \n
# the person is administrator (such as \'zope\' user) but not the owner of computer\n
# \n
# person = context.ERP5Site_getAuthenticatedMemberPersonValue()\n
allocation_state = \'Close\'\n
software_type = \'\'\n
filter_kw = {}\n
\n
for computer in network.getSubordinationRelatedValueList():\n
person = computer.getSourceAdministrationValue()\n
filter_kw[\'computer_guid\']=computer.getReference()\n
try:\n
isAllowed = person.Person_restrictMethodAsShadowUser(shadow_document=person,\n
callable_object=person.Person_findPartition,\n
argument_list=[software_release_url, software_type, \'Software Instance\',\n
filter_kw], \n
argument_dict={\'test_mode\': True}\n
)\n
if isAllowed:\n
allocation_state = \'Open\'\n
break\n
except:\n
continue\n
\n
return allocation_state\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>software_release_url</string> </value> <value> <string>software_release_url</string> </value>
......
software_installation = context
portal = context.getPortalObject()
url_string = ""
software_release = portal.portal_catalog.getResultValue(
portal_type='Software Release',
url_string=software_installation.getUrlString()
)
if software_release:
url_string = "%s?editable_mode:int=1" % software_release.getAbsoluteUrl()
return url_string
...@@ -48,22 +48,6 @@ ...@@ -48,22 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>software_installation = context\n
portal = context.getPortalObject()\n
\n
url_string = ""\n
software_release = portal.portal_catalog.getResultValue(\n
portal_type=\'Software Release\',\n
url_string=software_installation.getUrlString()\n
)\n
if software_release:\n
url_string = "%s?editable_mode:int=1" % software_release.getAbsoluteUrl()\n
\n
return url_string\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
slap_state = context.getSlapState()
portal = context.getPortalObject()
portal_preferences = portal.portal_preferences
if slap_state == 'free':
computer = context.getParentValue()
return computer.Computer_getSoftwareReleaseUrlStringList()
elif slap_state == 'busy':
instance = portal.portal_catalog.getResultValue(
portal_type="Software Instance",
validation_state="validated",
default_aggregate_uid=context.getUid(),
)
if (instance is None) or (instance.getSlapState() != "start_requested"):
return []
else:
return [instance.getUrlString()]
else:
return []
...@@ -48,32 +48,6 @@ ...@@ -48,32 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>slap_state = context.getSlapState()\n
portal = context.getPortalObject()\n
portal_preferences = portal.portal_preferences\n
\n
if slap_state == \'free\':\n
computer = context.getParentValue()\n
return computer.Computer_getSoftwareReleaseUrlStringList()\n
\n
elif slap_state == \'busy\':\n
\n
instance = portal.portal_catalog.getResultValue(\n
portal_type="Software Instance",\n
validation_state="validated",\n
default_aggregate_uid=context.getUid(),\n
)\n
if (instance is None) or (instance.getSlapState() != "start_requested"):\n
return []\n
else:\n
return [instance.getUrlString()]\n
\n
else:\n
return []\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
...@@ -48,13 +48,6 @@ ...@@ -48,13 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>query_kw = dict()\n
\n
return query_kw\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw, computer_network_query=None, test_mode=False</string> </value> <value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw, computer_network_query=None, test_mode=False</string> </value>
......
partition = context
software_instance_list = partition.getAggregateRelatedValueList(portal_type=["Software Instance"])
for si in software_instance_list:
obj = si.getObject()
return "%s?editable_mode:int=1" % obj.getRelativeUrl()
...@@ -48,16 +48,6 @@ ...@@ -48,16 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>partition = context\n
\n
software_instance_list = partition.getAggregateRelatedValueList(portal_type=["Software Instance"])\n
for si in software_instance_list:\n
obj = si.getObject()\n
return "%s?editable_mode:int=1" % obj.getRelativeUrl()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
from DateTime import DateTime
portal = context.getPortalObject()
import json
partition = context
memcached_dict = context.getPortalObject().portal_memcached.getMemcachedDict(
key_prefix='slap_tool',
plugin_path='portal_memcached/default_memcached_plugin')
result = ""
date = None
for si in partition.getAggregateRelatedValueList(portal_type=["Software Instance", "Slave Instance"]):
obj = si.getObject()
if obj.getValidationState() != "validated":
continue
if obj.getSlapState() == "destroy_requested":
continue
try:
d = memcached_dict[obj.getReference()]
except KeyError:
result = "#missing no data found for %s" % obj.getReference()
else:
d = json.loads(d)
date = DateTime(d['created_at'])
result = date.strftime('%Y/%m/%d %H:%M')
return result
...@@ -48,40 +48,6 @@ ...@@ -48,40 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from DateTime import DateTime\n
portal = context.getPortalObject()\n
import json\n
\n
partition = context\n
memcached_dict = context.getPortalObject().portal_memcached.getMemcachedDict(\n
key_prefix=\'slap_tool\',\n
plugin_path=\'portal_memcached/default_memcached_plugin\')\n
\n
result = ""\n
date = None\n
\n
for si in partition.getAggregateRelatedValueList(portal_type=["Software Instance", "Slave Instance"]):\n
obj = si.getObject() \n
\n
if obj.getValidationState() != "validated":\n
continue\n
if obj.getSlapState() == "destroy_requested":\n
continue\n
\n
try:\n
d = memcached_dict[obj.getReference()]\n
except KeyError:\n
result = "#missing no data found for %s" % obj.getReference()\n
else:\n
d = json.loads(d)\n
date = DateTime(d[\'created_at\'])\n
result = date.strftime(\'%Y/%m/%d %H:%M\')\n
\n
return result\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
partition = context
si = partition.getAggregateRelatedValue(portal_type=["Software Instance", "Slave Instance"])
if si:
person = si.getSpecialiseValue().getDestinationSectionValue()
return '<a href="%s?editable_mode:int=1">%s</a>' % (person.getRelativeUrl(), person.getTitle())
...@@ -48,20 +48,6 @@ ...@@ -48,20 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
partition = context\n
\n
si = partition.getAggregateRelatedValue(portal_type=["Software Instance", "Slave Instance"])\n
if si:\n
person = si.getSpecialiseValue().getDestinationSectionValue()\n
return \'<a href="%s?editable_mode:int=1">%s</a>\' % (person.getRelativeUrl(), person.getTitle())\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
partition = context
portal = context.getPortalObject()
image_url = ""
software_instance = partition.getAggregateRelatedValue(portal_type="Software Instance")
release = portal.portal_catalog.getResultValue(
portal_type="Software Release",
url_string=software_instance.getUrlString(),
)
if release is not None:
software_product = release.getAggregateValue()
image_url = '%s/index_html' % software_product.getDefaultImageAbsoluteUrl()
return image_url
...@@ -48,25 +48,6 @@ ...@@ -48,25 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>partition = context\n
portal = context.getPortalObject()\n
image_url = ""\n
\n
software_instance = partition.getAggregateRelatedValue(portal_type="Software Instance")\n
\n
release = portal.portal_catalog.getResultValue(\n
portal_type="Software Release",\n
url_string=software_instance.getUrlString(),\n
)\n
if release is not None:\n
software_product = release.getAggregateValue()\n
image_url = \'%s/index_html\' % software_product.getDefaultImageAbsoluteUrl()\n
\n
return image_url\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
from DateTime import DateTime
partition = context
software_instance = partition.getAggregateRelatedValueList(portal_type=["Software Instance", "Slave Instance"])[0].getObject()
date = DateTime(software_instance.getCreationDate())
return date.strftime('%Y/%m/%d %H:%M')
...@@ -48,17 +48,6 @@ ...@@ -48,17 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from DateTime import DateTime\n
\n
partition = context\n
\n
software_instance = partition.getAggregateRelatedValueList(portal_type=["Software Instance", "Slave Instance"])[0].getObject()\n
date = DateTime(software_instance.getCreationDate())\n
return date.strftime(\'%Y/%m/%d %H:%M\')\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
software_instance = context.getAggregateRelatedValue(portal_type='Software Instance')
status = ""
state = 'green'
if software_instance is not None:
status = software_instance.SoftwareInstance_getCurrentStatus()
if status.startswith('#error '):
state = "red"
return '<a href="%s" style="background-color: %s; display: block; height: 2em; width: 2em; float: left; margin: 5px;"></a> ' \
'<p style="float: left; line-height: 10px; margin-left: 10px;">%s</p>' % (
software_instance.getUrl(), state, status)
...@@ -48,27 +48,6 @@ ...@@ -48,27 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
software_instance = context.getAggregateRelatedValue(portal_type=\'Software Instance\')\n
\n
status = ""\n
state = \'green\'\n
if software_instance is not None:\n
status = software_instance.SoftwareInstance_getCurrentStatus()\n
\n
if status.startswith(\'#error \'):\n
state = "red"\n
\n
return \'<a href="%s" style="background-color: %s; display: block; height: 2em; width: 2em; float: left; margin: 5px;"></a> \' \\\n
\'<p style="float: left; line-height: 10px; margin-left: 10px;">%s</p>\' % (\n
software_instance.getUrl(), state, status)\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
instance = context.getPortalObject().portal_catalog.getResultValue(
portal_type="Software Instance",
validation_state="validated",
default_aggregate_uid=context.getUid(),
)
if (instance is None) or (instance.getSlapState() != "start_requested"):
return ""
else:
return instance.getSourceReference()
...@@ -48,19 +48,6 @@ ...@@ -48,19 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = context.getPortalObject().portal_catalog.getResultValue(\n
portal_type="Software Instance",\n
validation_state="validated",\n
default_aggregate_uid=context.getUid(),\n
)\n
if (instance is None) or (instance.getSlapState() != "start_requested"):\n
return ""\n
else:\n
return instance.getSourceReference()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
...@@ -48,11 +48,6 @@ ...@@ -48,11 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>return context.absolute_url() + \'/Item_viewTrackingList?current:int=0\'\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
if context.getPortalObject().portal_workflow.isTransitionPossible(context, 'mark_busy') and context.getParentValue().isMemberOf('allocation_scope/open'):
return 1
return 0
...@@ -48,13 +48,6 @@ ...@@ -48,13 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>if context.getPortalObject().portal_workflow.isTransitionPossible(context, \'mark_busy\') and context.getParentValue().isMemberOf(\'allocation_scope/open\'):\n
return 1\n
return 0\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
computer = context
Base_translateString = context.Base_translateString
computer_model_portal_type = 'Computer Model'
computer_model = computer.getSpecialiseValue(
portal_type=computer_model_portal_type)
if computer_model is None:
message = Base_translateString('No Computer Model.')
result = False
else :
category_list = [
'cpu_core',
'cpu_frequency',
'cpu_type',
'function',
'group',
'local_area_network_type',
'memory_size',
'memory_type',
'role',
'region',
'storage_capacity',
'storage_interface',
'storage_redundancy',
'wide_area_network_type',
]
property_list = [
'capacity_quantity'
]
new_category_dict = {}
for category in category_list:
if force or not computer.getPropertyList(category):
v = computer_model.getPropertyList(category)
if v:
new_category_dict[category] = v
for property in property_list:
if force or not computer.getProperty(property):
v = computer_model.getProperty(property)
if v:
new_category_dict[property] = v
if new_category_dict:
computer.edit(**new_category_dict)
message = Base_translateString('Computer Model applied.')
result = True
else:
message = Base_translateString('No changes applied.')
result = False
if not batch_mode:
return context.Base_redirect(form_id,
keep_items=dict(portal_status_message=message))
else:
return result
...@@ -48,68 +48,6 @@ ...@@ -48,68 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = context\n
Base_translateString = context.Base_translateString\n
computer_model_portal_type = \'Computer Model\'\n
\n
computer_model = computer.getSpecialiseValue(\n
portal_type=computer_model_portal_type)\n
\n
if computer_model is None:\n
message = Base_translateString(\'No Computer Model.\')\n
result = False\n
else :\n
category_list = [\n
\'cpu_core\',\n
\'cpu_frequency\',\n
\'cpu_type\',\n
\'function\',\n
\'group\',\n
\'local_area_network_type\',\n
\'memory_size\',\n
\'memory_type\',\n
\'role\',\n
\'region\',\n
\'storage_capacity\',\n
\'storage_interface\',\n
\'storage_redundancy\',\n
\'wide_area_network_type\',\n
]\n
\n
property_list = [\n
\'capacity_quantity\'\n
]\n
\n
new_category_dict = {}\n
for category in category_list:\n
if force or not computer.getPropertyList(category):\n
v = computer_model.getPropertyList(category)\n
if v:\n
new_category_dict[category] = v\n
\n
for property in property_list:\n
if force or not computer.getProperty(property):\n
v = computer_model.getProperty(property)\n
if v:\n
new_category_dict[property] = v\n
\n
if new_category_dict:\n
computer.edit(**new_category_dict)\n
message = Base_translateString(\'Computer Model applied.\')\n
result = True\n
else:\n
message = Base_translateString(\'No changes applied.\')\n
result = False\n
\n
if not batch_mode:\n
return context.Base_redirect(form_id,\n
keep_items=dict(portal_status_message=message))\n
else:\n
return result\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>form_id=\'view\', batch_mode=0, force=0</string> </value> <value> <string>form_id=\'view\', batch_mode=0, force=0</string> </value>
......
import json
computer = context
portal = context.getPortalObject()
if computer.getAllocationScope() != 'open/public':
# Don't update non public computer
return
can_allocate = True
comment = ''
# First and simple way to see if computer is dead
# modification_date = portal.portal_workflow.getInfoFor(computer, 'time', wf_id='edit_workflow')
# if (DateTime() - modification_date) > 1:
# # Computer didn't talk to vifib for 1 days, do not consider it as a trustable public server for now
# # slapformat is supposed to run at least once per day
# can_allocate = False
# comment = "Computer didn't contact the server for more than one day"
if can_allocate:
# Check if computer has error reported
memcached_dict = portal.portal_memcached.getMemcachedDict(
key_prefix='slap_tool',
plugin_path='portal_memcached/default_memcached_plugin')
try:
d = memcached_dict[computer.getReference()]
except KeyError:
can_allocate = False
comment = "Computer didn't contact the server"
else:
log_dict = json.loads(d)
if '#error' in log_dict.get('text', '#error'):
can_allocate = False
comment = 'Computer reported an error'
# XXX TODO: compare creation date of #ok message
elif int(DateTime()) - int(DateTime(log_dict.get('created_at'))) > 600:
can_allocate = False
comment = "Computer didn't contact for more than 10 minutes"
if can_allocate:
# Check the computer capacity.
# there is a arbitrary hardcoded default value: not more than 1000000 (!) instances on
# a computer.
default_maximum_value = 1000000
computer_capacity_quantity = computer.getCapacityQuantity(default_maximum_value)
if computer_capacity_quantity == default_maximum_value:
# Verify if Computer Model defines it:
computer_model = computer.getSpecialiseValue(portal_type='Computer Model')
if computer_model is not None:
computer_capacity_quantity = computer_model.getCapacityQuantity(default_maximum_value)
# The update the computer with the initial value.
if computer_capacity_quantity != default_maximum_value:
computer.edit(capacity_quantity=computer_capacity_quantity)
software_release_capacity_dict = {}
consumed_capacity = 0
for instance in portal.portal_catalog.portal_catalog(
default_aggregate_relative_url='%s/%%' % computer.getRelativeUrl(),
portal_type=['Software Instance', 'Slave Instance'],
validation_state='validated'):
instance = instance.getObject()
software_release_url = instance.getUrlString()
if software_release_url in software_release_capacity_dict:
software_release_capacity = software_release_capacity_dict[software_release_url]
else:
software_release = portal.portal_catalog.getResultValue(
portal_type='Software Release',
url_string={'query': software_release_url, 'key': 'ExactMatch'})
if software_release is not None:
software_release_capacity = software_release.getCapacityQuantity(1)
else:
software_release_capacity = 1
software_release_capacity_dict[software_release_url] = software_release_capacity
consumed_capacity += software_release_capacity
if consumed_capacity >= computer_capacity_quantity:
can_allocate = False
comment = 'Computer capacity limit exceeded'
break
# if can_allocate:
# result_list = portal.portal_catalog.portal_catalog(
# parent_uid=computer.getUid(),
# portal_type='Computer Partition',
# free_for_request=1,
# limit=1)
# if len(result_list) == 0:
# can_allocate = False
# comment = 'No free partition left'
new_value = None
if can_allocate:
if computer.getCapacityScope() == 'close':
new_value = 'open'
else:
if computer.getCapacityScope() == 'open':
new_value = 'close'
if new_value is not None:
computer.edit(capacity_scope=new_value)
if comment:
portal.portal_workflow.doActionFor(computer, 'edit_action', comment=comment)
...@@ -48,119 +48,6 @@ ...@@ -48,119 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
import json\n
computer = context\n
portal = context.getPortalObject()\n
\n
if computer.getAllocationScope() != \'open/public\':\n
# Don\'t update non public computer\n
return\n
\n
can_allocate = True\n
comment = \'\'\n
\n
# First and simple way to see if computer is dead\n
# modification_date = portal.portal_workflow.getInfoFor(computer, \'time\', wf_id=\'edit_workflow\')\n
# if (DateTime() - modification_date) > 1:\n
# # Computer didn\'t talk to vifib for 1 days, do not consider it as a trustable public server for now\n
# # slapformat is supposed to run at least once per day\n
# can_allocate = False\n
# comment = "Computer didn\'t contact the server for more than one day"\n
\n
if can_allocate:\n
# Check if computer has error reported\n
memcached_dict = portal.portal_memcached.getMemcachedDict(\n
key_prefix=\'slap_tool\',\n
plugin_path=\'portal_memcached/default_memcached_plugin\')\n
try:\n
d = memcached_dict[computer.getReference()]\n
except KeyError:\n
can_allocate = False\n
comment = "Computer didn\'t contact the server"\n
else:\n
log_dict = json.loads(d)\n
if \'#error\' in log_dict.get(\'text\', \'#error\'):\n
can_allocate = False\n
comment = \'Computer reported an error\'\n
# XXX TODO: compare creation date of #ok message\n
elif int(DateTime()) - int(DateTime(log_dict.get(\'created_at\'))) > 600:\n
can_allocate = False\n
comment = "Computer didn\'t contact for more than 10 minutes"\n
\n
if can_allocate:\n
# Check the computer capacity.\n
# there is a arbitrary hardcoded default value: not more than 1000000 (!) instances on\n
# a computer.\n
default_maximum_value = 1000000\n
computer_capacity_quantity = computer.getCapacityQuantity(default_maximum_value)\n
if computer_capacity_quantity == default_maximum_value:\n
# Verify if Computer Model defines it:\n
computer_model = computer.getSpecialiseValue(portal_type=\'Computer Model\')\n
if computer_model is not None:\n
computer_capacity_quantity = computer_model.getCapacityQuantity(default_maximum_value)\n
\n
# The update the computer with the initial value.\n
if computer_capacity_quantity != default_maximum_value:\n
computer.edit(capacity_quantity=computer_capacity_quantity)\n
\n
software_release_capacity_dict = {}\n
consumed_capacity = 0\n
\n
for instance in portal.portal_catalog.portal_catalog(\n
default_aggregate_relative_url=\'%s/%%\' % computer.getRelativeUrl(),\n
portal_type=[\'Software Instance\', \'Slave Instance\'],\n
validation_state=\'validated\'):\n
\n
instance = instance.getObject()\n
\n
software_release_url = instance.getUrlString()\n
if software_release_url in software_release_capacity_dict:\n
software_release_capacity = software_release_capacity_dict[software_release_url]\n
else:\n
software_release = portal.portal_catalog.getResultValue(\n
portal_type=\'Software Release\',\n
url_string={\'query\': software_release_url, \'key\': \'ExactMatch\'})\n
if software_release is not None:\n
software_release_capacity = software_release.getCapacityQuantity(1)\n
else:\n
software_release_capacity = 1\n
software_release_capacity_dict[software_release_url] = software_release_capacity\n
consumed_capacity += software_release_capacity\n
if consumed_capacity >= computer_capacity_quantity:\n
can_allocate = False\n
comment = \'Computer capacity limit exceeded\'\n
break\n
\n
# if can_allocate:\n
# result_list = portal.portal_catalog.portal_catalog(\n
# parent_uid=computer.getUid(),\n
# portal_type=\'Computer Partition\',\n
# free_for_request=1,\n
# limit=1)\n
# if len(result_list) == 0:\n
# can_allocate = False\n
# comment = \'No free partition left\'\n
\n
new_value = None\n
if can_allocate:\n
if computer.getCapacityScope() == \'close\':\n
new_value = \'open\'\n
else:\n
if computer.getCapacityScope() == \'open\':\n
new_value = \'close\'\n
\n
if new_value is not None:\n
computer.edit(capacity_scope=new_value)\n
if comment:\n
portal.portal_workflow.doActionFor(computer, \'edit_action\', comment=comment)\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
return [x for x in context.contentValues(**kw) if x.getSlapState() == 'busy']
...@@ -48,11 +48,6 @@ ...@@ -48,11 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>return [x for x in context.contentValues(**kw) if x.getSlapState() == \'busy\']\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
"""Fetch computer to find witch software is installed"""
portal = context.getPortalObject()
portal_type = "Software Release"
url_string_list = context.Computer_getSoftwareReleaseUrlStringList()
if url_string_list:
return context.portal_catalog(
portal_type=portal_type,
url_string=url_string_list)
else:
return []
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>"""Fetch computer to find witch software is installed"""\n
portal = context.getPortalObject()\n
portal_type = "Software Release"\n
\n
url_string_list = context.Computer_getSoftwareReleaseUrlStringList()\n
if url_string_list:\n
return context.portal_catalog(\n
portal_type=portal_type,\n
url_string=url_string_list)\n
else:\n
return []\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
computer = context
portal = context.getPortalObject()
software_installation_list = portal.portal_catalog(
portal_type='Software Installation',
default_aggregate_uid=context.getUid(),
validation_state='validated',
limit=1,
url_string={'query': portal.portal_catalog.getResultValue(uid=software_release_uid).getUrlString(), 'key': 'ExactMatch'},
sort_on=(('creation_date', 'DESC'),)
)
if len(software_installation_list) == 0:
return 'Destroyed'
software_installation = software_installation_list[0].getObject()
s = software_installation.getSlapState()
if s == 'start_requested':
return 'Installation requested'
else:
return 'Destruction requested'
...@@ -48,32 +48,6 @@ ...@@ -48,32 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = context\n
portal = context.getPortalObject()\n
\n
software_installation_list = portal.portal_catalog(\n
portal_type=\'Software Installation\',\n
default_aggregate_uid=context.getUid(),\n
validation_state=\'validated\',\n
limit=1,\n
url_string={\'query\': portal.portal_catalog.getResultValue(uid=software_release_uid).getUrlString(), \'key\': \'ExactMatch\'},\n
sort_on=((\'creation_date\', \'DESC\'),)\n
)\n
\n
if len(software_installation_list) == 0:\n
return \'Destroyed\' \n
\n
software_installation = software_installation_list[0].getObject()\n
\n
s = software_installation.getSlapState()\n
if s == \'start_requested\':\n
return \'Installation requested\'\n
else:\n
return \'Destruction requested\'\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>software_release_uid</string> </value> <value> <string>software_release_uid</string> </value>
......
url_string_list = []
for software_installation in context.getPortalObject().portal_catalog(
portal_type='Software Installation',
validation_state='validated',
default_aggregate_uid=context.getUid()
):
if software_installation.getSlapState() == 'start_requested':
url_string = software_installation.getUrlString()
if url_string:
url_string_list.append(url_string)
return url_string_list
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>url_string_list = []\n
for software_installation in context.getPortalObject().portal_catalog(\n
portal_type=\'Software Installation\',\n
validation_state=\'validated\',\n
default_aggregate_uid=context.getUid()\n
):\n
if software_installation.getSlapState() == \'start_requested\':\n
url_string = software_installation.getUrlString()\n
if url_string:\n
url_string_list.append(url_string)\n
return url_string_list\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery
portal = context.getPortalObject()
computer = context
return portal.portal_catalog.countResults(
portal_type='Computer Partition',
parent_uid=computer.getUid(),
free_for_request=0,
software_release_url=portal.portal_catalog.getResultValue(uid=software_release_uid).getUrlString()
)[0][0]
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery\n
portal = context.getPortalObject()\n
\n
computer = context\n
\n
return portal.portal_catalog.countResults(\n
portal_type=\'Computer Partition\',\n
parent_uid=computer.getUid(),\n
free_for_request=0,\n
software_release_url=portal.portal_catalog.getResultValue(uid=software_release_uid).getUrlString()\n
)[0][0]\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>software_release_uid</string> </value> <value> <string>software_release_uid</string> </value>
......
...@@ -48,11 +48,6 @@ ...@@ -48,11 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>return context.absolute_url() + \'/Computer_viewCurrentUsage\'\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
if context.getPortalType() != 'Hosting Subscription' \
or context.getValidationState() != 'validated' \
or context.getSlapState() not in ['start_requested', 'stop_requested'] \
or context.getTitle() in context.getPredecessorTitleList():
# nothing to do
return
context.requestInstance(
software_release=context.getUrlString(),
software_title=context.getTitle(),
software_type=context.getSourceReference(),
instance_xml=context.getTextContent(),
sla_xml=context.getSlaXml(),
shared=context.isRootSlave(),
state={'start_requested': 'started', 'stop_requested': 'stopped'}[context.getSlapState()],
)
...@@ -48,26 +48,6 @@ ...@@ -48,26 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>if context.getPortalType() != \'Hosting Subscription\' \\\n
or context.getValidationState() != \'validated\' \\\n
or context.getSlapState() not in [\'start_requested\', \'stop_requested\'] \\\n
or context.getTitle() in context.getPredecessorTitleList():\n
# nothing to do\n
return\n
\n
context.requestInstance(\n
software_release=context.getUrlString(),\n
software_title=context.getTitle(),\n
software_type=context.getSourceReference(),\n
instance_xml=context.getTextContent(),\n
sla_xml=context.getSlaXml(),\n
shared=context.isRootSlave(),\n
state={\'start_requested\': \'started\', \'stop_requested\': \'stopped\'}[context.getSlapState()],\n
)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
instance = context
if (instance.getSlapState() != "destroy_requested"):
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")
if (hosting_subscription.getValidationState() == "archived"):
# Buildout didn't propagate the destruction request
requester = instance.getPredecessorRelatedValue()
if (instance.getRelativeUrl() in requester.getPredecessorList()) and \
(requester.getSlapState() == "destroy_requested"):
# For security, only destroyed if parent is also destroyed
if instance.getPortalType() == 'Software Instance':
is_slave = False
elif instance.getPortalType() == 'Slave Instance':
is_slave = True
else:
raise NotImplementedError, "Unknown portal type %s of %s" % \
(instance.getPortalType(), instance.getRelativeUrl())
requester.requestInstance(
software_release=instance.getUrlString(),
software_title=instance.getTitle(),
software_type=instance.getSourceReference(),
instance_xml=instance.getTextContent(),
sla_xml=instance.getSlaXml(),
shared=is_slave,
state="destroyed",
comment="Garbage collect %s" % instance.getRelativeUrl()
)
...@@ -48,39 +48,6 @@ ...@@ -48,39 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = context\n
\n
if (instance.getSlapState() != "destroy_requested"):\n
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")\n
if (hosting_subscription.getValidationState() == "archived"):\n
# Buildout didn\'t propagate the destruction request\n
requester = instance.getPredecessorRelatedValue()\n
if (instance.getRelativeUrl() in requester.getPredecessorList()) and \\\n
(requester.getSlapState() == "destroy_requested"):\n
# For security, only destroyed if parent is also destroyed\n
\n
if instance.getPortalType() == \'Software Instance\':\n
is_slave = False\n
elif instance.getPortalType() == \'Slave Instance\':\n
is_slave = True\n
else:\n
raise NotImplementedError, "Unknown portal type %s of %s" % \\\n
(instance.getPortalType(), instance.getRelativeUrl())\n
\n
requester.requestInstance(\n
software_release=instance.getUrlString(),\n
software_title=instance.getTitle(),\n
software_type=instance.getSourceReference(),\n
instance_xml=instance.getTextContent(),\n
sla_xml=instance.getSlaXml(),\n
shared=is_slave,\n
state="destroyed",\n
comment="Garbage collect %s" % instance.getRelativeUrl()\n
)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
from zExceptions import Unauthorized
if REQUEST is not None:
raise Unauthorized
instance = context
portal = context.getPortalObject()
if instance.getValidationState() != 'validated' \
or instance.getSlapState() not in ('start_requested', 'stop_requested') \
or instance.getAggregateValue(portal_type='Computer Partition') is not None:
return
latest_comment = portal.portal_workflow.getInfoFor(instance, 'comment', wf_id='edit_workflow')
if latest_comment != 'Allocation failed: no free Computer Partition':
# No nothing if allocation alarm didn't run on it
return
latest_edit_time = portal.portal_workflow.getInfoFor(instance, 'time', wf_id='edit_workflow')
if (int(DateTime()) - int(latest_edit_time)) < 259200:
# Allow 3 days gap betweeb latest allocation try and deletion
return
# Only destroy if the instance is the only one in the tree
hosting_subscription = instance.getSpecialiseValue("Hosting Subscription")
if (hosting_subscription.getPredecessor() != instance.getRelativeUrl()):
return
if (len(hosting_subscription.getPredecessorList()) != 1):
return
instance_list = portal.portal_catalog(
portal_type=["Software Instance", "Slave Instance"],
default_specialise_uid=hosting_subscription.getUid(),
limit=2)
if len(instance_list) != 1:
return
# OK, destroy hosting subscription
hosting_subscription.requestDestroy(
software_release=hosting_subscription.getUrlString(),
software_title=hosting_subscription.getTitle(),
software_type=hosting_subscription.getSourceReference(),
instance_xml=hosting_subscription.getTextContent(),
sla_xml=hosting_subscription.getSlaXml(),
shared=hosting_subscription.isRootSlave(),
state='destroyed',
comment="Garbage collect %s not allocated for more than 3 days" % instance.getRelativeUrl(),
)
hosting_subscription.archive()
...@@ -48,61 +48,6 @@ ...@@ -48,61 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
from zExceptions import Unauthorized\n
if REQUEST is not None:\n
raise Unauthorized\n
\n
instance = context\n
portal = context.getPortalObject()\n
\n
if instance.getValidationState() != \'validated\' \\\n
or instance.getSlapState() not in (\'start_requested\', \'stop_requested\') \\\n
or instance.getAggregateValue(portal_type=\'Computer Partition\') is not None:\n
return\n
\n
latest_comment = portal.portal_workflow.getInfoFor(instance, \'comment\', wf_id=\'edit_workflow\')\n
if latest_comment != \'Allocation failed: no free Computer Partition\':\n
# No nothing if allocation alarm didn\'t run on it\n
return\n
\n
latest_edit_time = portal.portal_workflow.getInfoFor(instance, \'time\', wf_id=\'edit_workflow\')\n
if (int(DateTime()) - int(latest_edit_time)) < 259200:\n
# Allow 3 days gap betweeb latest allocation try and deletion\n
return\n
\n
# Only destroy if the instance is the only one in the tree\n
hosting_subscription = instance.getSpecialiseValue("Hosting Subscription")\n
if (hosting_subscription.getPredecessor() != instance.getRelativeUrl()):\n
return\n
if (len(hosting_subscription.getPredecessorList()) != 1):\n
return\n
instance_list = portal.portal_catalog(\n
portal_type=["Software Instance", "Slave Instance"],\n
default_specialise_uid=hosting_subscription.getUid(),\n
limit=2)\n
if len(instance_list) != 1:\n
return\n
\n
# OK, destroy hosting subscription\n
hosting_subscription.requestDestroy(\n
software_release=hosting_subscription.getUrlString(),\n
software_title=hosting_subscription.getTitle(),\n
software_type=hosting_subscription.getSourceReference(),\n
instance_xml=hosting_subscription.getTextContent(),\n
sla_xml=hosting_subscription.getSlaXml(),\n
shared=hosting_subscription.isRootSlave(),\n
state=\'destroyed\',\n
comment="Garbage collect %s not allocated for more than 3 days" % instance.getRelativeUrl(),\n
)\n
hosting_subscription.archive()\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>REQUEST=None</string> </value> <value> <string>REQUEST=None</string> </value>
......
from zExceptions import Unauthorized
if REQUEST is not None:
raise Unauthorized
instance = context
if (instance.getSlapState() == "start_requested"):
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")
if (hosting_subscription.getSlapState() == "stop_requested"):
# Buildout may not propagate the stop request
requester = instance.getPredecessorRelatedValue()
if (instance.getRelativeUrl() in requester.getPredecessorList()) and \
(requester.getSlapState() == "stop_requested"):
# For security, only stop if parent is also stopped
if instance.getPortalType() == 'Software Instance':
is_slave = False
elif instance.getPortalType() == 'Slave Instance':
is_slave = True
else:
raise NotImplementedError, "Unknown portal type %s of %s" % \
(instance.getPortalType(), instance.getRelativeUrl())
requester.requestInstance(
software_release=instance.getUrlString(),
software_title=instance.getTitle(),
software_type=instance.getSourceReference(),
instance_xml=instance.getTextContent(),
sla_xml=instance.getSlaXml(),
shared=is_slave,
state="stopped",
comment="Stop collect %s" % instance.getRelativeUrl()
)
...@@ -48,43 +48,6 @@ ...@@ -48,43 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from zExceptions import Unauthorized\n
if REQUEST is not None:\n
raise Unauthorized\n
\n
instance = context\n
\n
if (instance.getSlapState() == "start_requested"):\n
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")\n
if (hosting_subscription.getSlapState() == "stop_requested"):\n
# Buildout may not propagate the stop request\n
requester = instance.getPredecessorRelatedValue()\n
if (instance.getRelativeUrl() in requester.getPredecessorList()) and \\\n
(requester.getSlapState() == "stop_requested"):\n
# For security, only stop if parent is also stopped\n
\n
if instance.getPortalType() == \'Software Instance\':\n
is_slave = False\n
elif instance.getPortalType() == \'Slave Instance\':\n
is_slave = True\n
else:\n
raise NotImplementedError, "Unknown portal type %s of %s" % \\\n
(instance.getPortalType(), instance.getRelativeUrl())\n
\n
requester.requestInstance(\n
software_release=instance.getUrlString(),\n
software_title=instance.getTitle(),\n
software_type=instance.getSourceReference(),\n
instance_xml=instance.getTextContent(),\n
sla_xml=instance.getSlaXml(),\n
shared=is_slave,\n
state="stopped",\n
comment="Stop collect %s" % instance.getRelativeUrl()\n
)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>REQUEST=None</string> </value> <value> <string>REQUEST=None</string> </value>
......
instance = context
if instance.getSlapState() != 'destroy_requested':
return
partition = instance.getAggregateValue(portal_type="Computer Partition")
portal = instance.getPortalObject()
if partition is not None:
# Partition may be managed by another instance at the same time
# Prevent creating two instances with the same title
tag = "allocate_%s" % partition.getRelativeUrl()
if (portal.portal_activities.countMessageWithTag(tag) == 0):
# No concurrency issue
instance.unallocatePartition()
instance_sql_list = portal.portal_catalog(
portal_type=["Software Instance", "Slave Instance"],
default_aggregate_uid=partition.getUid(),
)
count = len(instance_sql_list)
if count == 0:
# Current instance should at least be cataloggued
pass
else:
can_be_free = True
for instance_sql in instance_sql_list:
new_instance = instance_sql.getObject()
if new_instance.getAggregateValue(portal_type="Computer Partition") is not None:
can_be_free = False
break
if can_be_free:
partition.markFree()
...@@ -48,40 +48,6 @@ ...@@ -48,40 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = context\n
if instance.getSlapState() != \'destroy_requested\':\n
return\n
\n
partition = instance.getAggregateValue(portal_type="Computer Partition")\n
portal = instance.getPortalObject()\n
if partition is not None:\n
# Partition may be managed by another instance at the same time\n
# Prevent creating two instances with the same title\n
tag = "allocate_%s" % partition.getRelativeUrl()\n
if (portal.portal_activities.countMessageWithTag(tag) == 0):\n
# No concurrency issue\n
instance.unallocatePartition()\n
instance_sql_list = portal.portal_catalog(\n
portal_type=["Software Instance", "Slave Instance"],\n
default_aggregate_uid=partition.getUid(),\n
)\n
count = len(instance_sql_list)\n
if count == 0:\n
# Current instance should at least be cataloggued\n
pass\n
else:\n
can_be_free = True\n
for instance_sql in instance_sql_list:\n
new_instance = instance_sql.getObject()\n
if new_instance.getAggregateValue(portal_type="Computer Partition") is not None:\n
can_be_free = False\n
break\n
if can_be_free:\n
partition.markFree()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
import random
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
person = context
computer_partition = None
filter_kw_copy = filter_kw.copy()
query_kw = {
'software_release_url': software_release_url,
'portal_type': 'Computer Partition',
}
if software_instance_portal_type == "Slave Instance":
query_kw['free_for_request'] = 0
query_kw['software_type'] = software_type
elif software_instance_portal_type == "Software Instance":
query_kw['free_for_request'] = 1
else:
raise NotImplementedError("Unknown portal type %s"%
software_instance_portal_type)
# support SLA
# Explicit location
explicit_location = False
if "computer_guid" in filter_kw:
explicit_location = True
query_kw["parent_reference"] = SimpleQuery(parent_reference=filter_kw.pop("computer_guid"))
if "instance_guid" in filter_kw:
explicit_location = True
portal = context.getPortalObject()
instance_guid = filter_kw.pop("instance_guid")
query_kw["aggregate_related_reference"] = SimpleQuery(aggregate_related_reference=instance_guid)
if 'network_guid' in filter_kw:
network_guid = filter_kw.pop('network_guid')
query_kw["default_subordination_reference"] = SimpleQuery(default_subordination_reference=network_guid)
if computer_network_query:
if query_kw.get("default_subordination_reference"):
query_kw["default_subordination_reference"] = ComplexQuery(
query_kw["default_subordination_reference"],
computer_network_query
)
else:
query_kw["default_subordination_reference"] = computer_network_query
if "retention_delay" in filter_kw:
filter_kw.pop("retention_delay")
computer_base_category_list = [
'group',
'cpu_core',
'cpu_frequency',
'cpu_type',
'local_area_network_type',
'region',
'memory_size',
'memory_type',
'storage_capacity',
'storage_interface',
'storage_redundancy',
]
for base_category in computer_base_category_list:
if base_category in filter_kw:
category_relative_url = "%s" % filter_kw.pop(base_category)
# XXX Small protection to prevent entering strange strings
category = context.getPortalObject().portal_categories[base_category].restrictedTraverse(str(category_relative_url), None)
if category is None:
query_kw["uid"] = "-1"
else:
query_kw["%s_uid" % base_category] = category.getUid()
query_kw["capacity_scope_uid"] = context.getPortalObject().portal_categories.capacity_scope.open.getUid()
# if not explicit_location:
# # Only allocation on public computer
# query_kw["allocation_scope_uid"] = context.getPortalObject().portal_categories.allocation_scope.open.public.getUid()
extra_query_kw = context.ComputerPartition_getCustomAllocationParameterDict(
software_release_url, software_type, software_instance_portal_type,
filter_kw_copy, computer_network_query, test_mode)
if extra_query_kw:
query_kw.update(extra_query_kw)
if filter_kw.keys():
# XXX Drop all unexpected keys
query_kw["uid"] = "-1"
if test_mode:
return bool(len(context.portal_catalog(limit=1, **query_kw)))
SQL_WINDOW_SIZE = 50
# fetch at mot 50 random Computer Partitions, and check if they are ok
isTransitionPossible = person.getPortalObject().portal_workflow.isTransitionPossible
result_count = person.portal_catalog.countResults(**query_kw)[0][0]
offset = max(0, result_count-1)
if offset >= SQL_WINDOW_SIZE:
limit = (random.randint(0, offset), SQL_WINDOW_SIZE)
else:
limit = (0, SQL_WINDOW_SIZE)
for computer_partition_candidate in context.portal_catalog(
limit=limit, **query_kw):
computer_partition_candidate = computer_partition_candidate.getObject()
if software_instance_portal_type == "Software Instance":
# Check if the computer partition can be marked as busy
if isTransitionPossible(computer_partition_candidate, 'mark_busy'):
computer_partition = computer_partition_candidate
computer_partition.markBusy()
break
elif computer_partition_candidate.getSlapState() == "busy":
# Only assign slave instance on busy partition
computer_partition = computer_partition_candidate
break
if computer_partition is None:
raise ValueError('It was not possible to find free Computer Partition')
# lock computer partition
computer_partition.serialize()
return computer_partition.getRelativeUrl()
...@@ -48,136 +48,6 @@ ...@@ -48,136 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
import random\n
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery\n
person = context\n
\n
computer_partition = None\n
filter_kw_copy = filter_kw.copy()\n
query_kw = {\n
\'software_release_url\': software_release_url,\n
\'portal_type\': \'Computer Partition\',\n
}\n
if software_instance_portal_type == "Slave Instance":\n
query_kw[\'free_for_request\'] = 0\n
query_kw[\'software_type\'] = software_type\n
elif software_instance_portal_type == "Software Instance":\n
query_kw[\'free_for_request\'] = 1\n
else:\n
raise NotImplementedError("Unknown portal type %s"%\n
software_instance_portal_type)\n
\n
# support SLA\n
\n
# Explicit location\n
explicit_location = False\n
if "computer_guid" in filter_kw:\n
explicit_location = True\n
query_kw["parent_reference"] = SimpleQuery(parent_reference=filter_kw.pop("computer_guid"))\n
\n
if "instance_guid" in filter_kw:\n
explicit_location = True\n
portal = context.getPortalObject()\n
instance_guid = filter_kw.pop("instance_guid")\n
query_kw["aggregate_related_reference"] = SimpleQuery(aggregate_related_reference=instance_guid)\n
\n
if \'network_guid\' in filter_kw:\n
network_guid = filter_kw.pop(\'network_guid\')\n
query_kw["default_subordination_reference"] = SimpleQuery(default_subordination_reference=network_guid)\n
\n
if computer_network_query:\n
if query_kw.get("default_subordination_reference"):\n
query_kw["default_subordination_reference"] = ComplexQuery(\n
query_kw["default_subordination_reference"],\n
computer_network_query\n
)\n
else:\n
query_kw["default_subordination_reference"] = computer_network_query\n
\n
if "retention_delay" in filter_kw:\n
filter_kw.pop("retention_delay")\n
\n
computer_base_category_list = [\n
\'group\',\n
\'cpu_core\',\n
\'cpu_frequency\',\n
\'cpu_type\',\n
\'local_area_network_type\',\n
\'region\',\n
\'memory_size\',\n
\'memory_type\',\n
\'storage_capacity\',\n
\'storage_interface\',\n
\'storage_redundancy\',\n
]\n
for base_category in computer_base_category_list:\n
if base_category in filter_kw:\n
category_relative_url = "%s" % filter_kw.pop(base_category)\n
# XXX Small protection to prevent entering strange strings\n
category = context.getPortalObject().portal_categories[base_category].restrictedTraverse(str(category_relative_url), None)\n
if category is None:\n
query_kw["uid"] = "-1"\n
else:\n
query_kw["%s_uid" % base_category] = category.getUid()\n
\n
query_kw["capacity_scope_uid"] = context.getPortalObject().portal_categories.capacity_scope.open.getUid()\n
# if not explicit_location:\n
# # Only allocation on public computer\n
# query_kw["allocation_scope_uid"] = context.getPortalObject().portal_categories.allocation_scope.open.public.getUid()\n
\n
extra_query_kw = context.ComputerPartition_getCustomAllocationParameterDict(\n
software_release_url, software_type, software_instance_portal_type,\n
filter_kw_copy, computer_network_query, test_mode)\n
if extra_query_kw:\n
query_kw.update(extra_query_kw)\n
\n
if filter_kw.keys():\n
# XXX Drop all unexpected keys\n
query_kw["uid"] = "-1"\n
\n
if test_mode:\n
return bool(len(context.portal_catalog(limit=1, **query_kw)))\n
\n
SQL_WINDOW_SIZE = 50\n
\n
# fetch at mot 50 random Computer Partitions, and check if they are ok\n
isTransitionPossible = person.getPortalObject().portal_workflow.isTransitionPossible\n
result_count = person.portal_catalog.countResults(**query_kw)[0][0]\n
offset = max(0, result_count-1)\n
if offset >= SQL_WINDOW_SIZE:\n
limit = (random.randint(0, offset), SQL_WINDOW_SIZE)\n
else:\n
limit = (0, SQL_WINDOW_SIZE)\n
\n
for computer_partition_candidate in context.portal_catalog(\n
limit=limit, **query_kw):\n
computer_partition_candidate = computer_partition_candidate.getObject()\n
if software_instance_portal_type == "Software Instance":\n
# Check if the computer partition can be marked as busy\n
if isTransitionPossible(computer_partition_candidate, \'mark_busy\'):\n
computer_partition = computer_partition_candidate\n
computer_partition.markBusy()\n
break\n
elif computer_partition_candidate.getSlapState() == "busy":\n
# Only assign slave instance on busy partition\n
computer_partition = computer_partition_candidate\n
break\n
\n
if computer_partition is None:\n
raise ValueError(\'It was not possible to find free Computer Partition\')\n
\n
# lock computer partition\n
computer_partition.serialize()\n
\n
return computer_partition.getRelativeUrl()\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw, computer_network_query=None, test_mode=False</string> </value> <value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw, computer_network_query=None, test_mode=False</string> </value>
......
return True
# Disabled functionality
#section_uid = context.getSourceSectionUid()
#customer_uid = context.getDestinationSectionUid()
#simulation_state = context.getPortalCurrentInventoryStateList() + context.getPortalTransitInventoryStateList()
#balance = context.portal_simulation.getInventoryAssetPrice(
# node_category_strict_membership='account_type/asset/receivable',
# simulation_state=simulation_state,
# section_uid=section_uid,
# mirror_section_uid=customer_uid)
#return balance <= 0.
...@@ -48,26 +48,6 @@ ...@@ -48,26 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
return True\n
\n
# Disabled functionality\n
#section_uid = context.getSourceSectionUid()\n
#customer_uid = context.getDestinationSectionUid()\n
#simulation_state = context.getPortalCurrentInventoryStateList() + context.getPortalTransitInventoryStateList()\n
#balance = context.portal_simulation.getInventoryAssetPrice(\n
# node_category_strict_membership=\'account_type/asset/receivable\',\n
# simulation_state=simulation_state,\n
# section_uid=section_uid,\n
# mirror_section_uid=customer_uid)\n
#return balance <= 0.\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
"""Dirty script to return Software Instance state"""
import json
state = context.getSlapState()
has_partition = context.getAggregate(portal_type="Computer Partition")
result = 'Unable to calculate the status...'
if has_partition:
try:
memcached_dict = context.getPortalObject().portal_memcached.getMemcachedDict(
key_prefix='slap_tool',
plugin_path='portal_memcached/default_memcached_plugin')
try:
d = memcached_dict[context.getReference()]
except KeyError:
result = context.getSlapStateTitle()
else:
d = json.loads(d)
result = d['text']
if result.startswith('#access '):
result = result[len('#access '):]
except Exception:
raise
result = 'There is system issue, please try again later.'
else:
if state in ["start_requested", "stop_requested"]:
result = 'Looking for a free partition'
elif state in ["destroy_requested"]:
result = 'Destroyed'
return result
...@@ -48,41 +48,6 @@ ...@@ -48,41 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>"""Dirty script to return Software Instance state"""\n
import json\n
state = context.getSlapState()\n
has_partition = context.getAggregate(portal_type="Computer Partition")\n
result = \'Unable to calculate the status...\'\n
if has_partition:\n
try:\n
memcached_dict = context.getPortalObject().portal_memcached.getMemcachedDict(\n
key_prefix=\'slap_tool\',\n
plugin_path=\'portal_memcached/default_memcached_plugin\')\n
try:\n
d = memcached_dict[context.getReference()]\n
except KeyError:\n
result = context.getSlapStateTitle()\n
else:\n
d = json.loads(d)\n
result = d[\'text\']\n
if result.startswith(\'#access \'):\n
result = result[len(\'#access \'):]\n
\n
except Exception:\n
raise\n
result = \'There is system issue, please try again later.\'\n
\n
else:\n
if state in ["start_requested", "stop_requested"]:\n
result = \'Looking for a free partition\'\n
elif state in ["destroy_requested"]:\n
result = \'Destroyed\'\n
\n
return result\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
...@@ -48,11 +48,6 @@ ...@@ -48,11 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>return context.HostingSubscription_getDefaultImageAbsoluteUrl()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
from Products.DCWorkflow.DCWorkflow import ValidationFailed
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
from zExceptions import Unauthorized
if context.getPortalType() not in ('Software Instance', 'Slave Instance'):
raise TypeError('%s is not supported' % context.getPortalType())
def markHistory(document, comment):
portal_workflow = document.portal_workflow
last_workflow_item = portal_workflow.getInfoFor(ob=document,
name='comment', wf_id='edit_workflow')
if last_workflow_item != comment:
portal_workflow.doActionFor(document, action='edit_action', comment=comment)
def assignComputerPartition(software_instance, hosting_subscription):
computer_partition = software_instance.getAggregateValue(
portal_type="Computer Partition")
if computer_partition is None:
hosting_subscription = software_instance.getSpecialiseValue(
portal_type='Hosting Subscription')
person = hosting_subscription.getDestinationSectionValue(portal_type='Person')
if person is None:
raise ValueError('%s does not have person related' % hosting_subscription.getRelativeUrl())
if not person.Person_isAllowedToAllocate():
raise Unauthorized('Allocation disallowed')
tag = None
try:
sla_dict = software_instance.getSlaXmlAsDict()
except Exception:
# Note: it is impossible to import module exceptions from python scripts
computer_partition_relative_url = None
else:
# "Each instance should be allocated to a different network." (i.e at most one instance of the tree per network)
computer_network_query = None
if sla_dict.get('mode', None) == 'unique_by_network':
# Prevent creating two instances in the same computer_network
hosting_subscription_uid = hosting_subscription.getUid()
tag = "%s_inProgress" % hosting_subscription_uid
if (context.getPortalObject().portal_activities.countMessageWithTag(tag) > 0):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, just ignore
markHistory(software_instance,
'Allocation failed: blocking activites in progress for %s' % hosting_subscription_uid)
sla_dict.pop('mode')
# XXX: does NOT scale if hosting subscription contains many SoftwareInstance
hosting_subscription = software_instance.getSpecialiseValue()
software_instance_tree_list = [sql_obj.getObject() \
for sql_obj in context.getPortalObject().portal_catalog(
portal_type=['Software Instance', 'Slave Instance'],
default_specialise_uid=hosting_subscription.getUid(),
)
]
computer_network_query_list = []
# Don't deploy in computer with no network
computer_network_query_list.append(ComplexQuery(
SimpleQuery(
default_subordination_uid=''),
logical_operator='not',
))
for other_software_instance in software_instance_tree_list:
computer_partition = other_software_instance.getAggregateValue()
if not computer_partition:
continue
computer_network = computer_partition.getParentValue().getSubordinationValue()
if computer_network:
computer_network_query_list.append(ComplexQuery(
SimpleQuery(
default_subordination_uid=computer_network.getUid()),
logical_operator='not',
))
computer_network_query = ComplexQuery(*computer_network_query_list)
hosting_subscription.serialize()
elif sla_dict.get('mode'):
computer_network_query = '-1'
computer_partition_relative_url = person.Person_restrictMethodAsShadowUser(
shadow_document=person,
callable_object=person.Person_findPartition,
argument_list=[software_instance.getUrlString(), software_instance.getSourceReference(),
software_instance.getPortalType(), sla_dict, computer_network_query])
return computer_partition_relative_url, tag
software_instance = context
if software_instance.getValidationState() != 'validated' \
or software_instance.getSlapState() not in ('start_requested', 'stop_requested') \
or software_instance.getAggregateValue(portal_type='Computer Partition') is not None:
return
hosting_subscription = software_instance.getSpecialiseValue()
try:
computer_partition_url, tag = assignComputerPartition(software_instance,
hosting_subscription)
# XXX: We create a dummy activity to prevent to allocations on the same network
if tag:
hosting_subscription.activate(activity="SQLQueue", tag=tag,
after_tag="allocate_%s" % computer_partition_url).getId()
except ValueError:
# It was not possible to find free Computer Partition
markHistory(software_instance, 'Allocation failed: no free Computer Partition')
except Unauthorized, e:
# user has bad balance
markHistory(software_instance, 'Allocation failed: %s' % e)
except NotImplementedError, e:
# user has bad balance
markHistory(software_instance, 'Allocation failed: %s' % e)
else:
if computer_partition_url is not None:
try:
software_instance.Base_checkConsistency()
except ValidationFailed:
# order not ready yet
markHistory(software_instance, 'Allocation failed: consistency failed')
else:
software_instance.allocatePartition(computer_partition_url=computer_partition_url)
...@@ -48,135 +48,6 @@ ...@@ -48,135 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
from Products.DCWorkflow.DCWorkflow import ValidationFailed\n
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery\n
from zExceptions import Unauthorized\n
\n
if context.getPortalType() not in (\'Software Instance\', \'Slave Instance\'):\n
raise TypeError(\'%s is not supported\' % context.getPortalType())\n
\n
def markHistory(document, comment):\n
portal_workflow = document.portal_workflow\n
last_workflow_item = portal_workflow.getInfoFor(ob=document,\n
name=\'comment\', wf_id=\'edit_workflow\')\n
if last_workflow_item != comment:\n
portal_workflow.doActionFor(document, action=\'edit_action\', comment=comment)\n
\n
def assignComputerPartition(software_instance, hosting_subscription):\n
computer_partition = software_instance.getAggregateValue(\n
portal_type="Computer Partition")\n
if computer_partition is None:\n
hosting_subscription = software_instance.getSpecialiseValue(\n
portal_type=\'Hosting Subscription\')\n
person = hosting_subscription.getDestinationSectionValue(portal_type=\'Person\')\n
if person is None:\n
raise ValueError(\'%s does not have person related\' % hosting_subscription.getRelativeUrl())\n
if not person.Person_isAllowedToAllocate():\n
raise Unauthorized(\'Allocation disallowed\')\n
\n
tag = None\n
try:\n
sla_dict = software_instance.getSlaXmlAsDict()\n
except Exception:\n
# Note: it is impossible to import module exceptions from python scripts\n
computer_partition_relative_url = None\n
else:\n
\n
# "Each instance should be allocated to a different network." (i.e at most one instance of the tree per network)\n
computer_network_query = None\n
if sla_dict.get(\'mode\', None) == \'unique_by_network\':\n
# Prevent creating two instances in the same computer_network\n
hosting_subscription_uid = hosting_subscription.getUid()\n
tag = "%s_inProgress" % hosting_subscription_uid\n
if (context.getPortalObject().portal_activities.countMessageWithTag(tag) > 0):\n
# The software instance is already under creation but can not be fetched from catalog\n
# As it is not possible to fetch informations, just ignore\n
markHistory(software_instance,\n
\'Allocation failed: blocking activites in progress for %s\' % hosting_subscription_uid)\n
\n
sla_dict.pop(\'mode\')\n
# XXX: does NOT scale if hosting subscription contains many SoftwareInstance\n
hosting_subscription = software_instance.getSpecialiseValue()\n
software_instance_tree_list = [sql_obj.getObject() \\\n
for sql_obj in context.getPortalObject().portal_catalog(\n
portal_type=[\'Software Instance\', \'Slave Instance\'],\n
default_specialise_uid=hosting_subscription.getUid(),\n
)\n
]\n
computer_network_query_list = []\n
# Don\'t deploy in computer with no network\n
computer_network_query_list.append(ComplexQuery(\n
SimpleQuery(\n
default_subordination_uid=\'\'),\n
logical_operator=\'not\',\n
))\n
for other_software_instance in software_instance_tree_list:\n
computer_partition = other_software_instance.getAggregateValue()\n
if not computer_partition:\n
continue\n
computer_network = computer_partition.getParentValue().getSubordinationValue()\n
if computer_network:\n
computer_network_query_list.append(ComplexQuery(\n
SimpleQuery(\n
default_subordination_uid=computer_network.getUid()),\n
logical_operator=\'not\',\n
))\n
\n
computer_network_query = ComplexQuery(*computer_network_query_list)\n
hosting_subscription.serialize()\n
\n
elif sla_dict.get(\'mode\'):\n
computer_network_query = \'-1\'\n
\n
computer_partition_relative_url = person.Person_restrictMethodAsShadowUser(\n
shadow_document=person,\n
callable_object=person.Person_findPartition,\n
argument_list=[software_instance.getUrlString(), software_instance.getSourceReference(),\n
software_instance.getPortalType(), sla_dict, computer_network_query])\n
return computer_partition_relative_url, tag\n
\n
software_instance = context\n
if software_instance.getValidationState() != \'validated\' \\\n
or software_instance.getSlapState() not in (\'start_requested\', \'stop_requested\') \\\n
or software_instance.getAggregateValue(portal_type=\'Computer Partition\') is not None:\n
return\n
\n
hosting_subscription = software_instance.getSpecialiseValue()\n
try:\n
computer_partition_url, tag = assignComputerPartition(software_instance,\n
hosting_subscription)\n
\n
# XXX: We create a dummy activity to prevent to allocations on the same network\n
if tag:\n
hosting_subscription.activate(activity="SQLQueue", tag=tag,\n
after_tag="allocate_%s" % computer_partition_url).getId()\n
\n
except ValueError:\n
# It was not possible to find free Computer Partition\n
markHistory(software_instance, \'Allocation failed: no free Computer Partition\')\n
except Unauthorized, e:\n
# user has bad balance\n
markHistory(software_instance, \'Allocation failed: %s\' % e)\n
except NotImplementedError, e:\n
# user has bad balance\n
markHistory(software_instance, \'Allocation failed: %s\' % e)\n
else:\n
if computer_partition_url is not None:\n
try:\n
software_instance.Base_checkConsistency()\n
except ValidationFailed:\n
# order not ready yet\n
markHistory(software_instance, \'Allocation failed: consistency failed\')\n
else:\n
software_instance.allocatePartition(computer_partition_url=computer_partition_url)\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
from zExceptions import Unauthorized
if REQUEST is not None:
raise Unauthorized
if context.getPortalType() not in ('Software Instance', 'Slave Instance'):
raise TypeError('%s is not supported' % context.getPortalType())
software_instance = context
if software_instance.getValidationState() == 'validated' \
and software_instance.getSlapState() == 'destroy_requested' \
and software_instance.getAggregateValue(portal_type='Computer Partition') is None:
software_instance.invalidate(comment='Invalidated as unallocated and destroyed')
...@@ -48,22 +48,6 @@ ...@@ -48,22 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from zExceptions import Unauthorized\n
if REQUEST is not None:\n
raise Unauthorized\n
\n
if context.getPortalType() not in (\'Software Instance\', \'Slave Instance\'):\n
raise TypeError(\'%s is not supported\' % context.getPortalType())\n
\n
software_instance = context\n
if software_instance.getValidationState() == \'validated\' \\\n
and software_instance.getSlapState() == \'destroy_requested\' \\\n
and software_instance.getAggregateValue(portal_type=\'Computer Partition\') is None:\n
software_instance.invalidate(comment=\'Invalidated as unallocated and destroyed\')\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>REQUEST=None</string> </value> <value> <string>REQUEST=None</string> </value>
......
from DateTime import DateTime
portal = context.getPortalObject()
import json
memcached_dict = context.getPortalObject().portal_memcached.getMemcachedDict(
key_prefix='slap_tool',
plugin_path='portal_memcached/default_memcached_plugin')
error_style = 'background-color: red; display: block; height: 2em; width: 2em; float: left; margin: 5px;'
access_style = 'background-color: green; display: block; height: 2em; width: 2em; float: left; margin: 5px;'
software_installation = portal.portal_catalog.getResultValue(
portal_type='Software Installation',
validation_state='validated',
url_string=context.getUrlString(),
default_aggregate_uid=computer_uid
)
if not software_installation or software_installation.getSlapState() == "destroy_requested":
return '<span" style="%s" title="Information not available"></a>' % error_style
try:
d = memcached_dict[software_installation.getReference()]
except KeyError:
return "<a href='%s' style='%s'></a>" % (software_installation.getRelativeUrl(),
error_style)
else:
d = json.loads(d)
result = d['text']
date = DateTime(d['created_at'])
limit_date = DateTime() - 0.084
if result.startswith('#error ') or (date - limit_date) < 0:
access_style = error_style
return "<a href='%s' style='%s' title='%s at %s'></a>" % (
software_installation.getRelativeUrl(),
access_style, result, d['created_at'])
...@@ -48,50 +48,6 @@ ...@@ -48,50 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
from DateTime import DateTime\n
portal = context.getPortalObject()\n
import json\n
\n
memcached_dict = context.getPortalObject().portal_memcached.getMemcachedDict(\n
key_prefix=\'slap_tool\',\n
plugin_path=\'portal_memcached/default_memcached_plugin\')\n
\n
error_style = \'background-color: red; display: block; height: 2em; width: 2em; float: left; margin: 5px;\'\n
access_style = \'background-color: green; display: block; height: 2em; width: 2em; float: left; margin: 5px;\'\n
\n
software_installation = portal.portal_catalog.getResultValue(\n
portal_type=\'Software Installation\',\n
validation_state=\'validated\',\n
url_string=context.getUrlString(),\n
default_aggregate_uid=computer_uid\n
)\n
if not software_installation or software_installation.getSlapState() == "destroy_requested":\n
return \'<span" style="%s" title="Information not available"></a>\' % error_style\n
\n
try:\n
d = memcached_dict[software_installation.getReference()]\n
except KeyError:\n
return "<a href=\'%s\' style=\'%s\'></a>" % (software_installation.getRelativeUrl(),\n
error_style)\n
else:\n
d = json.loads(d)\n
result = d[\'text\']\n
date = DateTime(d[\'created_at\'])\n
limit_date = DateTime() - 0.084\n
if result.startswith(\'#error \') or (date - limit_date) < 0:\n
access_style = error_style\n
\n
return "<a href=\'%s\' style=\'%s\' title=\'%s at %s\'></a>" % (\n
software_installation.getRelativeUrl(),\n
access_style, result, d[\'created_at\'])\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>computer_uid</string> </value> <value> <string>computer_uid</string> </value>
......
network_list = []
for computer in context.SoftwareRelease_getUsableComputerList():
network = computer.getSubordinationValue()
if network and not network in network_list:
network_list.append(network)
return network_list
...@@ -48,17 +48,6 @@ ...@@ -48,17 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>network_list = []\n
for computer in context.SoftwareRelease_getUsableComputerList():\n
network = computer.getSubordinationValue()\n
if network and not network in network_list:\n
network_list.append(network)\n
\n
return network_list\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
kw['portal_type'] = 'Software Installation'
kw['validation_state'] = 'validated'
kw['url_string'] = context.getUrlString()
software_installation_list = context.portal_catalog(**kw)
computer_list = []
allocation_scope_list = ['open/personal', 'open/public', 'open/friend']
for software_installation in software_installation_list:
computer = software_installation.getAggregateValue()
if software_installation.getSlapState() == 'start_requested' and \
computer.getAllocationScope() in allocation_scope_list:
computer_list.append(computer)
return computer_list
...@@ -48,24 +48,6 @@ ...@@ -48,24 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>kw[\'portal_type\'] = \'Software Installation\'\n
kw[\'validation_state\'] = \'validated\'\n
kw[\'url_string\'] = context.getUrlString()\n
\n
software_installation_list = context.portal_catalog(**kw)\n
computer_list = []\n
allocation_scope_list = [\'open/personal\', \'open/public\', \'open/friend\']\n
for software_installation in software_installation_list:\n
computer = software_installation.getAggregateValue()\n
if software_installation.getSlapState() == \'start_requested\' and \\\n
computer.getAllocationScope() in allocation_scope_list:\n
computer_list.append(computer)\n
\n
return computer_list\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
list = []
for si in context.portal_catalog(url_string=context.getUrlString(), portal_type='Software Installation', validation_state='validated'):
computer = si.getAggregateValue()
if si.getSlapState() == 'start_requested' and \
not computer.Computer_getSoftwareReleaseUsage(context.getUid()) \
and computer.getValidationState() == 'validated':
list.append(computer)
return list
...@@ -48,19 +48,6 @@ ...@@ -48,19 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>list = []\n
for si in context.portal_catalog(url_string=context.getUrlString(), portal_type=\'Software Installation\', validation_state=\'validated\'):\n
computer = si.getAggregateValue()\n
if si.getSlapState() == \'start_requested\' and \\\n
not computer.Computer_getSoftwareReleaseUsage(context.getUid()) \\\n
and computer.getValidationState() == \'validated\':\n
list.append(computer)\n
\n
return list\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>**kw</string> </value> <value> <string>**kw</string> </value>
......
portal = context.getPortalObject()
message = "Please select at least one computer."
dialog = dialog_id
item_count = 0
keep_items = {}
software_release = portal.portal_catalog.getResultValue(url_string=url_string,
portal_type='Software Release')
if len(uids) and software_release:
dialog = "SoftwareRelease_viewUsableComputerList"
for computer in portal.portal_catalog(uid=uids, portal_type="Computer"):
# XXX - We won't destroy Software release if it used on this computer
if not computer.Computer_getSoftwareReleaseUsage(software_release.getUid()):
computer.requestSoftwareRelease(software_release_url=url_string,
state='destroyed')
item_count += 1
message = "Destruction request submited on %d computer(s)." % item_count
keep_items={'portal_status_message':context.Base_translateString(message)}
if cancel_url:
keep_items['cancel_url'] = cancel_url
return context.Base_redirect(dialog, keep_items=keep_items)
...@@ -48,34 +48,6 @@ ...@@ -48,34 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n
message = "Please select at least one computer."\n
dialog = dialog_id\n
item_count = 0\n
keep_items = {}\n
software_release = portal.portal_catalog.getResultValue(url_string=url_string,\n
portal_type=\'Software Release\')\n
\n
if len(uids) and software_release: \n
dialog = "SoftwareRelease_viewUsableComputerList"\n
for computer in portal.portal_catalog(uid=uids, portal_type="Computer"): \n
# XXX - We won\'t destroy Software release if it used on this computer\n
if not computer.Computer_getSoftwareReleaseUsage(software_release.getUid()): \n
computer.requestSoftwareRelease(software_release_url=url_string,\n
state=\'destroyed\')\n
item_count += 1\n
\n
message = "Destruction request submited on %d computer(s)." % item_count\n
\n
keep_items={\'portal_status_message\':context.Base_translateString(message)}\n
if cancel_url:\n
keep_items[\'cancel_url\'] = cancel_url\n
\n
return context.Base_redirect(dialog, keep_items=keep_items)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>dialog_id, url_string, form_id, uids=[], cancel_url=None, **kw</string> </value> <value> <string>dialog_id, url_string, form_id, uids=[], cancel_url=None, **kw</string> </value>
......
from Products.CMFActivity.ActiveResult import ActiveResult
portal = context.getPortalObject()
wrong_module_list = []
active_process = context.newActiveProcess()
for module_id in portal.objectIds(spec=('ERP5 Folder',)) + ["portal_simulation", "portal_activities"]:
module = portal.restrictedTraverse(module_id)
if not module.Module_assertIdGenerator('_generatePerDayId', fixit, active_process):
wrong_module_list.append(module.getRelativeUrl())
if len(wrong_module_list) != 0:
summary = "Some modules have incorrect ID generator"
if fixit:
summary += ", fixed."
severity = 0
else:
severity = 1
detail = "List: %s" % (', '.join(wrong_module_list), )
else:
severity = 0
summary = "Nothing to do."
detail = ""
active_result = ActiveResult()
active_result.edit(
summary=summary,
severity=severity,
detail=detail)
active_process.postResult(active_result)
...@@ -48,40 +48,6 @@ ...@@ -48,40 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from Products.CMFActivity.ActiveResult import ActiveResult\n
\n
portal = context.getPortalObject()\n
wrong_module_list = []\n
active_process = context.newActiveProcess()\n
for module_id in portal.objectIds(spec=(\'ERP5 Folder\',)) + ["portal_simulation", "portal_activities"]:\n
module = portal.restrictedTraverse(module_id)\n
if not module.Module_assertIdGenerator(\'_generatePerDayId\', fixit, active_process):\n
wrong_module_list.append(module.getRelativeUrl())\n
\n
if len(wrong_module_list) != 0:\n
summary = "Some modules have incorrect ID generator"\n
if fixit:\n
summary += ", fixed."\n
severity = 0\n
else:\n
severity = 1\n
detail = "List: %s" % (\', \'.join(wrong_module_list), )\n
else:\n
severity = 0\n
summary = "Nothing to do."\n
detail = ""\n
\n
active_result = ActiveResult()\n
active_result.edit(\n
summary=summary, \n
severity=severity,\n
detail=detail)\n
\n
active_process.postResult(active_result)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit=False, **kw</string> </value> <value> <string>tag, fixit=False, **kw</string> </value>
......
promise_dict = {
'IExtractionPlugin': [
'SlapOS Machine Authentication Plugin',
'ERP5 Access Token Extraction Plugin',
],
'IAuthenticationPlugin': [
'SlapOS Machine Authentication Plugin',
'SlapOS Shadow Authentication Plugin',
],
'IGroupsPlugin': [
'SlapOS Machine Authentication Plugin',
'SlapOS Shadow Authentication Plugin',
],
'IUserEnumerationPlugin': [
'SlapOS Machine Authentication Plugin',
'SlapOS Shadow Authentication Plugin',
]
}
context.Alarm_checkPromiseSlapOSPASBase(promise_dict, tag, fixit=fixit, **kw)
...@@ -48,29 +48,6 @@ ...@@ -48,29 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>promise_dict = {\n
\'IExtractionPlugin\': [\n
\'SlapOS Machine Authentication Plugin\',\n
\'ERP5 Access Token Extraction Plugin\',\n
],\n
\'IAuthenticationPlugin\': [\n
\'SlapOS Machine Authentication Plugin\',\n
\'SlapOS Shadow Authentication Plugin\',\n
],\n
\'IGroupsPlugin\': [\n
\'SlapOS Machine Authentication Plugin\',\n
\'SlapOS Shadow Authentication Plugin\',\n
],\n
\'IUserEnumerationPlugin\': [\n
\'SlapOS Machine Authentication Plugin\',\n
\'SlapOS Shadow Authentication Plugin\',\n
]\n
}\n
context.Alarm_checkPromiseSlapOSPASBase(promise_dict, tag, fixit=fixit, **kw)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>tag, fixit=False, **kw</string> </value> <value> <string>tag, fixit=False, **kw</string> </value>
......
from Products.CMFActivity.ActiveResult import ActiveResult
portal = context.getPortalObject()
def mergePASDictDifference(portal, d, fixit):
plugins = portal.acl_users.plugins
error_list = []
plugin_type_info = plugins.listPluginTypeInfo()
for plugin, active_list in d.iteritems():
plugin_info = [q for q in plugin_type_info if q['id'] == plugin][0]
found_list = plugins.listPlugins(plugin_info['interface'])
meta_type_list = [q[1].meta_type for q in found_list]
for expected in active_list:
if expected not in meta_type_list:
error = 'Plugin %s missing %s.' % (plugin, expected)
if fixit:
existing = [q for q in portal.acl_users.objectValues() if q.meta_type == expected]
if len(existing) == 0:
error_list.append('%s not found' % expected)
else:
plugins.activatePlugin(plugin_info['interface'], existing[0].getId())
error += ' Fixed.'
error_list.append(error)
return error_list
pas_difference = mergePASDictDifference(portal, promise_dict, fixit)
if len(pas_difference) != 0:
if fixit:
severity = 0
else:
severity = 1
summary = "PAS not configured as expected"
if fixit:
summary += ' (fixed)'
detail = "Difference:\n%s" % ('\n'.join(pas_difference), )
else:
severity = 0
summary = "Nothing to do."
detail = ""
active_result = ActiveResult()
active_result.edit(
summary=summary,
severity=severity,
detail=detail)
context.newActiveProcess().postResult(active_result)
...@@ -48,57 +48,6 @@ ...@@ -48,57 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from Products.CMFActivity.ActiveResult import ActiveResult\n
\n
portal = context.getPortalObject()\n
def mergePASDictDifference(portal, d, fixit):\n
plugins = portal.acl_users.plugins\n
error_list = []\n
plugin_type_info = plugins.listPluginTypeInfo()\n
for plugin, active_list in d.iteritems():\n
plugin_info = [q for q in plugin_type_info if q[\'id\'] == plugin][0]\n
found_list = plugins.listPlugins(plugin_info[\'interface\'])\n
meta_type_list = [q[1].meta_type for q in found_list]\n
for expected in active_list:\n
if expected not in meta_type_list:\n
error = \'Plugin %s missing %s.\' % (plugin, expected)\n
if fixit:\n
existing = [q for q in portal.acl_users.objectValues() if q.meta_type == expected]\n
if len(existing) == 0:\n
error_list.append(\'%s not found\' % expected)\n
else:\n
plugins.activatePlugin(plugin_info[\'interface\'], existing[0].getId())\n
error += \' Fixed.\'\n
error_list.append(error)\n
\n
return error_list\n
\n
pas_difference = mergePASDictDifference(portal, promise_dict, fixit)\n
if len(pas_difference) != 0:\n
if fixit:\n
severity = 0\n
else:\n
severity = 1\n
summary = "PAS not configured as expected"\n
if fixit:\n
summary += \' (fixed)\'\n
detail = "Difference:\\n%s" % (\'\\n\'.join(pas_difference), )\n
else:\n
severity = 0\n
summary = "Nothing to do."\n
detail = ""\n
\n
active_result = ActiveResult()\n
active_result.edit(\n
summary=summary, \n
severity=severity,\n
detail=detail)\n
\n
context.newActiveProcess().postResult(active_result)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>promise_dict, tag, fixit=False, **kw</string> </value> <value> <string>promise_dict, tag, fixit=False, **kw</string> </value>
......
...@@ -48,11 +48,6 @@ ...@@ -48,11 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>context.activeSense(fixit=1)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
......
current_id_generator = context.getIdGenerator()
if current_id_generator != id_generator:
if fixit:
context.setIdGenerator(id_generator)
return False
return True
...@@ -48,17 +48,6 @@ ...@@ -48,17 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>current_id_generator = context.getIdGenerator()\n
\n
if current_id_generator != id_generator:\n
if fixit:\n
context.setIdGenerator(id_generator)\n
return False\n
return True\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>id_generator, fixit, active_process=None</string> </value> <value> <string>id_generator, fixit, active_process=None</string> </value>
......
computer = state_change['object']
portal = computer.getPortalObject()
person = portal.ERP5Site_getAuthenticatedMemberPersonValue()
computer.edit(
allocation_scope='open/personal',
source_administration_value=person,
)
portal.portal_workflow.doActionFor(computer, 'validate_action')
...@@ -48,18 +48,6 @@ ...@@ -48,18 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = state_change[\'object\']\n
portal = computer.getPortalObject()\n
person = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n
computer.edit(\n
allocation_scope=\'open/personal\',\n
source_administration_value=person,\n
)\n
portal.portal_workflow.doActionFor(computer, \'validate_action\')\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
computer = state_change['object']
if computer.getDestinationReference() is not None:
context.REQUEST.set("computer_certificate", None)
context.REQUEST.set("computer_key", None)
raise ValueError('Certificate still active.')
ca = context.getPortalObject().portal_certificate_authority
certificate_dict = ca.getNewCertificate(computer.getReference())
computer.setDestinationReference(certificate_dict["id"])
context.REQUEST.set("computer_certificate", certificate_dict["certificate"])
context.REQUEST.set("computer_key", certificate_dict["key"])
...@@ -48,24 +48,6 @@ ...@@ -48,24 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = state_change[\'object\']\n
\n
if computer.getDestinationReference() is not None:\n
context.REQUEST.set("computer_certificate", None)\n
context.REQUEST.set("computer_key", None)\n
raise ValueError(\'Certificate still active.\')\n
\n
ca = context.getPortalObject().portal_certificate_authority\n
certificate_dict = ca.getNewCertificate(computer.getReference())\n
\n
computer.setDestinationReference(certificate_dict["id"])\n
\n
context.REQUEST.set("computer_certificate", certificate_dict["certificate"])\n
context.REQUEST.set("computer_key", certificate_dict["key"])\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
computer = state_change['object']
portal = computer.getPortalObject()
for computer_partition in [x for x in computer.contentValues(portal_type='Computer Partition') if x.getSlapState() == 'busy']:
for instance_sql in portal.portal_catalog(
default_aggregate_uid=computer_partition.getUid(),
portal_type=["Software Instance", "Slave Instance"],
):
instance = instance_sql.getObject()
if instance.getSlapState() in ["start_requested", "stop_requested"]:
instance.activate().SoftwareInstance_bangAsSelf(
relative_url=instance.getRelativeUrl(),
reference=instance.getReference(),
comment=state_change.kwargs.get('comment', ''))
...@@ -48,23 +48,6 @@ ...@@ -48,23 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = state_change[\'object\']\n
portal = computer.getPortalObject()\n
for computer_partition in [x for x in computer.contentValues(portal_type=\'Computer Partition\') if x.getSlapState() == \'busy\']:\n
for instance_sql in portal.portal_catalog(\n
default_aggregate_uid=computer_partition.getUid(),\n
portal_type=["Software Instance", "Slave Instance"],\n
):\n
instance = instance_sql.getObject()\n
if instance.getSlapState() in ["start_requested", "stop_requested"]:\n
instance.activate().SoftwareInstance_bangAsSelf(\n
relative_url=instance.getRelativeUrl(),\n
reference=instance.getReference(), \n
comment=state_change.kwargs.get(\'comment\', \'\'))\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
computer = state_change['object']
portal = computer.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
software_release_url = kwargs['software_release_url']
state = kwargs["state"]
except KeyError:
raise TypeError("Computer_requestSoftwareReleaseChange takes exactly 2 arguments")
tag = "%s_%s_inProgress" % (computer.getUid(),
software_release_url)
if (portal.portal_activities.countMessageWithTag(tag) > 0):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise NotImplementedError(tag)
software_installation_portal_type = 'Software Installation'
# Check if it already exists
software_installation_list = portal.portal_catalog(
portal_type=software_installation_portal_type,
url_string={'query': software_release_url, 'key': 'ExactMatch'},
validation_state="validated",
default_aggregate_uid=computer.getUid(),
limit=2,
)
if len(software_installation_list) > 1:
raise NotImplementedError("Too many Software Installation %s found %s" % (software_release_url, [x.path for x in software_installation_list]))
elif len(software_installation_list) == 1:
software_installation = software_installation_list[0].getObject()
if (software_installation.getUrlString() != software_release_url) or \
(software_installation.getValidationState() != "validated") or \
(software_installation.getAggregate() != computer.getRelativeUrl()):
raise NotImplementedError("The system was not able to get the expected Software Installation")
else:
if (state == "destroyed"):
# No need to create destroyed subscription.
return
software_installation_reference = "SOFTINSTALL-%s" % context.getPortalObject().portal_ids\
.generateNewId(id_group='slap_software_installation_reference', id_generator='uid')
software_installation = portal.getDefaultModule(portal_type=software_installation_portal_type).newContent(
portal_type=software_installation_portal_type,
reference=software_installation_reference,
url_string=software_release_url,
aggregate=computer.getRelativeUrl(),
activate_kw={'tag': tag},
destination_section=computer.getSourceAdministration()
)
# Change desired state
if (state == "available"):
software_installation.requestStart()
elif (state == "destroyed"):
software_installation.requestDestroy(activate_kw={'tag': tag})
else:
raise ValueError("state should be available or destroyed, but is %s" % state)
# Change the state at the end to allow to execute updateLocalRoles only once in the transaction
validation_state = software_installation.getValidationState()
slap_state = software_installation.getSlapState()
if validation_state == 'draft':
portal.portal_workflow.doActionFor(software_installation,
'validate_action')
context.REQUEST.set('software_installation_url', software_installation.getRelativeUrl())
...@@ -48,84 +48,6 @@ ...@@ -48,84 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
computer = state_change[\'object\']\n
portal = computer.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
software_release_url = kwargs[\'software_release_url\']\n
state = kwargs["state"]\n
except KeyError:\n
raise TypeError("Computer_requestSoftwareReleaseChange takes exactly 2 arguments")\n
\n
tag = "%s_%s_inProgress" % (computer.getUid(), \n
software_release_url)\n
\n
if (portal.portal_activities.countMessageWithTag(tag) > 0):\n
# The software instance is already under creation but can not be fetched from catalog\n
# As it is not possible to fetch informations, it is better to raise an error\n
raise NotImplementedError(tag)\n
\n
software_installation_portal_type = \'Software Installation\'\n
# Check if it already exists\n
software_installation_list = portal.portal_catalog(\n
portal_type=software_installation_portal_type,\n
url_string={\'query\': software_release_url, \'key\': \'ExactMatch\'},\n
validation_state="validated",\n
default_aggregate_uid=computer.getUid(),\n
limit=2,\n
)\n
\n
if len(software_installation_list) > 1:\n
raise NotImplementedError("Too many Software Installation %s found %s" % (software_release_url, [x.path for x in software_installation_list]))\n
elif len(software_installation_list) == 1:\n
software_installation = software_installation_list[0].getObject()\n
if (software_installation.getUrlString() != software_release_url) or \\\n
(software_installation.getValidationState() != "validated") or \\\n
(software_installation.getAggregate() != computer.getRelativeUrl()):\n
raise NotImplementedError("The system was not able to get the expected Software Installation")\n
else:\n
if (state == "destroyed"):\n
# No need to create destroyed subscription.\n
return\n
software_installation_reference = "SOFTINSTALL-%s" % context.getPortalObject().portal_ids\\\n
.generateNewId(id_group=\'slap_software_installation_reference\', id_generator=\'uid\')\n
software_installation = portal.getDefaultModule(portal_type=software_installation_portal_type).newContent(\n
portal_type=software_installation_portal_type,\n
reference=software_installation_reference,\n
url_string=software_release_url,\n
aggregate=computer.getRelativeUrl(),\n
activate_kw={\'tag\': tag},\n
destination_section=computer.getSourceAdministration()\n
)\n
\n
# Change desired state\n
if (state == "available"):\n
software_installation.requestStart()\n
elif (state == "destroyed"):\n
software_installation.requestDestroy(activate_kw={\'tag\': tag})\n
else:\n
raise ValueError("state should be available or destroyed, but is %s" % state)\n
\n
# Change the state at the end to allow to execute updateLocalRoles only once in the transaction\n
validation_state = software_installation.getValidationState()\n
slap_state = software_installation.getSlapState()\n
if validation_state == \'draft\':\n
portal.portal_workflow.doActionFor(software_installation,\n
\'validate_action\')\n
\n
context.REQUEST.set(\'software_installation_url\', software_installation.getRelativeUrl())\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
computer = state_change['object']
context.REQUEST.set('computer_certificate', None)
context.REQUEST.set('computer_key', None)
destination_reference = computer.getDestinationReference()
if destination_reference is None:
raise ValueError('No certificate')
context.getPortalObject().portal_certificate_authority.revokeCertificate(destination_reference)
computer.setDestinationReference(None)
...@@ -48,18 +48,6 @@ ...@@ -48,18 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = state_change[\'object\']\n
context.REQUEST.set(\'computer_certificate\', None)\n
context.REQUEST.set(\'computer_key\', None)\n
destination_reference = computer.getDestinationReference()\n
if destination_reference is None:\n
raise ValueError(\'No certificate\')\n
context.getPortalObject().portal_certificate_authority.revokeCertificate(destination_reference)\n
computer.setDestinationReference(None)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
...@@ -48,12 +48,6 @@ ...@@ -48,12 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
instance.Base_checkConsistency()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
assert instance.getPortalType() in ["Software Instance", "Slave Instance"]
portal = instance.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
computer_partition_url = kwargs['computer_partition_url']
except KeyError:
raise TypeError, "RequestedInstance_allocatePartition takes exactly 1 argument"
assert instance.getAggregateValue() is None
computer_partition = portal.restrictedTraverse(computer_partition_url)
assert computer_partition.getPortalType() == "Computer Partition"
instance.edit(aggregate_value=computer_partition, activate_kw={'tag': 'allocate_%s' % computer_partition_url})
...@@ -48,28 +48,6 @@ ...@@ -48,28 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
assert instance.getPortalType() in ["Software Instance", "Slave Instance"]\n
portal = instance.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
computer_partition_url = kwargs[\'computer_partition_url\']\n
except KeyError:\n
raise TypeError, "RequestedInstance_allocatePartition takes exactly 1 argument"\n
\n
assert instance.getAggregateValue() is None\n
computer_partition = portal.restrictedTraverse(computer_partition_url)\n
assert computer_partition.getPortalType() == "Computer Partition"\n
\n
instance.edit(aggregate_value=computer_partition, activate_kw={\'tag\': \'allocate_%s\' % computer_partition_url})\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
if (instance.getPortalType() in ["Software Instance", "Slave Instance"]) and (instance.getSlapState() != 'destroy_requested'):
instance.bang(bang_tree=False, comment="State changed from %s to destroy_requested" % instance.getSlapState())
...@@ -48,13 +48,6 @@ ...@@ -48,13 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
if (instance.getPortalType() in ["Software Instance", "Slave Instance"]) and (instance.getSlapState() != \'destroy_requested\'):\n
instance.bang(bang_tree=False, comment="State changed from %s to destroy_requested" % instance.getSlapState())\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
if (instance.getPortalType() in ["Software Instance", "Slave Instance"]) and (instance.getSlapState() != 'start_requested'):
instance.bang(bang_tree=False, comment="State changed from %s to start_requested" % instance.getSlapState())
...@@ -48,13 +48,6 @@ ...@@ -48,13 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
if (instance.getPortalType() in ["Software Instance", "Slave Instance"]) and (instance.getSlapState() != \'start_requested\'):\n
instance.bang(bang_tree=False, comment="State changed from %s to start_requested" % instance.getSlapState())\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
if (instance.getPortalType() in ["Software Instance", "Slave Instance"]) and (instance.getSlapState() != 'stop_requested'):
instance.bang(bang_tree=False, comment="State changed from %s to stop_requested" % instance.getSlapState())
...@@ -48,13 +48,6 @@ ...@@ -48,13 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
if (instance.getPortalType() in ["Software Instance", "Slave Instance"]) and (instance.getSlapState() != \'stop_requested\'):\n
instance.bang(bang_tree=False, comment="State changed from %s to stop_requested" % instance.getSlapState())\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
from DateTime import DateTime
instance = state_change['object']
assert instance.getPortalType() in ["Slave Instance", "Software Instance"]
instance.edit(bang_timestamp=int(DateTime()))
comment = state_change.kwargs['comment'] # comment is required to pass the transition
if state_change.kwargs['bang_tree']:
from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery
portal = instance.getPortalObject()
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")
portal.portal_catalog.searchAndActivate(
default_specialise_uid=hosting_subscription.getUid(),
path=NegatedQuery(Query(path=instance.getPath())),
portal_type=["Slave Instance", "Software Instance"],
method_id='bang',
method_kw={'bang_tree': False, 'comment': comment},
)
...@@ -48,27 +48,6 @@ ...@@ -48,27 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>from DateTime import DateTime\n
instance = state_change[\'object\']\n
assert instance.getPortalType() in ["Slave Instance", "Software Instance"]\n
\n
instance.edit(bang_timestamp=int(DateTime()))\n
comment = state_change.kwargs[\'comment\'] # comment is required to pass the transition\n
if state_change.kwargs[\'bang_tree\']:\n
from Products.ZSQLCatalog.SQLCatalog import Query, NegatedQuery\n
portal = instance.getPortalObject()\n
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")\n
portal.portal_catalog.searchAndActivate(\n
default_specialise_uid=hosting_subscription.getUid(),\n
path=NegatedQuery(Query(path=instance.getPath())),\n
portal_type=["Slave Instance", "Software Instance"],\n
method_id=\'bang\',\n
method_kw={\'bang_tree\': False, \'comment\': comment},\n
)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
portal = instance.getPortalObject()
for requester_instance in portal.portal_catalog(
portal_type="Software Instance",
default_predecessor_uid=instance.getUid()):
requester_instance.getObject().bang(
bang_tree=False,
comment="%s parameters changed" % instance.getRelativeUrl())
...@@ -48,19 +48,6 @@ ...@@ -48,19 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
portal = instance.getPortalObject()\n
\n
for requester_instance in portal.portal_catalog(\n
portal_type="Software Instance",\n
default_predecessor_uid=instance.getUid()):\n
requester_instance.getObject().bang(\n
bang_tree=False,\n
comment="%s parameters changed" % instance.getRelativeUrl())\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
portal = instance.getPortalObject()
software_title = state_change.kwargs['new_name']
assert instance.getPortalType() in ["Slave Instance", "Software Instance"]
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")
# Instance can be moved from one requester to another
# Prevent creating two instances with the same title
tag = "%s_%s_inProgress" % (hosting_subscription.getUid(), software_title)
if (portal.portal_activities.countMessageWithTag(tag) > 0):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise NotImplementedError(tag)
# Check if it already exists
request_software_instance_list = portal.portal_catalog(
# Fetch all portal type, as it is not allowed to change it
portal_type=["Software Instance", "Slave Instance"],
title={'query': software_title, 'key': 'ExactMatch'},
specialise_uid=hosting_subscription.getUid(),
# Do not fetch destroyed instances
# XXX slap_state=["start_requested", "stop_requested"],
validation_state="validated",
limit=1,
)
if len(request_software_instance_list) == 1:
raise ValueError, "Too many instances '%s' found: %s" % (software_title, [x.path for x in request_software_instance_list])
# Change the title
instance.edit(title=software_title, activate_kw={'tag': tag})
...@@ -48,46 +48,6 @@ ...@@ -48,46 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
instance = state_change[\'object\']\n
portal = instance.getPortalObject()\n
software_title = state_change.kwargs[\'new_name\']\n
\n
assert instance.getPortalType() in ["Slave Instance", "Software Instance"]\n
\n
hosting_subscription = instance.getSpecialiseValue(portal_type="Hosting Subscription")\n
\n
# Instance can be moved from one requester to another\n
# Prevent creating two instances with the same title\n
tag = "%s_%s_inProgress" % (hosting_subscription.getUid(), software_title)\n
if (portal.portal_activities.countMessageWithTag(tag) > 0):\n
# The software instance is already under creation but can not be fetched from catalog\n
# As it is not possible to fetch informations, it is better to raise an error\n
raise NotImplementedError(tag)\n
\n
# Check if it already exists\n
request_software_instance_list = portal.portal_catalog(\n
# Fetch all portal type, as it is not allowed to change it\n
portal_type=["Software Instance", "Slave Instance"],\n
title={\'query\': software_title, \'key\': \'ExactMatch\'},\n
specialise_uid=hosting_subscription.getUid(),\n
# Do not fetch destroyed instances\n
# XXX slap_state=["start_requested", "stop_requested"],\n
validation_state="validated",\n
limit=1,\n
)\n
if len(request_software_instance_list) == 1:\n
raise ValueError, "Too many instances \'%s\' found: %s" % (software_title, [x.path for x in request_software_instance_list])\n
\n
# Change the title\n
instance.edit(title=software_title, activate_kw={\'tag\': tag})\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
assert instance.getPortalType() in ["Software Instance", "Slave Instance"]
assert instance.getAggregate("") != ""
instance.edit(aggregate="", activate_kw={'tag': 'allocate_%s' % instance.getAggregate()})
...@@ -48,15 +48,6 @@ ...@@ -48,15 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
assert instance.getPortalType() in ["Software Instance", "Slave Instance"]\n
assert instance.getAggregate("") != ""\n
\n
instance.edit(aggregate="", activate_kw={\'tag\': \'allocate_%s\' % instance.getAggregate()})\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
portal = instance.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
connection_xml = state_change.kwargs['connection_xml']
except KeyError:
raise TypeError, "RequestedInstance_updateConnectionInformation takes exactly 1 arguments"
edit_kw = {
'connection_xml': connection_xml,
}
instance.edit(**edit_kw)
# Prevent storing broken XML in text content (which prevent to update parameters after)
context.Instance_checkConsistency(state_change)
...@@ -48,29 +48,6 @@ ...@@ -48,29 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
portal = instance.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
connection_xml = state_change.kwargs[\'connection_xml\']\n
except KeyError:\n
raise TypeError, "RequestedInstance_updateConnectionInformation takes exactly 1 arguments"\n
\n
edit_kw = {\n
\'connection_xml\': connection_xml,\n
}\n
\n
instance.edit(**edit_kw)\n
# Prevent storing broken XML in text content (which prevent to update parameters after)\n
context.Instance_checkConsistency(state_change)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
portal = instance.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
software_release_url_string = state_change.kwargs['software_release']
software_type = kwargs["software_type"]
instance_xml = kwargs["instance_xml"]
sla_xml = kwargs["sla_xml"]
is_slave = kwargs["shared"]
except KeyError:
raise TypeError, "RequestedInstance_updateParameterInformation takes exactly 5 arguments"
edit_kw = {
'url_string': software_release_url_string,
'text_content': instance_xml,
'source_reference': software_type,
'sla_xml': sla_xml,
}
# Check the slave management
if is_slave not in [True, False]:
raise ValueError, "shared should be a boolean"
instance_portal_type = instance.getPortalType()
if instance_portal_type == "Hosting Subscription":
edit_kw['root_slave'] = is_slave
elif instance_portal_type == "Software Instance":
if is_slave:
raise NotImplementedError, "Please destroy before doing a slave instance (%s)" % \
(instance.getRelativeUrl(), )
elif instance_portal_type == "Slave Instance":
if not is_slave:
raise NotImplementedError, "Please destroy before doing a software instance (%s)" % \
(instance.getRelativeUrl(), )
else:
raise NotImplementedError, "Not supported portal type %s (%s)" % \
(instance.getPortalType(), instance.getRelativeUrl())
instance.edit(**edit_kw)
# Prevent storing broken XML in text content (which prevent to update parameters after)
context.Instance_checkConsistency(state_change)
...@@ -48,54 +48,6 @@ ...@@ -48,54 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
portal = instance.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
software_release_url_string = state_change.kwargs[\'software_release\']\n
software_type = kwargs["software_type"]\n
instance_xml = kwargs["instance_xml"]\n
sla_xml = kwargs["sla_xml"]\n
is_slave = kwargs["shared"]\n
except KeyError:\n
raise TypeError, "RequestedInstance_updateParameterInformation takes exactly 5 arguments"\n
\n
edit_kw = {\n
\'url_string\': software_release_url_string,\n
\'text_content\': instance_xml,\n
\'source_reference\': software_type,\n
\'sla_xml\': sla_xml,\n
}\n
\n
# Check the slave management\n
if is_slave not in [True, False]:\n
raise ValueError, "shared should be a boolean"\n
instance_portal_type = instance.getPortalType()\n
if instance_portal_type == "Hosting Subscription":\n
edit_kw[\'root_slave\'] = is_slave\n
elif instance_portal_type == "Software Instance":\n
if is_slave:\n
raise NotImplementedError, "Please destroy before doing a slave instance (%s)" % \\\n
(instance.getRelativeUrl(), )\n
elif instance_portal_type == "Slave Instance":\n
if not is_slave:\n
raise NotImplementedError, "Please destroy before doing a software instance (%s)" % \\\n
(instance.getRelativeUrl(), )\n
else:\n
raise NotImplementedError, "Not supported portal type %s (%s)" % \\\n
(instance.getPortalType(), instance.getRelativeUrl())\n
\n
instance.edit(**edit_kw)\n
# Prevent storing broken XML in text content (which prevent to update parameters after)\n
context.Instance_checkConsistency(state_change)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
requester_instance = state_change['object']
portal = requester_instance.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
software_release_url_string = kwargs['software_release']
software_title = kwargs["software_title"]
software_type = kwargs["software_type"]
instance_xml = kwargs["instance_xml"]
sla_xml = kwargs["sla_xml"]
is_slave = kwargs["shared"]
root_state = kwargs["state"]
except KeyError:
raise
raise TypeError, "RequesterInstance_request takes exactly 7 arguments"
if is_slave not in [True, False]:
raise ValueError, "shared should be a boolean"
# Hosting subscriptin is used as the root of the instance tree
if requester_instance.getPortalType() == "Hosting Subscription":
hosting_subscription = requester_instance
else:
hosting_subscription = requester_instance.getSpecialiseValue(portal_type="Hosting Subscription")
# Instance can be moved from one requester to another
# Prevent creating two instances with the same title
tag = "%s_%s_inProgress" % (hosting_subscription.getUid(), software_title)
if (portal.portal_activities.countMessageWithTag(tag) > 0):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise NotImplementedError(tag)
# graph allows to "simulate" tree change after requested operation
graph = {}
predecessor_list = hosting_subscription.getPredecessorValueList()
graph[hosting_subscription.getUid()] = [predecessor.getUid() for predecessor in predecessor_list]
while True:
try:
current_software_instance = predecessor_list.pop(0)
except IndexError:
break
current_software_instance_predecessor_list = current_software_instance.getPredecessorValueList() or []
graph[current_software_instance.getUid()] = [predecessor.getUid()
for predecessor in current_software_instance_predecessor_list]
predecessor_list.extend(current_software_instance_predecessor_list)
# Check if it already exists
request_software_instance_list = portal.portal_catalog(
# Fetch all portal type, as it is not allowed to change it
portal_type=["Software Instance", "Slave Instance"],
title={'query': software_title, 'key': 'ExactMatch'},
specialise_uid=hosting_subscription.getUid(),
# Do not fetch destroyed instances
# XXX slap_state=["start_requested", "stop_requested"],
validation_state="validated",
limit=2,
)
instance_count = len(request_software_instance_list)
if instance_count == 0:
request_software_instance = None
elif instance_count == 1:
request_software_instance = request_software_instance_list[0].getObject()
else:
raise ValueError, "Too many instances '%s' found: %s" % (software_title, [x.path for x in request_software_instance_list])
if (request_software_instance is None):
if (root_state == "destroyed"):
instance_found = False
else:
instance_found = True
# First time that the software instance is requested
# Create a new one
reference = "SOFTINST-%s" % portal.portal_ids.generateNewId(
id_group='slap_software_instance_reference',
id_generator='uid')
new_content_kw = {}
if is_slave == True:
software_instance_portal_type = "Slave Instance"
else:
software_instance_portal_type = "Software Instance"
certificate_dict = portal.portal_certificate_authority.getNewCertificate(reference)
new_content_kw['destination_reference'] = certificate_dict['id']
new_content_kw['ssl_key'] = certificate_dict['key']
new_content_kw['ssl_certificate'] = certificate_dict['certificate']
module = portal.getDefaultModule(portal_type="Software Instance")
request_software_instance = module.newContent(
portal_type=software_instance_portal_type,
title=software_title,
specialise_value=hosting_subscription,
reference=reference,
activate_kw={'tag': tag},
**new_content_kw
)
# request_software_instance.portal_workflow.doActionFor(request_software_instance, 'validate_action')
request_software_instance.validate()
graph[request_software_instance.getUid()] = []
else:
instance_found = True
# Update the predecessor category of the previous requester
predecessor = request_software_instance.getPredecessorRelatedValue(portal_type="Software Instance")
if (predecessor is None):
if (requester_instance.getPortalType() != "Hosting Subscription"):
raise ValueError('It is disallowed to request root software instance %s' % request_software_instance.getRelativeUrl())
else:
predecessor = requester_instance
predecessor_uid_list = predecessor.getPredecessorUidList()
predecessor_uid_list.remove(request_software_instance.getUid())
predecessor.edit(predecessor_uid_list=predecessor_uid_list)
graph[predecessor.getUid()] = predecessor_uid_list
if instance_found:
# Change desired state
promise_kw = {
'instance_xml': instance_xml,
'software_type': software_type,
'sla_xml': sla_xml,
'software_release': software_release_url_string,
'shared': is_slave,
}
request_software_instance_url = request_software_instance.getRelativeUrl()
context.REQUEST.set('request_instance', request_software_instance)
if (root_state == "started"):
request_software_instance.requestStart(**promise_kw)
elif (root_state == "stopped"):
request_software_instance.requestStop(**promise_kw)
elif (root_state == "destroyed"):
request_software_instance.requestDestroy(**promise_kw)
context.REQUEST.set('request_instance', None)
else:
raise ValueError, "state should be started, stopped or destroyed"
predecessor_list = requester_instance.getPredecessorList() + [request_software_instance_url]
uniq_predecessor_list = list(set(predecessor_list))
predecessor_list.sort()
uniq_predecessor_list.sort()
assert predecessor_list == uniq_predecessor_list, "%s != %s" % (predecessor_list, uniq_predecessor_list)
# update graph to reflect requested operation
graph[requester_instance.getUid()] = requester_instance.getPredecessorUidList() + [request_software_instance.getUid()]
# check if all elements are still connected and if there is no cycle
request_software_instance.checkConnected(graph, hosting_subscription.getUid())
request_software_instance.checkNotCyclic(graph)
requester_instance.edit(predecessor_list=predecessor_list)
else:
context.REQUEST.set('request_instance', None)
...@@ -48,172 +48,6 @@ ...@@ -48,172 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
requester_instance = state_change[\'object\']\n
portal = requester_instance.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
software_release_url_string = kwargs[\'software_release\']\n
software_title = kwargs["software_title"]\n
software_type = kwargs["software_type"]\n
instance_xml = kwargs["instance_xml"]\n
sla_xml = kwargs["sla_xml"]\n
is_slave = kwargs["shared"]\n
root_state = kwargs["state"]\n
except KeyError:\n
raise\n
raise TypeError, "RequesterInstance_request takes exactly 7 arguments"\n
\n
if is_slave not in [True, False]:\n
raise ValueError, "shared should be a boolean"\n
\n
# Hosting subscriptin is used as the root of the instance tree\n
if requester_instance.getPortalType() == "Hosting Subscription":\n
hosting_subscription = requester_instance\n
else:\n
hosting_subscription = requester_instance.getSpecialiseValue(portal_type="Hosting Subscription")\n
\n
# Instance can be moved from one requester to another\n
# Prevent creating two instances with the same title\n
tag = "%s_%s_inProgress" % (hosting_subscription.getUid(), software_title)\n
if (portal.portal_activities.countMessageWithTag(tag) > 0):\n
# The software instance is already under creation but can not be fetched from catalog\n
# As it is not possible to fetch informations, it is better to raise an error\n
raise NotImplementedError(tag)\n
\n
# graph allows to "simulate" tree change after requested operation\n
graph = {}\n
predecessor_list = hosting_subscription.getPredecessorValueList()\n
graph[hosting_subscription.getUid()] = [predecessor.getUid() for predecessor in predecessor_list]\n
while True:\n
try:\n
current_software_instance = predecessor_list.pop(0)\n
except IndexError:\n
break\n
current_software_instance_predecessor_list = current_software_instance.getPredecessorValueList() or []\n
graph[current_software_instance.getUid()] = [predecessor.getUid()\n
for predecessor in current_software_instance_predecessor_list]\n
predecessor_list.extend(current_software_instance_predecessor_list)\n
\n
# Check if it already exists\n
request_software_instance_list = portal.portal_catalog(\n
# Fetch all portal type, as it is not allowed to change it\n
portal_type=["Software Instance", "Slave Instance"],\n
title={\'query\': software_title, \'key\': \'ExactMatch\'},\n
specialise_uid=hosting_subscription.getUid(),\n
# Do not fetch destroyed instances\n
# XXX slap_state=["start_requested", "stop_requested"],\n
validation_state="validated",\n
limit=2,\n
)\n
instance_count = len(request_software_instance_list)\n
if instance_count == 0:\n
request_software_instance = None\n
elif instance_count == 1:\n
request_software_instance = request_software_instance_list[0].getObject()\n
else:\n
raise ValueError, "Too many instances \'%s\' found: %s" % (software_title, [x.path for x in request_software_instance_list])\n
\n
if (request_software_instance is None):\n
if (root_state == "destroyed"):\n
instance_found = False\n
else:\n
instance_found = True\n
# First time that the software instance is requested\n
\n
# Create a new one\n
reference = "SOFTINST-%s" % portal.portal_ids.generateNewId(\n
id_group=\'slap_software_instance_reference\',\n
id_generator=\'uid\')\n
\n
new_content_kw = {}\n
if is_slave == True:\n
software_instance_portal_type = "Slave Instance"\n
else:\n
software_instance_portal_type = "Software Instance"\n
certificate_dict = portal.portal_certificate_authority.getNewCertificate(reference)\n
new_content_kw[\'destination_reference\'] = certificate_dict[\'id\']\n
new_content_kw[\'ssl_key\'] = certificate_dict[\'key\']\n
new_content_kw[\'ssl_certificate\'] = certificate_dict[\'certificate\']\n
\n
module = portal.getDefaultModule(portal_type="Software Instance")\n
request_software_instance = module.newContent(\n
portal_type=software_instance_portal_type,\n
title=software_title,\n
specialise_value=hosting_subscription,\n
reference=reference,\n
activate_kw={\'tag\': tag},\n
**new_content_kw\n
)\n
# request_software_instance.portal_workflow.doActionFor(request_software_instance, \'validate_action\')\n
request_software_instance.validate()\n
graph[request_software_instance.getUid()] = []\n
\n
else:\n
instance_found = True\n
# Update the predecessor category of the previous requester\n
predecessor = request_software_instance.getPredecessorRelatedValue(portal_type="Software Instance")\n
if (predecessor is None):\n
if (requester_instance.getPortalType() != "Hosting Subscription"):\n
raise ValueError(\'It is disallowed to request root software instance %s\' % request_software_instance.getRelativeUrl())\n
else:\n
predecessor = requester_instance\n
predecessor_uid_list = predecessor.getPredecessorUidList()\n
predecessor_uid_list.remove(request_software_instance.getUid())\n
predecessor.edit(predecessor_uid_list=predecessor_uid_list)\n
graph[predecessor.getUid()] = predecessor_uid_list\n
\n
if instance_found:\n
\n
# Change desired state\n
promise_kw = {\n
\'instance_xml\': instance_xml,\n
\'software_type\': software_type,\n
\'sla_xml\': sla_xml,\n
\'software_release\': software_release_url_string,\n
\'shared\': is_slave,\n
}\n
request_software_instance_url = request_software_instance.getRelativeUrl()\n
context.REQUEST.set(\'request_instance\', request_software_instance)\n
if (root_state == "started"):\n
request_software_instance.requestStart(**promise_kw)\n
elif (root_state == "stopped"):\n
request_software_instance.requestStop(**promise_kw)\n
elif (root_state == "destroyed"):\n
request_software_instance.requestDestroy(**promise_kw)\n
context.REQUEST.set(\'request_instance\', None)\n
else:\n
raise ValueError, "state should be started, stopped or destroyed"\n
\n
predecessor_list = requester_instance.getPredecessorList() + [request_software_instance_url]\n
uniq_predecessor_list = list(set(predecessor_list))\n
predecessor_list.sort()\n
uniq_predecessor_list.sort()\n
\n
assert predecessor_list == uniq_predecessor_list, "%s != %s" % (predecessor_list, uniq_predecessor_list)\n
\n
# update graph to reflect requested operation\n
graph[requester_instance.getUid()] = requester_instance.getPredecessorUidList() + [request_software_instance.getUid()]\n
\n
# check if all elements are still connected and if there is no cycle\n
request_software_instance.checkConnected(graph, hosting_subscription.getUid())\n
request_software_instance.checkNotCyclic(graph)\n
\n
requester_instance.edit(predecessor_list=predecessor_list)\n
\n
else:\n
context.REQUEST.set(\'request_instance\', None)\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
...@@ -48,12 +48,6 @@ ...@@ -48,12 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>person = state_change[\'object\']\n
person.Base_checkConsistency()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
person = state_change['object']
portal = person.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
computer_title = kwargs['computer_title']
except KeyError:
raise TypeError, "Person_requestComputer takes exactly 1 argument"
tag = "%s_%s_computerInProgress" % (person.getUid(),
computer_title)
if (portal.portal_activities.countMessageWithTag(tag) > 0):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise NotImplementedError(tag)
computer_portal_type = "Computer"
computer_list = portal.portal_catalog.portal_catalog(portal_type=computer_portal_type, title=computer_title, limit=2)
if len(computer_list) == 2:
raise NotImplementedError
elif len(computer_list) == 1:
computer = computer_list[0]
else:
computer = None
if computer is None:
reference = "COMP-%s" % portal.portal_ids.generateNewId(
id_group='slap_computer_reference',
id_generator='uid')
module = portal.getDefaultModule(portal_type=computer_portal_type)
computer = module.newContent(
portal_type=computer_portal_type,
title=computer_title,
reference=reference,
capacity_scope='open',
activate_kw={'tag': tag}
)
computer.requestComputerRegistration()
computer.approveComputerRegistration()
computer = context.restrictedTraverse(computer.getRelativeUrl())
context.REQUEST.set("computer", computer.getRelativeUrl())
context.REQUEST.set("computer_url", computer.absolute_url())
context.REQUEST.set("computer_reference", computer.getReference())
...@@ -48,64 +48,6 @@ ...@@ -48,64 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
person = state_change[\'object\']\n
portal = person.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
computer_title = kwargs[\'computer_title\']\n
except KeyError:\n
raise TypeError, "Person_requestComputer takes exactly 1 argument"\n
\n
tag = "%s_%s_computerInProgress" % (person.getUid(), \n
computer_title)\n
if (portal.portal_activities.countMessageWithTag(tag) > 0):\n
# The software instance is already under creation but can not be fetched from catalog\n
# As it is not possible to fetch informations, it is better to raise an error\n
raise NotImplementedError(tag)\n
\n
computer_portal_type = "Computer"\n
computer_list = portal.portal_catalog.portal_catalog(portal_type=computer_portal_type, title=computer_title, limit=2)\n
\n
if len(computer_list) == 2:\n
raise NotImplementedError\n
elif len(computer_list) == 1:\n
computer = computer_list[0]\n
else:\n
computer = None\n
\n
if computer is None:\n
reference = "COMP-%s" % portal.portal_ids.generateNewId(\n
id_group=\'slap_computer_reference\',\n
id_generator=\'uid\')\n
module = portal.getDefaultModule(portal_type=computer_portal_type)\n
computer = module.newContent(\n
portal_type=computer_portal_type,\n
title=computer_title,\n
reference=reference,\n
capacity_scope=\'open\',\n
activate_kw={\'tag\': tag}\n
)\n
computer.requestComputerRegistration()\n
computer.approveComputerRegistration()\n
\n
\n
computer = context.restrictedTraverse(computer.getRelativeUrl())\n
\n
context.REQUEST.set("computer", computer.getRelativeUrl())\n
context.REQUEST.set("computer_url", computer.absolute_url())\n
context.REQUEST.set("computer_reference", computer.getReference())\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
person = state_change['object']
portal = person.getPortalObject()
# Get required arguments
kwargs = state_change.kwargs
# Required args
# Raise TypeError if all parameters are not provided
try:
software_release_url_string = kwargs['software_release']
software_title = kwargs["software_title"]
software_type = kwargs["software_type"]
instance_xml = kwargs["instance_xml"]
sla_xml = kwargs["sla_xml"]
is_slave = kwargs["shared"]
root_state = kwargs["state"]
except KeyError:
raise TypeError, "Person_requestSoftwareInstance takes exactly 7 arguments"
if is_slave not in [True, False]:
raise ValueError, "shared should be a boolean"
empty_parameter = """<?xml version="1.0" encoding="utf-8"?>
<instance>
</instance>"""
empty_parameter2 = """<?xml version='1.0' encoding='utf-8'?>
<instance/>"""
# XXX Hardcode default parameter
if (instance_xml == empty_parameter) or (instance_xml.startswith(empty_parameter2)):
if software_release_url_string == "http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/heads/erp5-frontend:/software/erp5/software.cfg":
instance_xml = """<?xml version="1.0" encoding="utf-8"?>
<instance>
<parameter id="frontend-instance-guid">SOFTINST-9238</parameter>
<parameter id="frontend-software-url">http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg</parameter>
</instance>
"""
hosting_subscription_portal_type = "Hosting Subscription"
tag = "%s_%s_inProgress" % (person.getUid(),
software_title)
if (portal.portal_activities.countMessageWithTag(tag) > 0):
# The software instance is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
raise NotImplementedError(tag)
# Check if it already exists
request_hosting_subscription_list = portal.portal_catalog(
portal_type=hosting_subscription_portal_type,
title={'query': software_title, 'key': 'ExactMatch'},
validation_state="validated",
default_destination_section_uid=person.getUid(),
limit=2,
)
if len(request_hosting_subscription_list) > 1:
raise NotImplementedError, "Too many hosting subscription %s found %s" % (software_title, [x.path for x in request_hosting_subscription_list])
elif len(request_hosting_subscription_list) == 1:
request_hosting_subscription = request_hosting_subscription_list[0].getObject()
if (request_hosting_subscription.getSlapState() == "destroy_requested") or \
(request_hosting_subscription.getTitle() != software_title) or \
(request_hosting_subscription.getValidationState() != "validated") or \
(request_hosting_subscription.getDestinationSection() != person.getRelativeUrl()):
raise NotImplementedError, "The system was not able to get the expected hosting subscription"
else:
if (root_state == "destroyed"):
# No need to create destroyed subscription.
context.REQUEST.set('request_hosting_subscription', None)
return
hosting_subscription_reference = "HOSTSUBS-%s" % context.getPortalObject().portal_ids\
.generateNewId(id_group='slap_hosting_subscription_reference', id_generator='uid')
request_hosting_subscription = portal.getDefaultModule(portal_type=hosting_subscription_portal_type).newContent(
portal_type=hosting_subscription_portal_type,
reference=hosting_subscription_reference,
title=software_title,
destination_section=person.getRelativeUrl(),
activate_kw={'tag': tag},
)
promise_kw = {
'instance_xml': instance_xml,
'software_type': software_type,
'sla_xml': sla_xml,
'software_release': software_release_url_string,
'shared': is_slave,
}
context.REQUEST.set('request_hosting_subscription', request_hosting_subscription)
# Change desired state
if (root_state == "started"):
request_hosting_subscription.requestStart(**promise_kw)
elif (root_state == "stopped"):
request_hosting_subscription.requestStop(**promise_kw)
elif (root_state == "destroyed"):
request_hosting_subscription.requestDestroy(**promise_kw)
context.REQUEST.set('request_hosting_subscription', None)
else:
raise ValueError, "state should be started, stopped or destroyed"
request_hosting_subscription.requestInstance(
software_release=software_release_url_string,
software_title=software_title,
software_type=software_type,
instance_xml=instance_xml,
sla_xml=sla_xml,
shared=is_slave,
state=root_state,
)
# Change the state at the end to allow to execute updateLocalRoles only once in the transaction
validation_state = request_hosting_subscription.getValidationState()
slap_state = request_hosting_subscription.getSlapState()
if validation_state == 'draft':
request_hosting_subscription.portal_workflow.doActionFor(request_hosting_subscription,
'validate_action')
if (validation_state != 'archived') and \
(slap_state == 'destroy_requested'):
# XXX TODO do not use validation workflow to filter destroyed subscription
request_hosting_subscription.archive()
...@@ -48,134 +48,6 @@ ...@@ -48,134 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
person = state_change[\'object\']\n
portal = person.getPortalObject()\n
# Get required arguments\n
kwargs = state_change.kwargs\n
\n
# Required args\n
# Raise TypeError if all parameters are not provided\n
try:\n
software_release_url_string = kwargs[\'software_release\']\n
software_title = kwargs["software_title"]\n
software_type = kwargs["software_type"]\n
instance_xml = kwargs["instance_xml"]\n
sla_xml = kwargs["sla_xml"]\n
is_slave = kwargs["shared"]\n
root_state = kwargs["state"]\n
except KeyError:\n
raise TypeError, "Person_requestSoftwareInstance takes exactly 7 arguments"\n
\n
if is_slave not in [True, False]:\n
raise ValueError, "shared should be a boolean"\n
\n
empty_parameter = """<?xml version="1.0" encoding="utf-8"?>\n
<instance>\n
</instance>"""\n
empty_parameter2 = """<?xml version=\'1.0\' encoding=\'utf-8\'?>\n
<instance/>"""\n
\n
\n
# XXX Hardcode default parameter\n
if (instance_xml == empty_parameter) or (instance_xml.startswith(empty_parameter2)):\n
if software_release_url_string == "http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/heads/erp5-frontend:/software/erp5/software.cfg": \n
instance_xml = """<?xml version="1.0" encoding="utf-8"?>\n
<instance>\n
<parameter id="frontend-instance-guid">SOFTINST-9238</parameter>\n
<parameter id="frontend-software-url">http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg</parameter>\n
</instance>\n
"""\n
\n
hosting_subscription_portal_type = "Hosting Subscription"\n
\n
tag = "%s_%s_inProgress" % (person.getUid(), \n
software_title)\n
\n
if (portal.portal_activities.countMessageWithTag(tag) > 0):\n
# The software instance is already under creation but can not be fetched from catalog\n
# As it is not possible to fetch informations, it is better to raise an error\n
raise NotImplementedError(tag)\n
\n
# Check if it already exists\n
request_hosting_subscription_list = portal.portal_catalog(\n
portal_type=hosting_subscription_portal_type,\n
title={\'query\': software_title, \'key\': \'ExactMatch\'},\n
validation_state="validated",\n
default_destination_section_uid=person.getUid(),\n
limit=2,\n
)\n
if len(request_hosting_subscription_list) > 1:\n
raise NotImplementedError, "Too many hosting subscription %s found %s" % (software_title, [x.path for x in request_hosting_subscription_list])\n
elif len(request_hosting_subscription_list) == 1:\n
request_hosting_subscription = request_hosting_subscription_list[0].getObject()\n
if (request_hosting_subscription.getSlapState() == "destroy_requested") or \\\n
(request_hosting_subscription.getTitle() != software_title) or \\\n
(request_hosting_subscription.getValidationState() != "validated") or \\\n
(request_hosting_subscription.getDestinationSection() != person.getRelativeUrl()):\n
raise NotImplementedError, "The system was not able to get the expected hosting subscription"\n
else:\n
if (root_state == "destroyed"):\n
# No need to create destroyed subscription.\n
context.REQUEST.set(\'request_hosting_subscription\', None)\n
return\n
hosting_subscription_reference = "HOSTSUBS-%s" % context.getPortalObject().portal_ids\\\n
.generateNewId(id_group=\'slap_hosting_subscription_reference\', id_generator=\'uid\')\n
request_hosting_subscription = portal.getDefaultModule(portal_type=hosting_subscription_portal_type).newContent(\n
portal_type=hosting_subscription_portal_type,\n
reference=hosting_subscription_reference,\n
title=software_title,\n
destination_section=person.getRelativeUrl(),\n
activate_kw={\'tag\': tag},\n
)\n
\n
promise_kw = {\n
\'instance_xml\': instance_xml,\n
\'software_type\': software_type,\n
\'sla_xml\': sla_xml,\n
\'software_release\': software_release_url_string,\n
\'shared\': is_slave,\n
}\n
\n
context.REQUEST.set(\'request_hosting_subscription\', request_hosting_subscription)\n
# Change desired state\n
if (root_state == "started"):\n
request_hosting_subscription.requestStart(**promise_kw)\n
elif (root_state == "stopped"):\n
request_hosting_subscription.requestStop(**promise_kw)\n
elif (root_state == "destroyed"):\n
request_hosting_subscription.requestDestroy(**promise_kw)\n
context.REQUEST.set(\'request_hosting_subscription\', None)\n
else:\n
raise ValueError, "state should be started, stopped or destroyed"\n
\n
request_hosting_subscription.requestInstance(\n
software_release=software_release_url_string,\n
software_title=software_title,\n
software_type=software_type,\n
instance_xml=instance_xml,\n
sla_xml=sla_xml,\n
shared=is_slave,\n
state=root_state,\n
)\n
\n
# Change the state at the end to allow to execute updateLocalRoles only once in the transaction\n
validation_state = request_hosting_subscription.getValidationState()\n
slap_state = request_hosting_subscription.getSlapState()\n
if validation_state == \'draft\':\n
request_hosting_subscription.portal_workflow.doActionFor(request_hosting_subscription,\n
\'validate_action\')\n
if (validation_state != \'archived\') and \\\n
(slap_state == \'destroy_requested\'):\n
# XXX TODO do not use validation workflow to filter destroyed subscription\n
request_hosting_subscription.archive()\n
]]></string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
if alarm.getParentValue().isSubscribed() and not alarm.isActive() and alarm.isEnabled():
alarm.activeSense()
...@@ -48,12 +48,6 @@ ...@@ -48,12 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>if alarm.getParentValue().isSubscribed() and not alarm.isActive() and alarm.isEnabled():\n
alarm.activeSense()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>alarm</string> </value> <value> <string>alarm</string> </value>
......
computer = state_change['object']
portal = computer.getPortalObject()
subject_list = computer.getSubjectList()
person_list = []
for subject in subject_list:
if subject:
person_list.extend([x.getObject() for x in portal.portal_catalog(validation_state="validated", portal_type="Person", default_email_text=subject)])
computer.edit(destination_section_value_list=person_list)
...@@ -48,21 +48,6 @@ ...@@ -48,21 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>computer = state_change[\'object\']\n
portal = computer.getPortalObject()\n
\n
subject_list = computer.getSubjectList()\n
person_list = []\n
\n
for subject in subject_list:\n
if subject:\n
person_list.extend([x.getObject() for x in portal.portal_catalog(validation_state="validated", portal_type="Person", default_email_text=subject)])\n
\n
computer.edit(destination_section_value_list=person_list)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
instance.bang(bang_tree=False, comment="Parameter changed")
...@@ -48,12 +48,6 @@ ...@@ -48,12 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
instance.bang(bang_tree=False, comment="Parameter changed")\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change["object"]
assert instance.getPortalType() == "Slave Instance"
instance.invalidate()
...@@ -48,15 +48,6 @@ ...@@ -48,15 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change["object"]\n
\n
assert instance.getPortalType() == "Slave Instance"\n
\n
instance.invalidate()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
software_instance = state_change['object']
portal = software_instance.getPortalObject()
if software_instance.getValidationState() == 'validated':
context.Alarm_safeTrigger(portal.portal_alarms.slapos_allocate_instance)
...@@ -48,16 +48,6 @@ ...@@ -48,16 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>software_instance = state_change[\'object\']\n
\n
portal = software_instance.getPortalObject()\n
\n
if software_instance.getValidationState() == \'validated\':\n
context.Alarm_safeTrigger(portal.portal_alarms.slapos_allocate_instance)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
installation = state_change['object']
computer = installation.getAggregateValue(portal_type="Computer")
if computer is not None:
computer.activate(
after_path_and_method_id=(installation.getPath(), ('immediateReindexObject', 'recursiveImmediateReindexObject'))).reindexObject()
...@@ -48,15 +48,6 @@ ...@@ -48,15 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>installation = state_change[\'object\']\n
computer = installation.getAggregateValue(portal_type="Computer")\n
if computer is not None:\n
computer.activate(\n
after_path_and_method_id=(installation.getPath(), (\'immediateReindexObject\', \'recursiveImmediateReindexObject\'))).reindexObject()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
instance = state_change['object']
partition = instance.getAggregateValue(portal_type="Computer Partition")
if partition is not None:
partition.activate(
after_path_and_method_id=(instance.getPath(), ('immediateReindexObject', 'recursiveImmediateReindexObject'))).reindexObject()
...@@ -48,15 +48,6 @@ ...@@ -48,15 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>instance = state_change[\'object\']\n
partition = instance.getAggregateValue(portal_type="Computer Partition")\n
if partition is not None:\n
partition.activate(\n
after_path_and_method_id=(instance.getPath(), (\'immediateReindexObject\', \'recursiveImmediateReindexObject\'))).reindexObject()\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
def reindexRecursively(document, after_tag=None):
tag = document.getPath() + '_reindex'
document.activate(after_tag=after_tag).reindexObject(activate_kw=dict(tag=tag))
for subdocument in document.getPredecessorValueList(portal_type='Software Instance'):
if subdocument.getValidationState() != 'invalidated':
reindexRecursively(subdocument, tag)
reindexRecursively(state_change['object'],)
...@@ -48,18 +48,6 @@ ...@@ -48,18 +48,6 @@
</object> </object>
</value> </value>
</item> </item>
<item>
<key> <string>_body</string> </key>
<value> <string>def reindexRecursively(document, after_tag=None):\n
tag = document.getPath() + \'_reindex\'\n
document.activate(after_tag=after_tag).reindexObject(activate_kw=dict(tag=tag))\n
for subdocument in document.getPredecessorValueList(portal_type=\'Software Instance\'):\n
if subdocument.getValidationState() != \'invalidated\':\n
reindexRecursively(subdocument, tag)\n
\n
reindexRecursively(state_change[\'object\'],)\n
</string> </value>
</item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>state_change</string> </value> <value> <string>state_change</string> </value>
......
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