Ejemplo n.º 1
0
    def test_needs_update_changed_negative(self):
        """Ensure a ports update with no changes does not trigger an update"""
        self._set_args({
            'state':
            'present',
            'host_type':
            self.HOST['hostTypeIndex'],
            'ports': [{
                'label': 'abc',
                'type': 'iscsi',
                'port': '0'
            }],
        })
        host = Host()
        host.host_obj = self.HOST.copy()
        host.host_obj['hostSidePorts'] = [{
            'label': 'xyz',
            'type': 'iscsi',
            'port': '0',
            'address': 'iqn:0'
        }]

        with mock.patch.object(host, 'all_hosts', [self.HOST]):
            needs_update = host.needs_update
            self.assertTrue(needs_update,
                            msg="An update to the host should be required!")
Ejemplo n.º 2
0
    def test_build_success_payload(self):
        """Validate success payload."""
        def _assigned_host_ports(apply_unassigning=False):
            return None

        self._set_args({
            'state':
            'present',
            'name':
            'beegfs_metadata1',
            'host_type':
            'windows',
            'force_port':
            True,
            'group':
            'test_group',
            'ports': [{
                'label':
                'beegfs_metadata1_iscsi_1',
                'type':
                'iscsi',
                'port':
                'iqn.1993-08.org.debian.beegfs-storage1:01:b0621126818'
            }]
        })
        host = Host()
        self.assertEqual(host.build_success_payload(), {
            'api_url': 'http://localhost/',
            'ssid': '1'
        })
