Commit 9485016a authored by Romain Courteaud's avatar Romain Courteaud

slapos_pdm: do not propose again to upgrade if decision has been rejected

parent 4e671e0d
......@@ -79,6 +79,15 @@ if len(allocation_cell_list) == 1:
if compute_node is not None:
assert compute_node.getRelativeUrl() in allocation_cell_list[0].getParentValue().getParentValue().getAggregateList()
for previous_upgrade_decision in portal.portal_catalog(
portal_type='Upgrade Decision',
aggregate__uid=instance_tree.getUid(),
simulation_state=['rejected']
):
# If same upgrade decision has been rejected, do nothing
if previous_upgrade_decision.getSoftwareReleaseValue().getUrlString() == allocation_cell_list[0].getSoftwareReleaseValue().getUrlString():
return
decision_title = 'A new upgrade is available for %s' % instance_tree.getTitle()
upgrade_decision = portal.upgrade_decision_module.newContent(
portal_type='Upgrade Decision',
......
......@@ -236,7 +236,7 @@ class TestSlapOSPDMCreateUpgradeDecisionSkins(TestSlapOSPDMMixinSkins):
upgrade_decision,
instance_tree, software_product, new_release_variation, type_variation
)
upgrade_decision.reject()
upgrade_decision.cancel()
self.tic()
self.checkCreatedUpgradeDecision(
......@@ -244,6 +244,50 @@ class TestSlapOSPDMCreateUpgradeDecisionSkins(TestSlapOSPDMMixinSkins):
instance_tree, software_product, new_release_variation, type_variation
)
def test_createUpgradeDecision_notAllocated_newRelease_rejectedDecisionSameRelease(self):
software_product, _, type_variation, compute_node, instance_tree = self.bootstrapAllocableInstanceTree()
new_release_variation = self._makeSoftwareRelease(software_product)
self.addAllocationSupply("for compute node 2", compute_node, software_product,
new_release_variation, type_variation)
self.tic()
upgrade_decision = instance_tree.InstanceTree_createUpgradeDecision()
self.checkCreatedUpgradeDecision(
upgrade_decision,
instance_tree, software_product, new_release_variation, type_variation
)
upgrade_decision.reject()
self.tic()
self.assertEqual(None, instance_tree.InstanceTree_createUpgradeDecision())
def test_createUpgradeDecision_notAllocated_newRelease_rejectedDecisionAnotherRelease(self):
software_product, _, type_variation, compute_node, instance_tree = self.bootstrapAllocableInstanceTree()
new_release_variation = self._makeSoftwareRelease(software_product)
supply = self.addAllocationSupply("for compute node 2", compute_node, software_product,
new_release_variation, type_variation)
self.tic()
upgrade_decision = instance_tree.InstanceTree_createUpgradeDecision()
self.checkCreatedUpgradeDecision(
upgrade_decision,
instance_tree, software_product, new_release_variation, type_variation
)
upgrade_decision.reject()
supply.invalidate()
self.tic()
new_release_variation2 = self._makeSoftwareRelease(software_product)
supply = self.addAllocationSupply("for compute node 3", compute_node, software_product,
new_release_variation2, type_variation)
self.tic()
self.checkCreatedUpgradeDecision(
instance_tree.InstanceTree_createUpgradeDecision(),
instance_tree, software_product, new_release_variation2, type_variation
)
##########################################################################
# Shared not allocated
##########################################################################
......
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