def test_should_fail_when_device_bay_not_found_ipv4_release(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]

        params_power_on_not_found_bay = yaml.load(
            PARAMS_FOR_DEVICE_BAY_IPV4_RELEASE)
        params_power_on_not_found_bay['data']['bayNumber'] = 3
        self.mock_ansible_module.params = params_power_on_not_found_bay

        EnclosureModule().run()

        self.resource.patch.not_been_called()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            exception=mock.ANY, msg=EnclosureModule.MSG_BAY_NOT_FOUND)
    def test_should_fail_when_there_are_not_device_bays_ipv4_release(self):
        enclosure_without_appliance_bays = dict(ENCLOSURE_FROM_ONEVIEW,
                                                deviceBays=[])
        self.resource.get_by.return_value = [enclosure_without_appliance_bays]

        self.mock_ansible_module.params = yaml.load(
            PARAMS_FOR_DEVICE_BAY_IPV4_RELEASE)

        EnclosureModule().run()

        self.resource.patch.not_been_called()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            exception=mock.ANY, msg=EnclosureModule.MSG_BAY_NOT_FOUND)
    def test_replace_name_for_new_enclosure(self):
        self.resource.get_by.return_value = []
        self.resource.get_all.return_value = []
        self.resource.add.return_value = ENCLOSURE_FROM_ONEVIEW
        self.resource.patch.return_value = []

        params_ansible = deepcopy(PARAMS_FOR_PRESENT)
        params_ansible['data']['name'] = 'Encl1-Renamed'
        self.mock_ansible_module.params = params_ansible

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            "/a/path", "replace", "/name", "Encl1-Renamed")
    def test_should_not_set_to_off_when_it_is_already_off(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_UID_OFF)

        EnclosureModule().run()

        self.resource.patch.not_been_called()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_UID_ALREADY_POWERED_OFF
        )
Exemple #5
0
    def test_should_not_update_when_no_changes_by_standby_ip_key(self):
        self.resource.data = ENCLOSURE_FROM_ONEVIEW
        self.resource.get_by_hostname.return_value = self.resource

        params = deepcopy(PARAMS_FOR_PRESENT)
        params['data']['hostname'] = STANDBY_IP_ADDRESS
        self.mock_ansible_module.params = params

        EnclosureModule().run()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            msg=EnclosureModule.MSG_ALREADY_PRESENT,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW)
        )
Exemple #6
0
    def test_should_do_nothing_when_scopes_are_the_same(self):
        params_to_scope = deepcopy(PARAMS_FOR_PRESENT_NO_HOSTNAME)
        params_to_scope['data']['scopeUris'] = ['test']
        self.mock_ansible_module.params = params_to_scope

        self.enclosures.get_by.return_value = [params_to_scope['data']]

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            ansible_facts=dict(enclosure=params_to_scope['data']),
            msg=EnclosureModule.MSG_ALREADY_PRESENT)
Exemple #7
0
    def test_should_not_set_to_on_when_it_is_already_on(self):
        enclosure_uid_on = dict(ENCLOSURE_FROM_ONEVIEW, uidState='On')
        self.resource.data = enclosure_uid_on

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_UID_ON)

        EnclosureModule().run()

        self.resource.patch.not_been_called()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            ansible_facts=dict(enclosure=enclosure_uid_on),
            msg=EnclosureModule.MSG_UID_ALREADY_POWERED_ON
        )
Exemple #8
0
    def test_should_not_power_on_when_state_is_already_on(self):
        self.enclosures.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]

        params_power_on_do_nothing = deepcopy(PARAMS_FOR_BAY_POWER_ON)
        params_power_on_do_nothing['data']['bayNumber'] = 1
        self.mock_ansible_module.params = params_power_on_do_nothing

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_APPLIANCE_BAY_ALREADY_POWERED_ON)
Exemple #9
0
    def test_should_fail_when_there_are_not_appliance_bays_power_on(self):
        enclosure_without_appliance_bays = dict(ENCLOSURE_FROM_ONEVIEW,
                                                applianceBays=[])
        self.enclosures.get_by.return_value = [
            enclosure_without_appliance_bays
        ]

        self.mock_ansible_module.params = PARAMS_FOR_BAY_POWER_ON

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            exception=mock.ANY, msg=EnclosureModule.MSG_BAY_NOT_FOUND)
    def test_should_create_new_enclosure(self):
        self.resource.get_by.return_value = []
        self.resource.get_all.return_value = []
        self.resource.add.return_value = ENCLOSURE_FROM_ONEVIEW
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = PARAMS_FOR_PRESENT

        EnclosureModule().run()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=EnclosureModule.MSG_CREATED,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW)
        )