Ejemplo n.º 3
0
 def test_remove_host_fail(self):
     """Verify remove_host produces expected exceptions."""
     with self.assertRaisesRegexp(AnsibleFailJson,
                                  "Failed to remove host."):
         with mock.patch(self.REQ_FUNC, return_value=Exception()):
             self._set_args({
                 'state':
                 'absent',
                 'name':
                 'beegfs_metadata1',
                 'host_type':
                 'linux dm-mp',
                 'force_port':
                 False,
                 'group':
                 'test_group',
                 'ports': [{
                     'label':
                     'beegfs_metadata1_iscsi_0',
                     'type':
                     'iscsi',
                     'port':
                     'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                 }]
             })
             host = Host()
             host.host_obj = {
                 "id": "84000000600A098000A4B9D10030370B5D430109"
             }
             host.remove_host()
Ejemplo n.º 4
0
 def test_remove_host_pass(self):
     """Verify remove_host produces expected results."""
     with mock.patch(self.REQ_FUNC, return_value=(200, None)):
         self._set_args({
             'state':
             'absent',
             'name':
             'beegfs_metadata1',
             'host_type':
             'linux dm-mp',
             'force_port':
             False,
             'group':
             'test_group',
             'ports': [{
                 'label':
                 'beegfs_metadata1_iscsi_0',
                 'type':
                 'iscsi',
                 'port':
                 'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
             }]
         })
         host = Host()
         host.host_obj = {"id": "84000000600A098000A4B9D10030370B5D430109"}
         host.remove_host()
Ejemplo n.º 5
0
 def test_needs_update_host_type(self):
     """Ensure a changed host_type triggers an update"""
     self._set_args({'state': 'present', 'host_type': 27})
     host = Host()
     host.host_obj = self.HOST
     with mock.patch(self.REQ_FUNC,
                     return_value=(200, [self.HOST])) as request:
         needs_update = host.needs_update
         self.assertTrue(needs_update,
                         msg="An update to the host should be required!")
Ejemplo n.º 6
0
 def test_delete_host_no_changes(self):
     """Ensure that removing a host that doesn't exist works correctly."""
     self._set_args({'state': 'absent'})
     host = Host()
     with self.assertRaises(AnsibleExitJson) as result:
         # We expect a single call to the API: retrieve the defined hosts.
         with mock.patch(self.REQ_FUNC, return_value=(200, [])):
             host.apply()
     # We should not mark changed=True
     self.assertEquals(result.exception.args[0]['changed'], False)
Ejemplo n.º 7
0
 def test_update_host_fail(self):
     """Verify update_host produces expected exceptions."""
     with self.assertRaisesRegexp(AnsibleFailJson,
                                  "Failed to update host."):
         with mock.patch(self.REQ_FUNC,
                         side_effect=[(200, self.EXISTING_HOSTS),
                                      Exception()]):
             self._set_args({
                 'state':
                 'present',
                 'name':
                 'beegfs_metadata1',
                 'host_type':
                 'windows',
                 'force_port':
                 False,
                 'group':
                 'test_group',
                 'ports': [{
                     'label':
                     'beegfs_metadata1_iscsi_0',
                     'type':
                     'iscsi',
                     'port':
                     'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                 }]
             })
             host = Host()
             host.build_success_payload = lambda x: {}
             host.group_id = lambda: "85000000600A098000A4B9D1003637135D483DEB"
             host.host_exists()
             self.assertTrue(host.needs_update())
             host.update_host()
Ejemplo n.º 8
0
 def test_needs_update_no_change(self):
     """Ensure no changes do not trigger an update"""
     self._set_args({
         'state': 'present',
         'host_type': self.HOST['hostTypeIndex'],
     })
     host = Host()
     host.host_obj = self.HOST
     with mock.patch(self.REQ_FUNC, return_value=(200, [self.HOST])) as request:
         needs_update = host.needs_update
         self.assertFalse(needs_update, msg="An update to the host should be required!")
Ejemplo n.º 9
0
 def test_needs_update_cluster(self):
     """Ensure a changed group_id triggers an update"""
     self._set_args({
         'state': 'present',
         'host_type': self.HOST['hostTypeIndex'],
         'group': '1',
     })
     host = Host()
     host.host_obj = self.HOST
     with mock.patch(self.REQ_FUNC, return_value=(200, [self.HOST])) as request:
         needs_update = host.needs_update
         self.assertTrue(needs_update, msg="An update to the host should be required!")
Ejemplo n.º 10
0
 def test_needs_update_ports(self):
     """Ensure added ports trigger an update"""
     self._set_args({
         'state': 'present',
         'host_type': self.HOST['hostTypeIndex'],
         'ports': [{'label': 'abc', 'type': 'iscsi', 'port': '0'}],
     })
     host = Host()
     host.host_obj = self.HOST
     with mock.patch.object(host, 'all_hosts', [self.HOST]):
         needs_update = host.needs_update
         self.assertTrue(needs_update, msg="An update to the host should be required!")
Ejemplo n.º 11
0
 def test_delete_host(self):
     """Validate removing a host object"""
     self._set_args({
         'state': 'absent'
     })
     host = Host()
     with self.assertRaises(AnsibleExitJson) as result:
         # We expect 2 calls to the API, the first to retrieve the host objects defined,
         #  the second to remove the host definition.
         with mock.patch(self.REQ_FUNC, side_effect=[(200, [self.HOST]), (204, {})]) as request:
             host.apply()
     self.assertEquals(request.call_count, 2)
     # We expect the module to make changes
     self.assertEquals(result.exception.args[0]['changed'], True)
Ejemplo n.º 12
0
 def test_host_exists(self):
     """Test host_exists method"""
     self._set_args({'state': 'absent'})
     host = Host()
     with mock.patch(self.REQ_FUNC,
                     return_value=(200, [self.HOST])) as request:
         host_exists = host.host_exists
         self.assertTrue(host_exists, msg="This host should exist!")
Ejemplo n.º 13
0
 def test_host_exists_negative(self):
     """Test host_exists method with no matching hosts to return"""
     self._set_args({'state': 'absent'})
     host = Host()
     with mock.patch(self.REQ_FUNC,
                     return_value=(200, [self.HOST_ALT])) as request:
         host_exists = host.host_exists
         self.assertFalse(host_exists, msg="This host should exist!")
Ejemplo n.º 14
0
 def test_host_exists_fail(self):
     """Ensure we do not dump a stack trace if we fail to make the request"""
     self._set_args({'state': 'absent'})
     host = Host()
     with self.assertRaises(AnsibleFailJson):
         with mock.patch(self.REQ_FUNC,
                         side_effect=Exception("http_error")) as request:
             host_exists = host.host_exists
Ejemplo n.º 15
0
 def test_host_exists_fail(self):
     """Verify host_exists produces expected exceptions."""
     self._set_args({
         'state':
         'present',
         'host_type':
         'linux dm-mp',
         'ports': [{
             'label': 'abc',
             'type': 'iscsi',
             'port': 'iqn:0'
         }]
     })
     host = Host()
     with self.assertRaisesRegexp(AnsibleFailJson,
                                  "Failed to determine host existence."):
         with mock.patch(self.REQ_FUNC, return_value=Exception()):
             host.host_exists()
Ejemplo n.º 16
0
    def test_group_id_fail(self):
        """Verify group_id produces expected exceptions."""
        with self.assertRaisesRegexp(AnsibleFailJson,
                                     "Failed to get host groups."):
            with mock.patch(self.REQ_FUNC, return_value=Exception()):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata2',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'group':
                    'test_group2',
                    'ports': [{
                        'label':
                        'beegfs_metadata2_iscsi_0',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                    }]
                })
                host = Host()
                host.group_id()

        with self.assertRaisesRegexp(AnsibleFailJson,
                                     "No group with the name:"):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.HOST_GROUPS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata2',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'group':
                    'test_group2',
                    'ports': [{
                        'label':
                        'beegfs_metadata2_iscsi_0',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                    }]
                })
                host = Host()
                host.group_id()
