Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unit tests for Minion Manager RPC Server #258

Merged
merged 1 commit into from
Nov 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions coriolis/minion_manager/rpc/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,7 @@ def _select_machine(minion_pool, exclude=None):
" the DB for pool '%s' for use with action '%s'. Clearing "
"any DB entries added so far (%s). Error was: %s",
minion_pool.id, action_id,
[m.id for m in new_machine_db_entries_added],
new_machine_db_entries_added,
smiclea marked this conversation as resolved.
Show resolved Hide resolved
utils.get_exception_details())
try:
LOG.debug(
Expand All @@ -739,13 +739,13 @@ def _select_machine(minion_pool, exclude=None):
utils.get_exception_details())
for new_machine in new_machine_db_entries_added:
try:
db_api.delete_minion_machine(ctxt, new_machine.id)
db_api.delete_minion_machine(ctxt, new_machine)
except Exception:
LOG.warn(
"Error occurred while removing minion machine entry "
"'%s' from the DB. This may leave the pool in an "
"inconsistent state. Error trace was: %s" % (
new_machine.id, utils.get_exception_details()))
new_machine, utils.get_exception_details()))
continue
raise

Expand Down
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# perform health checks for powered on machines
# skip health checks for non-powered on machines
smiclea marked this conversation as resolved.
Show resolved Hide resolved
# skip health checks for non-healthcheckable (ex. IN_USE)
- config:
minion_pool:
id: minion_pool1
minimum_minions: 4
minion_retention_strategy: delete
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion2
allocation_status: ERROR
power_status: POWERED_ERROR
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion4
allocation_status: IN_USE
power_status: POWERED_ON
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-healthcheck
- pool-minion_pool1-machine-minion3-healthcheck
# "include" are the db calls that must be present
# "exclude" are the db calls that must not be present
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion3
allocation_status: HEALTHCHECKING
exclude:
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING

# power off machines that are not needed and are expired
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
smiclea marked this conversation as resolved.
Show resolved Hide resolved
minion_retention_strategy: poweroff
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion2
allocation_status: AVAILABLE
power_status: POWERED_ON
# not expired
last_used_at: [2099, 1, 1, 0, 0, 0]
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_OFF
- id: minion4
allocation_status: ERROR_DEPLOYING
power_status: POWERED_ON
- id: minion5
allocation_status: ERROR
power_status: POWERED_ERROR
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-power-off
- pool-minion_pool1-machine-minion2-healthcheck # not expired
- pool-minion_pool1-machine-minion4-healthcheck
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: POWERING_OFF
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion4
allocation_status: HEALTHCHECKING
exclude:
- set_minion_machine_allocation_status:
id: minion3
allocation_status: POWERING_OFF
- set_minion_machine_allocation_status:
id: minion5
allocation_status: HEALTHCHECKING

# delete machines that are not needed
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: delete
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERING_OFF
- id: minion2
allocation_status: ERROR
power_status: POWERED_ERROR
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion4
allocation_status: ERROR_DEPLOYING
power_status: POWERED_ON
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-deallocation
- pool-minion_pool1-machine-minion3-healthcheck
- pool-minion_pool1-machine-minion4-healthcheck
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: DEALLOCATING
- set_minion_machine_allocation_status:
id: minion3
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion4
allocation_status: HEALTHCHECKING
exclude:
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion2
allocation_status: DEALLOCATING

# invalid retention strategy
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: invalid
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERING_OFF
- id: minion2
allocation_status: ERROR
power_status: POWERED_ERROR
- id: minion3
allocation_status: AVAILABLE
power_status: POWERED_ON
- id: minion4
allocation_status: ERROR_DEPLOYING
power_status: POWERED_ON
expect:
exception: InvalidMinionPoolState

# no machines to healthcheck
- config:
minion_pool:
id: minion_pool1
# minimum_minions 1 means we have too many minions
minimum_minions: 1
minion_max_idle_time: 0
minion_retention_strategy: poweroff
minion_machines:
- id: minion1
allocation_status: AVAILABLE
power_status: POWERED_ON
# is expired, no healthcheck
last_used_at: [2000, 1, 1, 0, 0, 0]
- id: minion2
allocation_status: AVAILABLE
# not powered on, no healthcheck
power_status: POWERED_OFF
- id: minion3
allocation_status: ERROR
power_status: POWERED_ERROR
expect:
result:
flow_tasks:
- pool-minion_pool1-machine-minion1-power-off
db_calls:
include:
- set_minion_machine_allocation_status:
id: minion1
allocation_status: POWERING_OFF
exclude:
- set_minion_machine_allocation_status:
id: minion2
allocation_status: HEALTHCHECKING
- set_minion_machine_allocation_status:
id: minion3
allocation_status: HEALTHCHECKING
Loading