Skip to content
Draft
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
29 changes: 29 additions & 0 deletions actions/server.find.shutoff.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
description: Find Servers in SHUTOFF state
enabled: true
entry_point: src/openstack_actions.py
name: server.find.shutoff
parameters:
lib_entry_point:
default: workflows.find_shutdown_servers.find_shutdown_servers
immutable: true
type: string
cloud_account:
description: The clouds.yaml account to use whilst performing this action
required: true
type: string
default: "dev"
enum:
- "dev"
- "prod"
minimum_days:
description: minimum number of days a server needs to be in SHUTOFF state to be included
required: true
type: integer
default: 30
requires_openstack:
default: true
immutable: true
type: boolean

runner_type: python-script
10 changes: 10 additions & 0 deletions config.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,16 @@ hypervisor_sensor:
type: "integer"
description: "Number of seconds before forcefully deleting previous state to update hypervisors stuck in a state"

openstack_server_sensor:
description: "OpenStack Server sensors specific settings"
type: "object"
required: false
additionalProperties: false
properties:
shutoff_limit:
type: "number"
description: "Number of days a StackStorm server can be in SHUTOFF state before triggering the sensor"

flavor_sensor:
description: "Flavor sensor specific settings."
type: "object"
Expand Down
33 changes: 33 additions & 0 deletions lib/workflows/find_shutdown_servers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import logging

from openstack.connection import Connection
from apis.openstack_query_api.server_queries import find_shutoff_servers

logger = logging.getLogger(__name__)


def find_shutdown_servers(
conn: Connection,
minimum_days: int,
) -> None:
"""
Find servers in SHUTOFF state

:param conn: openstack connection object
:type conn: Connection
:param minimum_days: minimum number of days a Server must be SHUTOFF to be included in the results
:type minimum_days: int
:return: None
:rtype: None
"""
logger.info(
"Finding all servers in SHUTOFF state for longer than %s days", minimum_days
)

servers_q = find_shutoff_servers(
cloud_account=conn.name, days_threshold=minimum_days
)
# servers_q is an object of class ServerQuery
servers = servers_q.to_objects()
for server in servers:
logger.info("Found server with ID %s and Name %s", server.id, server.name)