Ejemplo n.º 17
0
 def test_needs_update_fail(self):
     """Verify needs_update produces expected exceptions."""
     with self.assertRaisesRegexp(AnsibleFailJson,
                                  "is associated with a different host."):
         with mock.patch(self.REQ_FUNC,
                         return_value=(200, self.EXISTING_HOSTS)):
             self._set_args({
                 'state':
                 'present',
                 'name':
                 'beegfs_metadata1',
                 'host_type':
                 'linux dm-mp',
                 'force_port':
                 False,
                 'ports': [{
                     'label':
                     'beegfs_metadata2_iscsi_0',
                     'type':
                     'iscsi',
                     'port':
                     'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                 }]
             })
             host = Host()
             host.host_exists()
             host.needs_update()
Ejemplo n.º 18
0
    def test_valid_host_type_fail(self):
        """Validate the available host types."""
        with self.assertRaisesRegexp(
                AnsibleFailJson,
                "host_type must be either a host type name or host type index found integer the documentation"
        ):
            self._set_args({'state': 'present', 'host_type': 'non-host-type'})
            host = Host()

        with mock.patch(self.REQ_FUNC, return_value=(200, self.HOST_TYPES)):
            with self.assertRaisesRegexp(AnsibleFailJson,
                                         "There is no host type with index"):
                self._set_args({'state': 'present', 'host_type': '4'})
                host = Host()
                host.valid_host_type()

        with mock.patch(self.REQ_FUNC, return_value=Exception()):
            with self.assertRaisesRegexp(AnsibleFailJson,
                                         "Failed to get host types."):
                self._set_args({'state': 'present', 'host_type': '4'})
                host = Host()
                host.valid_host_type()
Ejemplo n.º 19
0
    def test_group_id_pass(self):
        """Verify group_id produces expected results."""
        with mock.patch(self.REQ_FUNC, return_value=(200, self.HOST_GROUPS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                False,
                'ports': [{
                    'label':
                    'beegfs_metadata2_iscsi_0',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                }]
            })
            host = Host()
            self.assertEqual(host.group_id(),
                             "0000000000000000000000000000000000000000")

            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata2',
                'host_type':
                'linux dm-mp',
                'force_port':
                False,
                'group':
                'test_group',
                'ports': [{
                    'label':
                    'beegfs_metadata2_iscsi_0',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                }]
            })
            host = Host()
            self.assertEqual(host.group_id(),
                             "85000000600A098000A4B9D1003637135D483DEB")
Ejemplo n.º 20
0
    def test_create_host_pass(self):
        """Verify create_host produces expected results."""
        def _assigned_host_ports(apply_unassigning=False):
            return None

        with self.assertRaises(AnsibleExitJson):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, {
                                'id':
                                '84000000600A098000A4B9D10030370B5D430109'
                            })):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'windows',
                    'force_port':
                    True,
                    'group':
                    'test_group',
                    'ports': [{
                        'label':
                        'beegfs_metadata1_iscsi_1',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-storage1:01:b0621126818'
                    }]
                })
                host = Host()
                host.host_exists = lambda: False
                host.assigned_host_ports = _assigned_host_ports
                host.build_success_payload = lambda x: {}
                host.group_id = lambda: "85000000600A098000A4B9D1003637135D483DEB"
                host.create_host()
