Skip to content

Commit

Permalink
Merge pull request #78 from salsadigitalauorg/feature/update-deployta…
Browse files Browse the repository at this point in the history
…rgetconfig-task

Feature/update deploytargetconfig task
  • Loading branch information
yusufhm authored Feb 27, 2024
2 parents 4629d4b + 8498ccb commit cdb077a
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 32 deletions.
48 changes: 32 additions & 16 deletions api/plugins/action/deploy_target_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,22 @@ def run(self, tmp=None, task_vars=None):

for project in lagoonProject.projects:
if state == "present":
changes = determine_required_updates(
addition_required, deletion_required = determine_required_updates(
project["deployTargetConfigs"],
configs,
)
result['changed'] = False
if len(changes) > 0:
for config in changes:

# Handle deletions for deletion_required IDs
if replace and len(deletion_required) > 0:
for config_id in deletion_required:
self._display.vvvv(f"deleting config with ID {config_id}")
DeployTargetConfig(self.client).delete(project['id'], config_id)
result['changed'] = True

# Process additions and updates
if len(addition_required) > 0:
for config in addition_required:
if replace and config.get('_existing_id'):
self._display.vvvv(f"deleting config {config}")
DeployTargetConfig(self.client).delete(
Expand Down Expand Up @@ -81,28 +90,35 @@ def run(self, tmp=None, task_vars=None):
return result

def determine_required_updates(existing_configs, desired_configs):
updates_required = []
for config in desired_configs:
addition_required = []
deletion_required = [
config['id']
for config in existing_configs
if not any(
config['branches'] == desired['branches']
for desired in desired_configs
)
]

for desired in desired_configs:
found = False
uptodate = True
for existing_config in existing_configs:
if existing_config['branches'] != config['branches']:
if existing_config['branches'] != desired['branches']:
continue

config['_existing_id'] = existing_config['id']
desired['_existing_id'] = existing_config['id']
found = True

if (existing_config['pullrequests'] != config['pullrequests'] or
str(existing_config['deployTarget']['id']) != str(config['deployTarget']) or
str(existing_config['weight']) != str(config['weight'])):
config['_existing_id'] = existing_config['id']
# Mark for update (or in this context, addition) if there are discrepancies in any key property
if (existing_config['pullrequests'] != desired['pullrequests'] or
str(existing_config['deployTarget']['id']) != str(desired['deployTarget']) or
str(existing_config['weight']) != str(desired['weight'])):
desired['_existing_id'] = existing_config['id']
uptodate = False
break

if found:
break

if not found or not uptodate:
updates_required.append(config)
addition_required.append(desired)

return updates_required
return addition_required, deletion_required
44 changes: 28 additions & 16 deletions api/tests/unit/plugins/action/test_determine_updates_required.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,12 @@ def test_update_required(self):
}
]

updates_required = determine_required_updates(existing_configs, desired_configs)
addition_required, deletion_required = determine_required_updates(existing_configs, desired_configs)

assert len(updates_required) == 1
assert updates_required[0]['branches'] == '^(main)$'
assert updates_required[0]['deployTarget'] == 1
assert len(addition_required) == 1, "Expected one addition required"
assert addition_required[0]['branches'] == '^(main)$', "Expected branches to match ^(main)$"
assert addition_required[0]['deployTarget'] == 1, "Expected deployTarget to be 1"
assert len(deletion_required) == 0, "Expected no deletions required"

def test_update_not_required(self):
existing_configs = [
Expand All @@ -43,9 +44,10 @@ def test_update_not_required(self):
}
]

updates_required = determine_required_updates(existing_configs, desired_configs)
addition_required, deletion_required = determine_required_updates(existing_configs, desired_configs)

assert len(updates_required) == 0
assert len(addition_required) == 0, "Expected no additions required"
assert len(deletion_required) == 0, "Expected no deletions required"

def test_update_required_weight(self):
existing_configs = [
Expand All @@ -66,10 +68,11 @@ def test_update_required_weight(self):
}
]

updates_required = determine_required_updates(existing_configs, desired_configs)
addition_required, deletion_required = determine_required_updates(existing_configs, desired_configs)

assert len(updates_required) == 1
assert updates_required[0]['weight'] == 2
assert len(addition_required) == 1, "Expected one addition required due to weight change"
assert addition_required[0]['weight'] == 2, "Expected weight to be updated to 2"
assert len(deletion_required) == 0, "Expected no deletions required"

def test_update_required_cluster(self):
existing_configs = [
Expand All @@ -90,10 +93,11 @@ def test_update_required_cluster(self):
}
]

updates_required = determine_required_updates(existing_configs, desired_configs)
addition_required, deletion_required = determine_required_updates(existing_configs, desired_configs)

assert len(updates_required) == 1
assert updates_required[0]['deployTarget'] == 2
assert len(addition_required) == 1, "Expected one addition required due to deployTarget change"
assert addition_required[0]['deployTarget'] == 2, "Expected deployTarget to be updated to 2"
assert len(deletion_required) == 0, "Expected no deletions required"

def test_orphan_existing(self):
existing_configs = [
Expand All @@ -114,14 +118,22 @@ def test_orphan_existing(self):
]
desired_configs = [
{
'branches': '^(main)$',
'branches': '^(production|standby)$',
'deployTarget': 1,
'pullrequests': 'false',
'weight': 1
},
{
'branches': '^(develop|master)$',
'deployTarget': 2,
'pullrequests': 'true',
'weight': 1
}
]

updates_required = determine_required_updates(existing_configs, desired_configs)
addition_required, deletion_required = determine_required_updates(existing_configs, desired_configs)

assert len(updates_required) == 1
assert updates_required[0]['deployTarget'] == 2
assert len(addition_required) == 2, "Expected two additions required due to changes"
assert addition_required[0]['deployTarget'] == 1, "Expected the first addition to have deployTarget 1"
assert addition_required[1]['deployTarget'] == 2, "Expected the second addition to have deployTarget 2"
assert len(deletion_required) == 2, "Expecting 2 deletion of orphan deploytarget config"

0 comments on commit cdb077a

Please sign in to comment.