コード例 #1
0
    def test_module_bootstrap_node_no_wait(self, mock_bootstrap_init, mock_post):
        def mock_post_v1_bootstrap():
            return {
                'id': 0,
                'status': 'IN_PROGRESS'
            }

        node_config = {}
        node_config['1'] = '10.255.1.10'

        set_module_args({
            'cluster_name': 'cluster_name',
            'admin_email': '*****@*****.**',
            'admin_password': '******',
            'node_ip': 'rubrikbootstrap.local',
            'node_config': node_config,
            'management_gateway': '10.255.1.1',
            'management_subnet_mask': '255.255.255.0',
            'username': '******',
            'api_token': 'vkys219gn2jziReqdPJH0asGM3PKEQHP',
            'wait_for_completion': False
        })

        mock_bootstrap_init.return_value = None
        mock_bootstrap_init.ipv6_addr = 'ffd2::1'
        mock_bootstrap_init.ipv6_scope = '0'
        mock_bootstrap_init.node_ip = 'ffd2::1%0'

        mock_post.return_value = mock_post_v1_bootstrap()

        with self.assertRaises(AnsibleExitJson) as result:
            rubrik_bootstrap.main()

        self.assertEqual(result.exception.args[0]['changed'], False)
        self.assertEqual(result.exception.args[0]['response']['status'], 'IN_PROGRESS')
コード例 #2
0
    def test_module_bootstrap_idempotency(self, mock_bootstrap_init, mock_post):

        def mock_post_v1_exception():
            return APICallException('Cannot bootstrap from an already bootstrapped node')

        node_config = {}
        node_config['1'] = '10.255.1.10'

        set_module_args({
            'cluster_name': 'cluster_name',
            'admin_email': '*****@*****.**',
            'admin_password': '******',
            'node_ip': 'rubrikbootstrap.local',
            'node_config': node_config,
            'management_gateway': '10.255.1.1',
            'management_subnet_mask': '255.255.255.0',
            'username': '******',
            'api_token': 'vkys219gn2jziReqdPJH0asGM3PKEQHP',
            'wait_for_completion': False
        })

        mock_bootstrap_init.return_value = None
        mock_bootstrap_init.ipv6_addr = 'ffd2::1'
        mock_bootstrap_init.ipv6_scope = '0'
        mock_bootstrap_init.node_ip = 'ffd2::1%0'

        mock_post.side_effect = mock_post_v1_exception()

        with self.assertRaises(AnsibleExitJson) as result:
            rubrik_bootstrap.main()

        self.assertEqual(result.exception.args[0]['changed'], False)
        self.assertEqual(result.exception.args[0]['response'], 'No change required. The Rubrik cluster is already bootstrapped.')
コード例 #3
0
    def test_module_fail_resolution_failure(self, mock_post, mock_getaddrinfo):

        def mock_getaddrinfo_failure():
            return gaierror('Could not resolve link-local IPv6 address for cluster.')

        node_config = {}
        node_config['1'] = 'badhost.local'

        set_module_args({
            'cluster_name': 'cluster_name',
            'admin_email': '*****@*****.**',
            'admin_password': '******',
            'node_ip': 'rubrikbootstrap.local',
            'node_config': node_config,
            'management_gateway': '10.255.1.1',
            'management_subnet_mask': '255.255.255.0',
            'username': '******',
            'api_token': 'vkys219gn2jziReqdPJH0asGM3PKEQHP',
        })

        mock_getaddrinfo.side_effect = mock_getaddrinfo_failure()

        with self.assertRaises(AnsibleFailJson) as result:
            rubrik_bootstrap.main()

        self.assertEqual(result.exception.args[0]['failed'], True)
        self.assertEqual(result.exception.args[0]['msg'], 'Error: Could not resolve addrsss for cluster, or invalid IP/address supplied')