Ejemplo n.º 21
0
    def test_assigned_host_ports_fail(self):
        """Verify assigned_host_ports gives expected exceptions."""
        # take port from another
        with self.assertRaisesRegexp(
                AnsibleFailJson,
                "There are no host ports available OR there are not enough unassigned host ports"
        ):
            with mock.patch(self.REQ_FUNC,
                            side_effect=[(200, self.EXISTING_HOSTS)]):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'ports': [{
                        'label':
                        'beegfs_metadata1_iscsi_2',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                    }]
                })
                host = Host()
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.assigned_host_ports(apply_unassigning=True)

        # take port from another host and fail because force == False
        with self.assertRaisesRegexp(
                AnsibleFailJson,
                "There are no host ports available OR there are not enough unassigned host ports"
        ):
            with mock.patch(self.REQ_FUNC,
                            side_effect=[(200, self.EXISTING_HOSTS)]):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'ports': [{
                        'label': 'beegfs_metadata2_iscsi_0',
                        'type': 'iscsi',
                        'port': 'iqn.used_elsewhere'
                    }]
                })
                host = Host()
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.assigned_host_ports(apply_unassigning=True)

        # take port from another host and fail because force == False
        with self.assertRaisesRegexp(
                AnsibleFailJson,
                "There are no host ports available OR there are not enough unassigned host ports"
        ):
            with mock.patch(self.REQ_FUNC,
                            side_effect=[(200, self.EXISTING_HOSTS)]):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata3',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'ports': [{
                        'label': 'beegfs_metadata2_iscsi_0',
                        'type': 'iscsi',
                        'port': 'iqn.used_elsewhere'
                    }]
                })
                host = Host()
                host.host_exists()
                host.assigned_host_ports(apply_unassigning=True)

        with self.assertRaisesRegexp(AnsibleFailJson,
                                     "Failed to unassign host port."):
            with mock.patch(self.REQ_FUNC,
                            side_effect=[(200, self.EXISTING_HOSTS),
                                         Exception()]):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    True,
                    'ports': [{
                        'label': 'beegfs_metadata2_iscsi_0',
                        'type': 'iscsi',
                        'port': 'iqn.used_elsewhere'
                    }]
                })
                host = Host()
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.assigned_host_ports(apply_unassigning=True)
Ejemplo n.º 22
0
    def test_host_exists_pass(self):
        """Verify host_exists produces expected results."""
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'new_host',
                'host_type':
                'linux dm-mp',
                'force_port':
                False,
                'ports': [{
                    'label': 'new_host_port_1',
                    'type': 'fc',
                    'port': '0x08ef08ef08ef08ef'
                }]
            })
            host = Host()
            self.assertFalse(host.host_exists())

            self._set_args({
                'state':
                'present',
                'name':
                'does_not_exist',
                'host_type':
                'linux dm-mp',
                'ports': [{
                    'label':
                    'beegfs_storage1_iscsi_0',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-storage1:01:b0621126818'
                }]
            })
            host = Host()
            self.assertFalse(host.host_exists())

            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_storage1',
                'host_type':
                'linux dm-mp',
                'ports': [{
                    'label': 'beegfs_storage1_iscsi_0',
                    'type': 'iscsi',
                    'port': 'iqn.differentiqn.org'
                }]
            })
            host = Host()
            self.assertTrue(host.host_exists())

            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.EXISTING_HOSTS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    True,
                    'ports': [{
                        'label':
                        'beegfs_metadata1_iscsi_0',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-storage1:01:b0621126818'
                    }]
                })
                host = Host()
                self.assertTrue(host.host_exists())