Exemple #11
0
    def test_should_not_set_state_when_it_is_already_on_desired_state(self):
        enclosure_uid_on = dict(ENCLOSURE_FROM_ONEVIEW,
                                supportDataCollectionState='PendingCollection')
        self.enclosures.get_by.return_value = [enclosure_uid_on]

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_DATA_COL_SET)

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            ansible_facts=dict(enclosure=enclosure_uid_on),
            msg=EnclosureModule.MSG_SUPPORT_DATA_COLLECTION_STATE_ALREADY_SET)
    def test_should_remove_ipv4_device_bays(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_DEVICE_BAY_IPV4_RELEASE)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            ENCLOSURE_FROM_ONEVIEW['uri'], operation='remove', path='/deviceBays/1/ipv4Setting', value='')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_DEVICE_BAY_IPV4_SETTING_REMOVED
        )
    def test_should_reset_device_bay(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_DEVICE_BAY_POWER_STATE_RESET)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            ENCLOSURE_FROM_ONEVIEW['uri'], operation='replace', path='/deviceBays/1/bayPowerState', value='Reset')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_DEVICE_BAY_POWER_STATE_RESET
        )
    def test_should_turn_off_uid_manager_bay(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_MANAGER_BAY_UID_OFF)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            ENCLOSURE_FROM_ONEVIEW['uri'], operation='replace', path='/managerBays/1/uidState', value='Off')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_MANAGER_BAY_UID_OFF
        )
    def test_should_power_on_appliance_bays(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = PARAMS_FOR_BAY_POWER_ON

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            ENCLOSURE_FROM_ONEVIEW['uri'], operation='replace', path='/applianceBays/2/power', value='On')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_APPLIANCE_BAY_POWERED_ON
        )
    def test_should_perform_an_e_fuse_appliance_bay(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_APPLIANCE_BAY_POWER_STATE_E_FUSE)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            ENCLOSURE_FROM_ONEVIEW['uri'], operation='replace', path='/applianceBays/1/bayPowerState', value='E-Fuse')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_APPLIANCE_BAY_POWER_STATE_E_FUSED
        )
Exemple #17
0
    def test_should_fail_when_there_are_not_manager_bays_e_fuse(self):
        enclosure_without_appliance_bays = dict(ENCLOSURE_FROM_ONEVIEW,
                                                managerBays=[])
        self.enclosures.get_by.return_value = [
            enclosure_without_appliance_bays
        ]

        self.mock_ansible_module.params = yaml.load(
            PARAMS_FOR_MANAGER_BAY_POWER_STATE_E_FUSE)

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            exception=mock.ANY, msg=EnclosureModule.MSG_BAY_NOT_FOUND)
    def test_should_set_state(self):
        self.resource.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.resource.patch.return_value = ENCLOSURE_FROM_ONEVIEW

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_DATA_COL_SET)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(ENCLOSURE_FROM_ONEVIEW['uri'], operation='replace',
                                                    path='/supportDataCollectionState', value='PendingCollection')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_SUPPORT_DATA_COLLECTION_STATE_SET
        )
Exemple #19
0
    def test_update_when_data_has_new_rack_name(self):
        updated_data = ENCLOSURE_FROM_ONEVIEW.copy()
        updated_data['rackName'] = 'Another-Rack-Name'

        self.enclosures.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]
        self.enclosures.get_all.return_value = ALL_ENCLOSURES
        self.enclosures.patch.return_value = updated_data

        self.mock_ansible_module.params = PARAMS_WITH_NEW_RACK_NAME

        EnclosureModule().run()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=EnclosureModule.MSG_UPDATED,
            ansible_facts=dict(enclosure=updated_data))
Exemple #20
0
    def test_should_not_set_to_off_when_state_already_off(self):
        self.enclosures.get_by.return_value = [ENCLOSURE_FROM_ONEVIEW]

        params_manager_bay_uid = yaml.load(PARAMS_FOR_MANAGER_BAY_UID_OFF)
        params_manager_bay_uid['data']['bayNumber'] = '2'

        self.mock_ansible_module.params = params_manager_bay_uid

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=False,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_MANAGER_BAY_UID_ALREADY_OFF)
Exemple #21
0
    def test_should_fail_when_there_are_not_interconnect_bays_ipv4(self):
        enclosure_without_appliance_bays = dict(ENCLOSURE_FROM_ONEVIEW,
                                                interconnectBays=[])
        self.enclosures.get_by.return_value = [
            enclosure_without_appliance_bays
        ]

        self.mock_ansible_module.params = yaml.load(
            PARAMS_FOR_INTERCONNECT_BAY_IPV4_RELEASE)

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            exception=mock.ANY, msg=EnclosureModule.MSG_BAY_NOT_FOUND)
    def test_should_fail_when_there_are_not_device_bays_reset(self):
        enclosure_without_appliance_bays = dict(ENCLOSURE_FROM_ONEVIEW,
                                                deviceBays=[])
        self.enclosures.get_by.return_value = [
            enclosure_without_appliance_bays
        ]

        self.mock_ansible_module.params = yaml.load(
            PARAMS_FOR_DEVICE_BAY_POWER_STATE_RESET)

        EnclosureModule().run()

        self.enclosures.patch.not_been_called()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            msg=EnclosureModule.MSG_BAY_NOT_FOUND)
    def test_replace_rack_name_for_new_enclosure(self):
        updated_data = ENCLOSURE_FROM_ONEVIEW.copy()
        updated_data['rackName'] = 'Another-Rack-Name'

        self.resource.get_by.return_value = []
        self.resource.get_all.return_value = []
        self.resource.add.return_value = ENCLOSURE_FROM_ONEVIEW
        self.resource.patch.return_value = []

        params_ansible = deepcopy(PARAMS_FOR_PRESENT)
        params_ansible['data']['rackName'] = 'Another-Rack-Name'
        self.mock_ansible_module.params = params_ansible

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            "/a/path", "replace", "/rackName", "Another-Rack-Name")
Exemple #24
0
    def test_should_turn_on_uid(self):
        self.resource.data = ENCLOSURE_FROM_ONEVIEW
        self.resource.patch.return_value = self.resource

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_UID_ON)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(operation='replace',
                                                    path='/uidState',
                                                    value='On')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_UID_POWERED_ON
        )
