diff --git a/CHANGES.md b/CHANGES.md index 782a1c2..b7e8a6a 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,6 @@ +## 1.1.4 +- Updated bestfit action to only return image datastores + ## 1.1.3 - Added actions for looking up attributes on datastores diff --git a/actions/vm_bestfit.py b/actions/vm_bestfit.py index dbb35ef..49a959a 100755 --- a/actions/vm_bestfit.py +++ b/actions/vm_bestfit.py @@ -71,10 +71,16 @@ def get_storage(self, cluster, datastore_filter_strategy, datastore_filter, disk most_space = 0 for ds_id in cluster.DATASTORES.ID: ds = self.one.datastore.info(ds_id) + # only allow placing onto a datastore in "ON" mode (STATE 0) if ds.STATE != 0: continue + # Need to find an IMAGE datastore to put it on + # TYPES: 0=IMAGE, 1=SYSTEM, 3=FILE + if ds.TYPE != 0: + continue + # The following function returns False if the name of the datastore # matches any of the regex filters if self.filter_datastores(ds.NAME, datastore_filter_strategy, datastore_filter): diff --git a/pack.yaml b/pack.yaml index c10a07e..4a27548 100755 --- a/pack.yaml +++ b/pack.yaml @@ -3,7 +3,7 @@ ref: open_nebula name: open_nebula description: Open Nebula stackstorm_version: ">=2.9.0" -version: 1.1.3 +version: 1.1.4 author: John Schoewe email: john.schoewe@encore.tech contributors: diff --git a/tests/test_action_vm_bestfit.py b/tests/test_action_vm_bestfit.py index 806eabd..9e9343d 100644 --- a/tests/test_action_vm_bestfit.py +++ b/tests/test_action_vm_bestfit.py @@ -38,7 +38,7 @@ def test_run(self, mock_get_storage, mock_get_host, mock_pyone_session_create): open_nebula = 'open_nebula' mock_get_host.return_value = MagicMock(NAME='host1', ID=1) - mock_get_storage.return_value = MagicMock(NAME='datastore1', ID=1) + mock_get_storage.return_value = MagicMock(NAME='datastore1', ID=1, TYPE=0) # Mock the clusterpool and cluster objects cluster_mock = MagicMock() @@ -125,9 +125,9 @@ def test_get_storage_from_disks(self): cluster.DATASTORES.ID = [1, 2, 3] disks = [{'datastore': 'datastore2'}] - datastore1 = MagicMock(NAME='datastore1', STATE=0) - datastore2 = MagicMock(NAME='datastore2', STATE=0) - datastore3 = MagicMock(NAME='datastore3', STATE=0) + datastore1 = MagicMock(NAME='datastore1', STATE=0, TYPE=0) + datastore2 = MagicMock(NAME='datastore2', STATE=0, TYPE=0) + datastore3 = MagicMock(NAME='datastore3', STATE=0, TYPE=0) self.action.one = MagicMock() self.action.one.datastore.info.side_effect = [datastore1, datastore2, datastore3] @@ -144,9 +144,9 @@ def test_get_storage_most_free_space(self): cluster.DATASTORES.ID = [1, 2, 3] disks = [{'datastore': 'automatic'}] - datastore1 = MagicMock(NAME='datastore1', FREE_MB=1000, STATE=0) - datastore2 = MagicMock(NAME='datastore2', FREE_MB=2000, STATE=0) - datastore3 = MagicMock(NAME='datastore3', FREE_MB=500, STATE=0) + datastore1 = MagicMock(NAME='datastore1', FREE_MB=1000, STATE=0, TYPE=0) + datastore2 = MagicMock(NAME='datastore2', FREE_MB=2000, STATE=0, TYPE=0) + datastore3 = MagicMock(NAME='datastore3', FREE_MB=500, STATE=0, TYPE=0) self.action.one = MagicMock() self.action.one.datastore.info.side_effect = [datastore1, datastore2, datastore3] @@ -163,9 +163,9 @@ def test_get_storage_filtered_out(self): cluster.DATASTORES.ID = [1, 2, 3] disks = [{'datastore': 'automatic'}] - datastore1 = MagicMock(NAME='datastore1', FREE_MB=1000, STATE=0) - datastore2 = MagicMock(NAME='datastore2', FREE_MB=2000, STATE=0) - datastore3 = MagicMock(NAME='datastore3', FREE_MB=500, STATE=0) + datastore1 = MagicMock(NAME='datastore1', FREE_MB=1000, STATE=0, TYPE=0) + datastore2 = MagicMock(NAME='datastore2', FREE_MB=2000, STATE=0, TYPE=0) + datastore3 = MagicMock(NAME='datastore3', FREE_MB=500, STATE=0, TYPE=0) self.action.one = MagicMock() self.action.one.datastore.info.side_effect = [datastore1, datastore2, datastore3] @@ -186,9 +186,9 @@ def test_get_storage_no_available_datastores(self): cluster.DATASTORES.ID = [1, 2, 3] disks = [{'datastore': 'automatic'}] - datastore1 = MagicMock(NAME='datastore1', FREE_MB=1000, STATE=1) - datastore2 = MagicMock(NAME='datastore2', FREE_MB=2000, STATE=1) - datastore3 = MagicMock(NAME='datastore3', FREE_MB=500, STATE=1) + datastore1 = MagicMock(NAME='datastore1', FREE_MB=1000, STATE=1, TYPE=0) + datastore2 = MagicMock(NAME='datastore2', FREE_MB=2000, STATE=1, TYPE=0) + datastore3 = MagicMock(NAME='datastore3', FREE_MB=500, STATE=0, TYPE=1) self.action.one = MagicMock() self.action.one.datastore.info.side_effect = [datastore1, datastore2, datastore3]