Ejemplo n.º 23
0
    def test_needs_update_pass(self):
        """Verify needs_update produces expected results."""
        # No changes
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'ports': [{
                    'label':
                    'beegfs_metadata1_iscsi_0',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertFalse(host.needs_update())

        # Change host type
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'windows',
                'force_port':
                False,
                'ports': [{
                    'label': 'beegfs_metadata1_iscsi_1',
                    'type': 'iscsi',
                    'port': 'iqn.not_used'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())

        # Add port to host
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                False,
                'ports': [{
                    'label': 'beegfs_metadata1_iscsi_1',
                    'type': 'iscsi',
                    'port': 'iqn.not_used'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())

        # Change port name
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                False,
                'ports': [{
                    'label':
                    'beegfs_metadata1_iscsi_2',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())

        # take port from another host by force
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                True,
                'ports': [{
                    'label':
                    'beegfs_metadata2_iscsi_0',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())
Ejemplo n.º 24
0
 def test_valid_host_type_pass(self):
     """Validate the available host types."""
     with mock.patch(self.REQ_FUNC, return_value=(200, self.HOST_TYPES)):
         self._set_args({'state': 'present', 'host_type': '0'})
         host = Host()
         self.assertTrue(host.valid_host_type())
         self._set_args({'state': 'present', 'host_type': '28'})
         host = Host()
         self.assertTrue(host.valid_host_type())
         self._set_args({'state': 'present', 'host_type': 'windows'})
         host = Host()
         self.assertTrue(host.valid_host_type())
         self._set_args({'state': 'present', 'host_type': 'linux dm-mp'})
         host = Host()
         self.assertTrue(host.valid_host_type())
Ejemplo n.º 25
0
    def test_assigned_host_ports_pass(self):
        """Verify assigned_host_ports gives expected results."""

        # Add an unused port to host
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                False,
                'ports': [{
                    'label': 'beegfs_metadata1_iscsi_1',
                    'type': 'iscsi',
                    'port': 'iqn.not_used'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())
            self.assertEqual(host.assigned_host_ports(), {})

        # Change port name (force)
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                True,
                'ports': [{
                    'label':
                    'beegfs_metadata1_iscsi_2',
                    'type':
                    'iscsi',
                    'port':
                    'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())
            self.assertEqual(
                host.assigned_host_ports(), {
                    '84000000600A098000A4B9D10030370B5D430109':
                    ['89000000600A098000A4B28D00303CFC5D4300F7']
                })

        # Change port type
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                True,
                'ports': [{
                    'label': 'beegfs_metadata1_iscsi_1',
                    'type': 'fc',
                    'port': '08:ef:7e:24:52:a0'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())
            self.assertEqual(host.assigned_host_ports(), {})

        # take port from another host by force
        with mock.patch(self.REQ_FUNC,
                        return_value=(200, self.EXISTING_HOSTS)):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                True,
                'ports': [{
                    'label': 'beegfs_metadata2_iscsi_0',
                    'type': 'iscsi',
                    'port': 'iqn.used_elsewhere'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())
            self.assertEqual(
                host.assigned_host_ports(), {
                    '84000000600A098000A4B9D10030370B5D430109':
                    ['89000000600A098000A4B28D00303CFC5D4300F7']
                })

        # take port from another host by force
        with mock.patch(self.REQ_FUNC,
                        side_effect=[(200, self.EXISTING_HOSTS), (200, {})]):
            self._set_args({
                'state':
                'present',
                'name':
                'beegfs_metadata1',
                'host_type':
                'linux dm-mp',
                'force_port':
                True,
                'ports': [{
                    'label': 'beegfs_metadata2_iscsi_0',
                    'type': 'iscsi',
                    'port': 'iqn.used_elsewhere'
                }]
            })
            host = Host()
            host.host_exists()
            self.assertTrue(host.needs_update())
            self.assertEqual(
                host.assigned_host_ports(apply_unassigning=True), {
                    '84000000600A098000A4B9D10030370B5D430109':
                    ['89000000600A098000A4B28D00303CFC5D4300F7']
                })
Ejemplo n.º 26
0
    def test_update_host_pass(self):
        """Verify update_host produces expected results."""
        # Change host type
        with self.assertRaises(AnsibleExitJson):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.EXISTING_HOSTS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'windows',
                    'force_port':
                    True,
                    'ports': [{
                        'label':
                        'beegfs_metadata1_iscsi_1',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-storage1:01:b0621126818'
                    }]
                })
                host = Host()
                host.build_success_payload = lambda x: {}
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.update_host()

        # Change port iqn
        with self.assertRaises(AnsibleExitJson):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.EXISTING_HOSTS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'ports': [{
                        'label': 'beegfs_metadata1_iscsi_1',
                        'type': 'iscsi',
                        'port': 'iqn.not_used'
                    }]
                })
                host = Host()
                host.build_success_payload = lambda x: {}
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.update_host()

        # Change port type to fc
        with self.assertRaises(AnsibleExitJson):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.EXISTING_HOSTS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'linux dm-mp',
                    'force_port':
                    False,
                    'ports': [{
                        'label': 'beegfs_metadata1_iscsi_1',
                        'type': 'fc',
                        'port': '0x08ef08ef08ef08ef'
                    }]
                })
                host = Host()
                host.build_success_payload = lambda x: {}
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.update_host()

        # Change port name
        with self.assertRaises(AnsibleExitJson):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.EXISTING_HOSTS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'windows',
                    'force_port':
                    True,
                    'ports': [{
                        'label':
                        'beegfs_metadata1_iscsi_12',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                    }]
                })
                host = Host()
                host.build_success_payload = lambda x: {}
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.update_host()

        # Change group
        with self.assertRaises(AnsibleExitJson):
            with mock.patch(self.REQ_FUNC,
                            return_value=(200, self.EXISTING_HOSTS)):
                self._set_args({
                    'state':
                    'present',
                    'name':
                    'beegfs_metadata1',
                    'host_type':
                    'windows',
                    'force_port':
                    False,
                    'group':
                    'test_group',
                    'ports': [{
                        'label':
                        'beegfs_metadata1_iscsi_0',
                        'type':
                        'iscsi',
                        'port':
                        'iqn.1993-08.org.debian.beegfs-metadata:01:69e4efdf30b8'
                    }]
                })
                host = Host()
                host.build_success_payload = lambda x: {}
                host.group_id = lambda: "85000000600A098000A4B9D1003637135D483DEB"
                host.host_exists()
                self.assertTrue(host.needs_update())
                host.update_host()