diff --git a/README.md b/README.md index 789f7f66..33654627 100644 --- a/README.md +++ b/README.md @@ -301,6 +301,7 @@ deployed then see file `actions.yaml`. * `disable` * `enable` * `hugepagereport` +* `instance-count` * `list-compute-nodes` * `node-name` * `openstack-upgrade` diff --git a/actions.yaml b/actions.yaml index 934468b9..0afaad42 100644 --- a/actions.yaml +++ b/actions.yaml @@ -12,6 +12,8 @@ register-to-cloud: README.md, section 'Cloud downscaling'. openstack-upgrade: description: Perform openstack upgrades. Config option action-managed-upgrade must be set to True. +instance-count: + description: Return number of VM instances running on this unit. list-compute-nodes: description: List all nova-compute nodes registered in the Openstack cloud. node-name: diff --git a/actions/cloud.py b/actions/cloud.py index b704d595..9a78d5b8 100755 --- a/actions/cloud.py +++ b/actions/cloud.py @@ -137,6 +137,14 @@ def register_to_cloud(): }) +def instance_count(): + """Implementation of `instance-count` action.""" + nova = cloud_utils.nova_client() + vm_count = cloud_utils.running_vms(nova) + + function_set({'instance-count': vm_count}) + + def list_computes(): """Implementation of `list-compute-nodes` action.""" nova = cloud_utils.nova_client() @@ -156,6 +164,7 @@ ACTIONS = { 'enable': enable, 'remove-from-cloud': remove_from_cloud, 'register-to-cloud': register_to_cloud, + 'instance-count': instance_count, 'list-compute-nodes': list_computes, 'node-name': node_name, } diff --git a/actions/instance-count b/actions/instance-count new file mode 120000 index 00000000..126acea1 --- /dev/null +++ b/actions/instance-count @@ -0,0 +1 @@ +cloud.py \ No newline at end of file diff --git a/unit_tests/test_actions_cloud.py b/unit_tests/test_actions_cloud.py index 77426636..5b1c83f5 100644 --- a/unit_tests/test_actions_cloud.py +++ b/unit_tests/test_actions_cloud.py @@ -247,6 +247,19 @@ class TestRegisterToCloud(_ActionTestCase): cloud.function_fail.assert_not_called() +class TestInstanceCount(_ActionTestCase): + NAME = 'instance-count' + + def test_action_instance_count(self): + """Test 'instance-count' action""" + running_vms = 2 + cloud.cloud_utils.running_vms.return_value = 2 + + self.call_action() + + cloud.function_set.assert_called_with({'instance-count': running_vms}) + + class TestListComputeNodes(_ActionTestCase): NAME = 'list-compute-nodes'