コード例 #4
0
    def test_module_fail_with_malformed_node_config(self):
        set_module_args({
            'cluster_name': 'cluster_name',
            'admin_email': '*****@*****.**',
            'admin_password': '******',
            'node_ip': 'rubrikbootstrap.local',
            'node_config': 'foo',
            'management_gateway': '10.255.1.1',
            'management_subnet_mask': '255.255.255.0',
            'username': '******',
            'api_token': 'vkys219gn2jziReqdPJH0asGM3PKEQHP'
        })

        with self.assertRaises(AnsibleFailJson) as result:
            rubrik_bootstrap.main()

        self.assertEqual(result.exception.args[0]['failed'], True)
        self.assertEqual(result.exception.args[0]['msg'], "argument node_config is of type <class 'str'> and we were unable to convert to dict: dictionary requested, could not parse JSON or key=value")
コード例 #5
0
 def test_module_fail_when_required_args_missing(self):
     with self.assertRaises(AnsibleFailJson):
         set_module_args({})
         rubrik_bootstrap.main()
コード例 #6
0
    def test_module_bootstrap_node_wait_for_completion(self, mock_bootstrap_init, mock_post, mock_get, mock_sleep):
        def mock_post_v1_bootstrap():
            return {
                'id': 0,
                'status': 'IN_PROGRESS'
            }

        def mock_get_v1_bootstrap_status_1():
            return {
                'status': 'IN_PROGRESS',
                'message': '',
                'ipConfig': 'SUCCESS',
                'cassandraSetup': 'SUCCESS',
                'installSchema': 'SUCCESS',
                'startServices': 'SUCCESS',
                'ipmiConfig': 'SUCCESS',
                'configAdminUser': '******',
                'resetNodes': 'IN_PROGRESS',
                'setupDisks': 'SUCCESS',
                'setupEncryptionAtRest': 'SUCCESS',
                'setupOsAndMetadataPartitions': 'SUCCESS',
                'createTopLevelFilesystemDirs': 'SUCCESS',
                'setupLoopDevices': 'SUCCESS',
                'cockroachDbSetup': 'SUCCESS'
            }

        def mock_get_v1_bootstrap_status_2():
            return {
                'status': 'SUCCESS',
                'message': '',
                'ipConfig': 'SUCCESS',
                'cassandraSetup': 'SUCCESS',
                'installSchema': 'SUCCESS',
                'startServices': 'SUCCESS',
                'ipmiConfig': 'SUCCESS',
                'configAdminUser': '******',
                'resetNodes': 'SUCCESS',
                'setupDisks': 'SUCCESS',
                'setupEncryptionAtRest': 'SUCCESS',
                'setupOsAndMetadataPartitions': 'SUCCESS',
                'createTopLevelFilesystemDirs': 'SUCCESS',
                'setupLoopDevices': 'SUCCESS',
                'cockroachDbSetup': 'SUCCESS'
            }

        node_config = {}
        node_config['1'] = '10.255.1.10'

        set_module_args({
            'cluster_name': 'cluster_name',
            'admin_email': '*****@*****.**',
            'admin_password': '******',
            'node_ip': 'rubrikbootstrap.local',
            'node_config': node_config,
            'management_gateway': '10.255.1.1',
            'management_subnet_mask': '255.255.255.0',
            'username': '******',
            'api_token': 'vkys219gn2jziReqdPJH0asGM3PKEQHP',
            'timeout': 1,
            'wait_for_completion': True
        })

        # Mock sleep function so test does not take 30 seconds to run
        mock_sleep.return_value = None

        mock_bootstrap_init.return_value = None
        mock_bootstrap_init.ipv6_addr = 'ffd2::1'
        mock_bootstrap_init.ipv6_scope = '0'
        mock_bootstrap_init.node_ip = 'ffd2::1%0'

        mock_post.return_value = mock_post_v1_bootstrap()

        mock_get.side_effect = [mock_get_v1_bootstrap_status_1(), mock_get_v1_bootstrap_status_2()]

        with self.assertRaises(AnsibleExitJson) as result:
            rubrik_bootstrap.main()

        self.assertEqual(result.exception.args[0]['changed'], False)
        self.assertEqual(result.exception.args[0]['response']['status'], 'SUCCESS')