コード例 #1
0
 def test_same_permissions_not_changing(self, has_tags_modifications,
                                        _get_permissions, _check_version,
                                        _exec, get_bin_path):
     set_module_args({
         'user':
         '******',
         'password':
         '******',
         'state':
         'present',
         'permissions': [{
             'vhost': '/',
             'configure_priv': '.*',
             'write_priv': '.*',
             'read_priv': '.*'
         }],
     })
     _get_permissions.return_value = {
         '/': {
             'read': '.*',
             'write': '.*',
             'configure': '.*',
             'vhost': '/'
         }
     }
     _exec.return_value = 'someuser\t[]'
     _check_version.return_value = distutils.version.StrictVersion('3.6.10')
     get_bin_path.return_value = '/rabbitmqctl'
     has_tags_modifications.return_value = False
     try:
         self.module.main()
     except AnsibleExitJson as e:
         self._assert(e, 'changed', False)
         self._assert(e, 'state', 'present')
コード例 #2
0
    def test_set_global_parameter(self, _exec, get_bin_path):
        """Test setting of global parameters."""
        set_module_args({
            'name': 'cluster_name',
            'value': '"rabbitmq-test"',
            'state': 'present',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        versions = ['3.6', '3.7', '3.8']
        for version_num in versions:
            def side_effect(args, check_rc=True):
                if 'list_global_parameters' in args:
                    if version_num == '3.6':
                        return 'other_param\t"other_value"\ncluster_name\t"another_name"'.splitlines()
                    elif version_num == '3.7':
                        return 'other_param\t"other_value"\ncluster_name\t"another_name"\n'.splitlines()
                    else:
                        return 'name\tvalue\nother_param\t"other_value"\ncluster_name\t"another_name"\n'.splitlines()
                elif 'clear_global_parameter' in args or 'set_global_parameter' in args:
                    return ''.splitlines()
            _exec.side_effect = side_effect
            try:
                self.module.main()
            except AnsibleExitJson as e:
                self._assert(e, 'changed', True)
                self._assert(e, 'state', 'present')
                self._assert(e, 'value', 'rabbitmq-test')
コード例 #3
0
 def test_permissions_are_fixed_with_different_host(self,
                                                    has_tags_modifications,
                                                    set_permissions,
                                                    _get_permissions, _exec,
                                                    get_bin_path):
     set_module_args({
         'user':
         '******',
         'password':
         '******',
         'state':
         'present',
         'permissions': [{
             'vhost': '/',
             'configure_priv': '.*',
             'write_priv': '.*',
             'read_priv': '.*'
         }],
     })
     set_permissions.return_value = None
     _get_permissions.return_value = [{
         'vhost': 'monitoring',
         'configure_priv': '.*',
         'write_priv': '.*',
         'read_priv': '.*'
     }]
     _exec.return_value = ['someuser\t[]']
     get_bin_path.return_value = '/rabbitmqctl'
     has_tags_modifications.return_value = False
     try:
         self.module.main()
     except AnsibleExitJson as e:
         self._assert(e, 'changed', True)
         self._assert(e, 'state', 'present')
         assert set_permissions.call_count == 1
コード例 #4
0
    def test_await_online_synchronized_mirror(self, _exec, get_bin_path):
        """Execute action: await_online_synchronized_mirror"""
        set_module_args({
            'action': 'await_online_synchronized_mirror',
            'node': 'rabbit@node-1',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        try:
            self.module.main()
        except AnsibleExitJson as e:
            self._assert(e, 'changed', True)
コード例 #5
0
    def test_post_upgrade(self, _exec, get_bin_path):
        """Execute action: post_upgrade"""
        set_module_args({
            'action': 'post_upgrade',
            'node': 'rabbit@node-1',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        try:
            self.module.main()
        except AnsibleExitJson as e:
            self._assert(e, 'changed', True)
コード例 #6
0
    def test_enable_no_change_feature_flag(self, _exec, get_bin_path):
        """Test that there is no change when enabling feature flag which is already enabled"""
        set_module_args({
            'name': 'maintenance_mode_status',
            'node': 'rabbit@node-1',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        for out in 'name\tstate\nmaintenance_mode_status\tenabled', 'name\tstate\nmaintenance_mode_status\tenabled\n':
            _exec.return_value = out.splitlines()
            try:
                self.module.main()
            except AnsibleExitJson as e:
                self._assert(e, 'changed', False)
コード例 #7
0
    def test_remove_global_parameter(self, _exec, get_bin_path):
        """Test removal of global parameters."""
        set_module_args({
            'name': 'cluster_name',
            'state': 'absent',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        # command list_global_parameters returns:
        # - RabbitMQ 3.6.x: ''
        # - RabbitMQ 3.7.x: '\n'
        # - RabbitMQ 3.8.x: 'name\tvalue\n' table header
        for out in 'cluster_name\t"rabbitmq-test"', 'cluster_name\t"rabbitmq-test"\n', 'name\tvalue\ncluster_name\t"rabbitmq-test"\n':
            _exec.return_value = out.splitlines()
            try:
                self.module.main()
            except AnsibleExitJson as e:
                self._assert(e, 'changed', True)
                self._assert(e, 'state', 'absent')
コード例 #8
0
    def test_read_without_initial_global_parameters(self, _exec, get_bin_path):
        """Test that the code to read the global parameters does not fail anymore for RabbitMQ 3.7.x."""
        set_module_args({
            'name': 'cluster_name',
            'state': 'absent',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        # command list_global_parameters returns:
        # - RabbitMQ 3.6.x: ''
        # - RabbitMQ 3.7.x: '\n'
        # - RabbitMQ 3.8.x: 'name\tvalue\n' table header
        for out in '', '\n', 'name\tvalue\n':
            _exec.return_value = out.splitlines()
            try:
                self.module.main()
            except AnsibleExitJson as e:
                self._assert(e, 'changed', False)
                self._assert(e, 'state', 'absent')
コード例 #9
0
    def test_set_no_change_global_parameter(self, _exec, get_bin_path):
        """Test that there is no change when setting the same global parameter."""
        set_module_args({
            'name': 'cluster_name',
            'value': '"rabbitmq-test"',
            'state': 'present',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        def side_effect(args, check_rc=True):
            if 'list_global_parameters' in args:
                return 'other_param\t"other_value"\ncluster_name\t"rabbitmq-test"'.splitlines()
            elif 'clear_global_parameter' in args or 'set_global_parameter' in args:
                return ''.splitlines()
        _exec.side_effect = side_effect
        try:
            self.module.main()
        except AnsibleExitJson as e:
            self._assert(e, 'changed', False)
            self._assert(e, 'state', 'present')
            self._assert(e, 'value', 'rabbitmq-test')
コード例 #10
0
 def test_permissions_with_same_vhost(self, _check_version, get_bin_path):
     set_module_args({
         'user': '******',
         'password': '******',
         'state': 'present',
         'permissions': [{
             'vhost': '/'
         }, {
             'vhost': '/'
         }],
     })
     _check_version.return_value = distutils.version.StrictVersion('3.6.10')
     get_bin_path.return_value = '/rabbitmqctl'
     try:
         self.module.main()
     except AnsibleFailJson as e:
         self._assert(e, 'failed', True)
         self._assert(
             e, 'msg', "Error parsing vhost "
             "permissions: You can't have two permission dicts for the same vhost"
         )
コード例 #11
0
 def test_password_changes_only_when_needed(self,
                                            has_permissions_modifications,
                                            has_tags_modifications,
                                            check_password, get,
                                            get_bin_path):
     set_module_args({
         'user': '******',
         'password': '******',
         'state': 'present',
         'update_password': '******',
     })
     get.return_value = True
     get_bin_path.return_value = '/rabbitmqctl'
     check_password.return_value = True
     has_tags_modifications.return_value = False
     has_permissions_modifications.return_value = False
     try:
         self.module.main()
     except AnsibleExitJson as e:
         self._assert(e, 'changed', False)
         self._assert(e, 'state', 'present')
コード例 #12
0
    def test_without_maitenance_mode_status_feature_flag(self, _exec, get_bin_path):
        """Failure must occur when maintenance_mode_status feature_flag is disabled/not available"""
        with self.assertRaises(AnsibleFailJson):
            set_module_args({
                'action': 'drain',
                'node': 'rabbit@node-1',
            })
            get_bin_path.return_value = '/rabbitmqctl'

            def side_effect(*args, **kwargs):
                if args[0] == 'rabbitmq-diagnostics':
                    out = '{"active_plugins": ["rabbitmq_management", "amqp_client", "rabbitmq_web_dispatch", "cowboy",'\
                          '"cowlib", "rabbitmq_management_agent"], "is_under_maintenance": false}'
                elif args[0] == 'rabbitmqctl':
                    out = 'name\tstate\nmaintenance_mode_status\tdisabled'
                else:
                    out = ''
                return out.splitlines()

            _exec.side_effect = side_effect
            self.module.main()
コード例 #13
0
 def test_permissions_with_same_vhost(self):
     set_module_args({
         'user': '******',
         'password': '******',
         'state': 'present',
         'permissions': [{
             'vhost': '/'
         }, {
             'vhost': '/'
         }],
     })
     with patch('ansible.module_utils.basic.AnsibleModule.get_bin_path'
                ) as get_bin_path:
         get_bin_path.return_value = '/rabbitmqctl'
         try:
             self.module.main()
         except AnsibleFailJson as e:
             self._assert(e, 'failed', True)
             self._assert(
                 e, 'msg',
                 "Error parsing permissions: You can't have two permission dicts for the same vhost"
             )
コード例 #14
0
    def test_tags_are_fixed(self, _get_permissions, _check_version, _exec,
                            get_bin_path):
        """Test user tags are fixed."""
        set_module_args({
            'user': '******',
            'password': '******',
            'state': 'present',
            'tags': 'tag1,tags2',
        })
        get_bin_path.return_value = '/rabbitmqctl'
        _check_version.return_value = distutils.version.StrictVersion('3.6.10')
        _get_permissions.return_value = {
            '/': {
                'vhost': '/',
                'configure': '^$',
                'write': '^$',
                'read': '^$'
            }
        }

        def side_effect(args):
            if 'list_users' in args:
                self.assertTrue('--formatter' not in args)
                self.assertTrue('json' not in args)
                return 'someuser\t[tag1, tag3]'
            return ''

        _exec.side_effect = side_effect

        try:
            self.module.main()
        except AnsibleExitJson as e:
            self._assert(e, 'changed', True)
            self._assert(e, 'state', 'present')
            self.assertEqual(_exec.call_count, 2)
            self.assertTrue(
                lists_equal(['set_user_tags', 'someuser', 'tag1', 'tags2'],
                            flatten(_exec.call_args_list[-1][0])))
コード例 #15
0
    def test_no_change_drain_node(self, _exec, get_bin_path):
        """Execute action: drain on already disabled node"""
        set_module_args({
            'action': 'drain',
            'node': 'rabbit@node-1',
        })
        get_bin_path.return_value = '/rabbitmqctl'

        def side_effect(*args, **kwargs):
            if args[0] == 'rabbitmq-diagnostics':
                out = '{"active_plugins": ["rabbitmq_management", "amqp_client", "rabbitmq_web_dispatch", "cowboy",'\
                      '"cowlib", "rabbitmq_management_agent"], "is_under_maintenance": true}'
            elif args[0] == 'rabbitmqctl':
                out = 'name\tstate\nmaintenance_mode_status\tenabled'
            else:
                out = ''
            return out.splitlines()

        _exec.side_effect = side_effect
        try:
            self.module.main()
        except AnsibleExitJson as e:
            self._assert(e, 'changed', False)
コード例 #16
0
 def test_without_required_parameters(self):
     """Failure must occur when all parameters are missing."""
     with self.assertRaises(AnsibleFailJson):
         set_module_args({})
         self.module.main()
コード例 #17
0
    def test_permissions_are_fixed(self, has_tags_modifications,
                                   _get_permissions, _check_version, _exec,
                                   get_bin_path):
        """Test changes in permissions are fixed.

        Ensure that permissions that do not need to be changed are not, permissions with differences are
        fixed and permissions are cleared when needed, with the minimum number of operations. The
        permissions are fed into the module using the pre-3.7 version format.
        """
        set_module_args({
            'user':
            '******',
            'password':
            '******',
            'state':
            'present',
            'permissions': [{
                'vhost': '/',
                'configure_priv': '.*',
                'write_priv': '.*',
                'read_priv': '.*'
            }, {
                'vhost': '/ok',
                'configure': '^$',
                'write': '^$',
                'read': '^$'
            }],
        })
        get_bin_path.return_value = '/rabbitmqctl'
        has_tags_modifications.return_value = False
        _check_version.return_value = distutils.version.StrictVersion('3.6.10')
        _get_permissions.return_value = {
            '/wrong_vhost': {
                'vhost': '/wrong_vhost',
                'configure': '',
                'write': '',
                'read': ''
            },
            '/ok': {
                'vhost': '/ok',
                'configure': '^$',
                'write': '^$',
                'read': '^$'
            }
        }

        def side_effect(args):
            if 'list_users' in args:
                self.assertTrue('--formatter' not in args)
                self.assertTrue('json' not in args)
                return 'someuser\t[administrator, management]'
            if 'clear_permissions' in args:
                self.assertTrue('someuser' in args)
                self.assertTrue('/wrong_vhost' in args)
                return ''
            if 'set_permissions' in args:
                self.assertTrue('someuser' in args)
                self.assertTrue('/' in args)
                self.assertTrue(['.*', '.*', '.*'] == args[-3:])
                return ''

        _exec.side_effect = side_effect

        try:
            self.module.main()
        except AnsibleExitJson as e:
            self._assert(e, 'changed', True)
            self._assert(e, 'state', 'present')
            self.assertEqual(_exec.call_count, 3)
            self.assertTrue(
                ['clear_permissions', '-p', '/wrong_vhost', 'someuser'
                 ] == flatten(_exec.call_args_list[-2][0]))
            self.assertTrue(
                ['set_permissions', '-p', '/', 'someuser', '.*', '.*', '.*'
                 ] == flatten(_exec.call_args_list[-1][0]))