Exemple #25
0
    def test_should_perform_an_e_fuse_interconnect(self):
        self.resource.data = ENCLOSURE_FROM_ONEVIEW
        self.resource.patch.return_value = self.resource

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_INTERCONNECT_BAY_POWER_STATE_E_FUSE)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(operation='replace',
                                                    path='/interconnectBays/2/bayPowerState',
                                                    value='E-Fuse')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_INTERCONNECT_BAY_POWER_STATE_E_FUSE
        )
Exemple #26
0
    def test_should_reset_manager_bay(self):
        self.resource.data = ENCLOSURE_FROM_ONEVIEW
        self.resource.patch.return_value = self.resource

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_MANAGER_BAY_POWER_STATE_RESET)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(operation='replace',
                                                    path='/managerBays/1/bayPowerState',
                                                    value='Reset')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_MANAGER_BAY_POWER_STATE_RESET
        )
    def test_should_turn_off_uid(self):
        enclosure_uid_on = dict(ENCLOSURE_FROM_ONEVIEW, uidState='On')

        self.resource.get_by.return_value = [enclosure_uid_on]
        self.resource.patch.return_value = enclosure_uid_on

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_UID_OFF)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(
            ENCLOSURE_FROM_ONEVIEW['uri'], operation='replace', path='/uidState', value='Off')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=enclosure_uid_on),
            msg=EnclosureModule.MSG_UID_POWERED_OFF
        )
Exemple #28
0
    def test_should_remove_ipv4_interconnect_bays(self):
        self.resource.data = ENCLOSURE_FROM_ONEVIEW

        self.resource.patch.return_value = self.resource

        self.mock_ansible_module.params = yaml.load(PARAMS_FOR_INTERCONNECT_BAY_IPV4_RELEASE)

        EnclosureModule().run()

        self.resource.patch.assert_called_once_with(operation='remove',
                                                    path='/interconnectBays/1/ipv4Setting',
                                                    value='')

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=ENCLOSURE_FROM_ONEVIEW),
            msg=EnclosureModule.MSG_INTERCONNECT_BAY_IPV4_SETTING_REMOVED
        )
Exemple #29
0
    def test_update_when_data_has_new_name(self):
        updated_data = ENCLOSURE_FROM_ONEVIEW.copy()
        updated_data['name'] = 'Test-Enclosure-Renamed'

        self.resource.data = ENCLOSURE_FROM_ONEVIEW
        self.resource.get_by_hostname.return_value = self.resource

        updated_obj = self.resource.copy()
        updated_obj.data = updated_data
        self.resource.patch.return_value = updated_obj

        self.mock_ansible_module.params = PARAMS_WITH_NEW_NAME

        EnclosureModule().run()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=EnclosureModule.MSG_UPDATED,
            ansible_facts=dict(enclosure=self.resource.data)
        )
Exemple #30
0
    def test_update_scopes_when_different(self):
        params_to_scope = deepcopy(PARAMS_FOR_PRESENT_NO_HOSTNAME)
        params_to_scope['data']['scopeUris'] = ['test']
        self.mock_ansible_module.params = params_to_scope

        resource_data = deepcopy(PARAMS_FOR_PRESENT_NO_HOSTNAME)['data']
        resource_data['uri'] = 'rest/enclosures/fake'
        resource_data['scopeUris'] = []

        self.enclosures.get_by.return_value = [resource_data]
        self.enclosures.patch.return_value = params_to_scope['data']

        EnclosureModule().run()

        self.enclosures.patch.assert_called_once_with('rest/enclosures/fake',
                                                      operation='replace',
                                                      path='/scopeUris',
                                                      value=['test'])

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            ansible_facts=dict(enclosure=params_to_scope['data']),
            msg=EnclosureModule.MSG_UPDATED)