Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Romain Courteaud
slapos.core
Commits
5d367b70
Commit
5d367b70
authored
Apr 26, 2024
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Plain Diff
Fixup Dupplication on Supply
See merge request
nexedi/slapos.core!623
parents
e71421ce
f767696d
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
42 additions
and
15 deletions
+42
-15
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.SlapOSTestCaseDefaultScenarioMixin.py
...omponents/test.erp5.SlapOSTestCaseDefaultScenarioMixin.py
+1
-0
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.SlapOSTestCaseMixin.py
...teItem/portal_components/test.erp5.SlapOSTestCaseMixin.py
+10
-4
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudComputeNodeSlapInterfaceWorkflow.py
...t.erp5.testSlapOSCloudComputeNodeSlapInterfaceWorkflow.py
+5
-2
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/compute_node_slap_interface_workflow/script_ComputeNode_requestSoftwareReleaseChange.py
...rkflow/script_ComputeNode_requestSoftwareReleaseChange.py
+25
-8
master/bt5/slapos_panel/SkinTemplateItem/portal_skins/slapos_panel/AllocationSupply_validateAndSupplyComputeNodeList.py
...anel/AllocationSupply_validateAndSupplyComputeNodeList.py
+1
-1
No files found.
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.SlapOSTestCaseDefaultScenarioMixin.py
View file @
5d367b70
...
...
@@ -179,6 +179,7 @@ class DefaultScenarioMixin(TestSlapOSSecurityMixin):
def
supplySoftware
(
self
,
server
,
url
,
state
=
'available'
):
self
.
portal
.
portal_slap
.
supplySupply
(
url
,
server
.
getReference
(),
state
)
self
.
tic
()
self
.
cleanUpRequest
()
software_installation
=
self
.
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
'Software Installation'
,
...
...
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.SlapOSTestCaseMixin.py
View file @
5d367b70
...
...
@@ -142,10 +142,9 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
_custom_additional_bt5_list
=
[]
# Used by testSlapOSERP5GroupRoleSecurity.TestSlapOSGroupRoleSecurityCoverage for
# searh classes for assert overage
# sear
c
h classes for assert overage
security_group_role_test_id_list
=
[
'test.erp5.testSlapOSERP5GroupRoleSecurity'
]
def
afterSetUp
(
self
):
testSlapOSMixin
.
afterSetUp
(
self
)
self
.
changeSkin
(
'View'
)
...
...
@@ -156,6 +155,14 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
"""Overwrite this function on project context to tweak production focus tests"""
pass
def
cleanUpRequest
(
self
):
""" set None some values that can cause problems in tests
"""
for
key
in
self
.
portal
.
REQUEST
.
keys
():
if
key
.
endswith
(
"_inProgress"
):
# Reset values set on script_ComputeNode_requestSoftwareReleaseChange
self
.
portal
.
REQUEST
.
set
(
key
,
None
)
def
addAccountingManagerAssignment
(
self
,
person
):
person
.
newContent
(
portal_type
=
'Assignment'
,
...
...
@@ -290,7 +297,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
project_reference
=
project
.
getReference
()
)
# As the software url does not match any service, and any trade condition
# As the software url does not match any service, and any trade condition
# no instance is automatically created.
# except if we fake Item_getSubscriptionStatus
with
TemporaryAlarmScript
(
self
.
portal
,
'Item_getSubscriptionStatus'
,
"'subscribed'"
):
...
...
@@ -352,7 +359,6 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
self
.
portal
.
portal_workflow
.
_jumpToStateFor
(
self
.
software_instance
,
'start_requested'
)
self
.
software_instance
.
validate
()
self
.
requested_software_instance
.
edit
(
title
=
self
.
generateNewSoftwareTitle
(),
reference
=
"TESTSI-%s"
%
self
.
generateNewId
(),
...
...
master/bt5/slapos_cloud/TestTemplateItem/portal_components/test.erp5.testSlapOSCloudComputeNodeSlapInterfaceWorkflow.py
View file @
5d367b70
...
...
@@ -20,7 +20,6 @@
##############################################################################
from
erp5.component.test.SlapOSTestCaseMixin
import
SlapOSTestCaseMixin
import
transaction
from
unittest
import
expectedFailure
from
Products.ERP5Type.Errors
import
UnsupportedWorkflowMethod
...
...
@@ -212,6 +211,7 @@ class TestSlapOSCoreComputeNodeSlapInterfaceWorkflow(SlapOSTestCaseMixin):
self
.
compute_node
.
requestSoftwareRelease
(
software_release_url
=
url
,
state
=
'available'
)
self
.
tic
()
self
.
cleanUpRequest
()
self
.
login
()
software_installation
=
self
.
compute_node
.
getAggregateRelatedValue
(
portal_type
=
'Software Installation'
)
...
...
@@ -245,7 +245,6 @@ class TestSlapOSCoreComputeNodeSlapInterfaceWorkflow(SlapOSTestCaseMixin):
state
=
'available'
)
transaction
.
abort
()
@
expectedFailure
def
test_requestSoftwareRelease_same_transaction
(
self
):
self
.
person_user
=
self
.
makePerson
(
self
.
project
)
self
.
addProjectProductionManagerAssignment
(
self
.
person_user
,
self
.
project
)
...
...
@@ -641,6 +640,7 @@ class TestSlapOSCoreComputeNodeSlapInterfaceWorkflowSupply(SlapOSTestCaseMixin):
software_installation
.
getReference
())
self
.
tic
()
self
.
cleanUpRequest
()
self
.
compute_node
.
requestSoftwareRelease
(
state
=
"available"
,
software_release_url
=
software_release
)
...
...
@@ -673,6 +673,7 @@ class TestSlapOSCoreComputeNodeSlapInterfaceWorkflowSupply(SlapOSTestCaseMixin):
software_installation
.
getReference
())
self
.
tic
()
self
.
cleanUpRequest
()
self
.
compute_node
.
requestSoftwareRelease
(
state
=
"destroyed"
,
software_release_url
=
software_release
)
...
...
@@ -714,6 +715,7 @@ class TestSlapOSCoreComputeNodeSlapInterfaceWorkflowSupply(SlapOSTestCaseMixin):
software_installation
.
getReference
())
self
.
tic
()
self
.
cleanUpRequest
()
self
.
compute_node
.
requestSoftwareRelease
(
state
=
"destroyed"
,
software_release_url
=
software_release
)
...
...
@@ -761,6 +763,7 @@ class TestSlapOSCoreComputeNodeSlapInterfaceWorkflowSupply(SlapOSTestCaseMixin):
software_installation
.
getReference
())
self
.
tic
()
self
.
cleanUpRequest
()
self
.
compute_node
.
requestSoftwareRelease
(
state
=
"destroyed"
,
software_release_url
=
software_release
)
...
...
master/bt5/slapos_cloud/WorkflowTemplateItem/portal_workflow/compute_node_slap_interface_workflow/script_ComputeNode_requestSoftwareReleaseChange.py
View file @
5d367b70
...
...
@@ -14,7 +14,7 @@ except KeyError:
tag
=
"%s_%s_inProgress"
%
(
compute_node
.
getUid
(),
software_release_url
)
if
(
portal
.
portal_activities
.
countMessageWithTag
(
tag
)
>
0
):
if
(
portal
.
portal_activities
.
countMessageWithTag
(
tag
)
>
0
or
compute_node
.
REQUEST
.
get
(
tag
)
==
tag
):
# 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
)
...
...
@@ -26,22 +26,38 @@ software_installation_list = portal.portal_catalog(
url_string
=
{
'query'
:
software_release_url
,
'key'
:
'ExactMatch'
},
validation_state
=
"validated"
,
default_aggregate_uid
=
compute_node
.
getUid
(),
limit
=
2
,
# takes only a portion, usually it will be 1 or 0
limit
=
10
,
)
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
()
def
test_software_installation
(
software_installation
):
if
(
software_installation
.
getUrlString
()
!=
software_release_url
)
or
\
(
software_installation
.
getValidationState
()
!=
"validated"
)
or
\
(
software_installation
.
getAggregate
()
!=
compute_node
.
getRelativeUrl
()):
raise
NotImplementedError
(
"The system was not able to get the expected Software Installation"
)
return
software_installation
if
len
(
software_installation_list
)
>
1
:
software_installation
=
test_software_installation
(
software_installation_list
[
0
].
getObject
())
for
software_installation_found
in
list
(
software_installation_list
)[
1
:]:
test_software_installation
(
software_installation_found
.
getObject
())
if
software_installation_found
.
getSlapState
()
==
software_installation
.
getSlapState
():
software_installation_found
.
requestDestroy
(
activate_kw
=
{
'tag'
:
tag
})
software_installation_found
.
invalidate
()
else
:
raise
NotImplementedError
(
"Too many Software Installation %s found %s (clean up not possible)"
%
(
software_release_url
,
[
x
.
path
for
x
in
software_installation_list
]))
elif
len
(
software_installation_list
)
==
1
:
software_installation
=
test_software_installation
(
software_installation_list
[
0
].
getObject
())
else
:
if
(
state
==
"destroyed"
):
# No need to create destroyed subscription.
return
software_installation_reference
=
"SOFTINSTALL-%s"
%
context
.
getPortalObject
()
.
portal_ids
\
software_installation_reference
=
"SOFTINSTALL-%s"
%
portal
.
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
,
...
...
@@ -51,6 +67,7 @@ else:
follow_up_value
=
compute_node
.
getFollowUpValue
(),
activate_kw
=
{
'tag'
:
tag
}
)
compute_node
.
REQUEST
.
set
(
tag
,
tag
)
# Change desired state
if
(
state
==
"available"
):
...
...
@@ -67,4 +84,4 @@ if validation_state == 'draft':
portal
.
portal_workflow
.
doActionFor
(
software_installation
,
'validate_action'
)
co
ntext
.
REQUEST
.
set
(
'software_installation_url'
,
software_installation
.
getRelativeUrl
())
co
mpute_node
.
REQUEST
.
set
(
'software_installation_url'
,
software_installation
.
getRelativeUrl
())
master/bt5/slapos_panel/SkinTemplateItem/portal_skins/slapos_panel/AllocationSupply_validateAndSupplyComputeNodeList.py
View file @
5d367b70
...
...
@@ -8,7 +8,7 @@ for allocation_supply_line in allocation_supply.contentValues(portal_type="Alloc
for
allocation_supply_cell
in
allocation_supply_line
.
contentValues
(
portal_type
=
"Allocation Supply Cell"
):
if
allocation_supply_cell
.
isAllocable
():
release_variation
=
allocation_supply_cell
.
getSoftwareReleaseValue
()
if
release_variation
is
not
None
:
if
release_variation
is
not
None
and
release_variation
.
getUrlString
()
not
in
url_string_list
:
url_string_list
.
append
(
release_variation
.
getUrlString
())
for
compute_node
in
allocation_supply
.
getAggregateValueList
(
portal_type
=
"Compute Node"
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment