Example #1
0
    def bind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)

        if not consumer_id:
            m = _('This consumer is not registered to the Pulp server')
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs['repo-id']

        try:
            response = self.context.server.bind.bind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID)
            msg = _('Bind tasks successfully created:')
            self.context.prompt.render_success_message(msg)
            tasks = [dict(task_id=str(t.task_id)) for t in response.response_body.spawned_tasks]
            self.context.prompt.render_document_list(tasks)
        except NotFoundException, e:
            resources = e.extra_data['resources']
            if 'consumer' in resources:
                r_type = _('Consumer')
                r_id = consumer_id
            else:
                r_type = _('Repository')
                r_id = repo_id
            msg = _('%(t)s [%(id)s] does not exist on the server')
            self.context.prompt.write(msg % {'t': r_type, 'id': r_id}, tag='not-found')
Example #2
0
    def unbind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            m = _('This consumer is not registered to the Pulp server')
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs['repo-id']
        force = kwargs['force']

        try:
            response = self.context.server.bind.unbind(consumer_id, repo_id,
                                                       YUM_DISTRIBUTOR_TYPE_ID, force)
            msg = _('Unbind tasks successfully created:')
            self.context.prompt.render_success_message(msg)
            tasks = [dict(task_id=str(t.task_id)) for t in response.response_body.spawned_tasks]
            self.context.prompt.render_document_list(tasks)
        except NotFoundException, e:
            bind_id = e.extra_data['resources']['bind_id']
            m = _('Binding [consumer: %(c)s, repository: %(r)s] does not exist on the server')
            d = {
                'c': bind_id['consumer_id'],
                'r': bind_id['repo_id'],
            }
            self.context.prompt.write(m % d, tag='not-found')
Example #3
0
    def run(self, **kwargs):

        self.context.prompt.render_warning_message(CLI_DEPRECATION_WARNING)

        repo_id = kwargs[OPTION_REPO_ID.keyword]
        node_id = load_consumer_id(self.context)
        dist_id = constants.HTTP_DISTRIBUTOR
        strategy = kwargs[STRATEGY_OPTION.keyword]
        binding_config = {constants.STRATEGY_KEYWORD: strategy}

        if not node_activated(self.context, node_id):
            msg = NOT_ACTIVATED_ERROR
            self.context.prompt.render_failure_message(msg)
            return os.EX_USAGE

        if not repository_enabled(self.context, repo_id):
            msg = BIND_FAILED_NOT_ENABLED
            self.context.prompt.render_failure_message(msg)
            return os.EX_USAGE

        if strategy not in constants.STRATEGIES:
            msg = STRATEGY_NOT_SUPPORTED % dict(n=strategy,
                                                s=constants.STRATEGIES)
            self.context.prompt.render_failure_message(msg)
            return os.EX_DATAERR

        self.context.server.bind.bind(node_id,
                                      repo_id,
                                      dist_id,
                                      notify_agent=False,
                                      binding_config=binding_config)
        self.context.prompt.render_success_message(BIND_SUCCEEDED)
        warning = BIND_WARNING % dict(r=repo_id)
        self.context.prompt.render_warning_message(warning)
Example #4
0
    def unregister(self, **kwargs):

        force = kwargs['force']

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _("Write permission is required for %(d)s to perform this operation.")
            self.prompt.render_failure_message(msg % {'d': id_cert_dir})
            return exceptions.CODE_PERMISSIONS_EXCEPTION

        # Get the consumer ID
        try:
            consumer_id = load_consumer_id(self.context)
            if not consumer_id:
                msg = _('This consumer is not registered to the Pulp server.')
                self.context.prompt.render_failure_message(msg)
                return exceptions.CODE_NOT_FOUND
        except X509Error:
            self.context.logger.exception('Consumer certificate not valid.')
            if force:
                self._delete_cert()
                msg = _('Consumer certificate deleted.')
                self.context.prompt.render_success_message(msg)
                self._forced_warning()
                return os.EX_OK
            else:
                msg = _('Consumer certificate not valid. Please retry using the --force option.')
                self.context.prompt.render_failure_message(msg)
                return os.EX_DATAERR

        # Unregister on the server
        forced = True
        try:
            self.context.server.consumer.unregister(consumer_id)
            forced = False
        except NotFoundException:
            if not force:
                msg = _('This consumer does not exist on the server. Please retry using the --force option.')
                self.prompt.render_failure_message(msg)
                return exceptions.CODE_NOT_FOUND
        except X509Error:
            self.context.logger.exception('SSL connection failed.')
            if not force:
                msg = _('SSL connection failed. This error may be ignored by using the --force option.')
                self.prompt.render_failure_message(msg)
                return os.EX_OSERR
        except Exception:
            self.context.logger.exception('Unregistration failed')
            if not force:
                msg = _('Unregistration failed on the server. This error may be ignored by using the --force option.')
                self.prompt.render_failure_message(msg)
                return exceptions.CODE_UNEXPECTED

        # Unregister locally
        self._delete_cert()
        msg = 'Consumer [%(c)s] successfully unregistered' % dict(c=consumer_id)
        self.context.prompt.render_success_message(msg)
        if forced:
            self._forced_warning()
Example #5
0
    def bind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)

        if not consumer_id:
            m = _("This consumer is not registered to the Pulp server")
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs["repo-id"]

        try:
            response = self.context.server.bind.bind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID)
            msg = _("Bind tasks successfully created:")
            self.context.prompt.render_success_message(msg)
            tasks = [dict(task_id=str(t.task_id)) for t in response.response_body]
            self.context.prompt.render_document_list(tasks)
        except NotFoundException, e:
            resources = e.extra_data["resources"]
            if "consumer" in resources:
                r_type = _("Consumer")
                r_id = consumer_id
            else:
                r_type = _("Repository")
                r_id = repo_id
            msg = _("%(t)s [%(id)s] does not exist on the server")
            self.context.prompt.write(msg % {"t": r_type, "id": r_id}, tag="not-found")
Example #6
0
    def bind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)

        if not consumer_id:
            m = _('This consumer is not registered to the Pulp server')
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs['repo-id']

        try:
            response = self.context.server.bind.bind(consumer_id, repo_id,
                                                     YUM_DISTRIBUTOR_TYPE_ID)
            msg = _('Bind tasks successfully created:')
            self.context.prompt.render_success_message(msg)
            tasks = [
                dict(task_id=str(t.task_id))
                for t in response.response_body.spawned_tasks
            ]
            self.context.prompt.render_document_list(tasks)
        except BadRequestException, e:
            property_names = e.extra_data['property_names']
            if 'repo_id' in property_names:
                msg = _('Repository [%(r)s] does not exist on the server')
            else:
                msg = _('Repository [%(r)s] does not have a distributor')
            self.context.prompt.render_failure_message(msg % {'r': repo_id},
                                                       tag='not-found')
Example #7
0
    def unbind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            m = _('This consumer is not registered to the Pulp server')
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs['repo-id']
        force = kwargs['force']

        try:
            response = self.context.server.bind.unbind(
                consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID, force)
            msg = _('Unbind tasks successfully created:')
            self.context.prompt.render_success_message(msg)
            tasks = [
                dict(task_id=str(t.task_id))
                for t in response.response_body.spawned_tasks
            ]
            self.context.prompt.render_document_list(tasks)
        except NotFoundException, e:
            resources = e.extra_data['resources']
            if 'repo_id' in resources:
                m = _('Repository [%(r)s] does not exist on the server')
                d = {'r': repo_id}
            else:
                m = _(
                    'Binding [consumer: %(c)s, repository: %(r)s] does not exist on the server'
                )
                d = {
                    'c': consumer_id,
                    'r': repo_id,
                }
            self.context.prompt.render_failure_message(m % d, tag='not-found')
Example #8
0
    def run(self, **kwargs):

        consumer_id = load_consumer_id(self.context)
        strategy = kwargs[STRATEGY_OPTION.keyword]
        delta = {'notes': {constants.NODE_NOTE_KEY: True, constants.STRATEGY_NOTE_KEY: strategy}}

        if node_activated(self.context, consumer_id):
            self.context.prompt.render_success_message(ALREADY_ACTIVATED_NOTHING_DONE)
            return

        if strategy not in constants.STRATEGIES:
            msg = STRATEGY_NOT_SUPPORTED % dict(n=strategy, s=constants.STRATEGIES)
            self.context.prompt.render_failure_message(msg)
            return os.EX_DATAERR

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.context.prompt.render_success_message(NODE_ACTIVATED)
        except NotFoundException, e:
            for _id, _type in missing_resources(e):
                if _type == 'consumer':
                    self.context.prompt.render_failure_message(NOT_REGISTERED_MESSAGE)
                else:
                    raise
            return os.EX_DATAERR
Example #9
0
    def run(self, **kwargs):

        repo_id = kwargs[OPTION_REPO_ID.keyword]
        node_id = load_consumer_id(self.context)
        dist_id = constants.HTTP_DISTRIBUTOR
        strategy = kwargs[STRATEGY_OPTION.keyword]
        binding_config = {constants.STRATEGY_KEYWORD: strategy}

        if not node_activated(self.context, node_id):
            msg = NOT_ACTIVATED_ERROR
            self.context.prompt.render_failure_message(msg)
            return os.EX_USAGE

        if strategy not in constants.STRATEGIES:
            msg = STRATEGY_NOT_SUPPORTED % dict(n=strategy, s=constants.STRATEGIES)
            self.context.prompt.render_failure_message(msg)
            return os.EX_DATAERR

        try:
            self.context.server.bind.bind(node_id, repo_id, dist_id, notify_agent=False, binding_config=binding_config)
            self.context.prompt.render_success_message(BIND_SUCCEEDED)
            warning = BIND_WARNING % dict(r=repo_id)
            self.context.prompt.render_warning_message(warning)
        except NotFoundException, e:
            unhandled = self.missing_resources(self.context.prompt, e)
            for _id, _type in unhandled:
                if _type == "distributor":
                    msg = BIND_FAILED_NOT_ENABLED
                    self.context.prompt.render_failure_message(msg)
                else:
                    raise
            return os.EX_DATAERR
Example #10
0
    def update(self, **kwargs):

        # Assemble the delta for all options that were passed in
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message(
                "This consumer is not registered to the Pulp server.")
            return
        delta = dict([(k, v) for k, v in kwargs.items() if v is not None])
        if 'note' in delta.keys():
            if delta['note']:
                delta['notes'] = args_to_notes_dict(kwargs['note'],
                                                    include_none=False)
            delta.pop('note')
        # convert display-name to display_name
        key = 'display-name'
        if key in delta:
            v = delta.pop(key)
            key = key.replace('-', '_')
            delta[key] = v

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.prompt.render_success_message(
                'Consumer [%s] successfully updated' % consumer_id)
        except NotFoundException:
            self.prompt.write('Consumer [%s] does not exist on the server' %
                              consumer_id,
                              tag='not-found')
Example #11
0
    def run(self, **kwargs):

        self.context.prompt.render_warning_message(CLI_DEPRECATION_WARNING)

        consumer_id = load_consumer_id(self.context)
        strategy = kwargs[STRATEGY_OPTION.keyword]
        delta = {
            'notes': {
                constants.NODE_NOTE_KEY: True,
                constants.STRATEGY_NOTE_KEY: strategy
            }
        }

        if node_activated(self.context, consumer_id):
            self.context.prompt.render_success_message(
                ALREADY_ACTIVATED_NOTHING_DONE)
            return

        if strategy not in constants.STRATEGIES:
            msg = STRATEGY_NOT_SUPPORTED % dict(n=strategy,
                                                s=constants.STRATEGIES)
            self.context.prompt.render_failure_message(msg)
            return os.EX_DATAERR

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.context.prompt.render_success_message(NODE_ACTIVATED)
        except NotFoundException, e:
            for _id, _type in missing_resources(e):
                if _type == 'consumer':
                    self.context.prompt.render_failure_message(
                        NOT_REGISTERED_MESSAGE)
                else:
                    raise
            return os.EX_DATAERR
Example #12
0
    def run(self, **kwargs):

        repo_id = kwargs[OPTION_REPO_ID.keyword]
        node_id = load_consumer_id(self.context)
        dist_id = constants.HTTP_DISTRIBUTOR
        strategy = kwargs[STRATEGY_OPTION.keyword]
        binding_config = {constants.STRATEGY_KEYWORD: strategy}

        if not node_activated(self.context, node_id):
            msg = NOT_ACTIVATED_ERROR
            self.context.prompt.render_failure_message(msg)
            return os.EX_USAGE

        if not repository_enabled(self.context, repo_id):
            msg = BIND_FAILED_NOT_ENABLED
            self.context.prompt.render_failure_message(msg)
            return os.EX_USAGE

        if strategy not in constants.STRATEGIES:
            msg = STRATEGY_NOT_SUPPORTED % dict(n=strategy, s=constants.STRATEGIES)
            self.context.prompt.render_failure_message(msg)
            return os.EX_DATAERR

        self.context.server.bind.bind(
            node_id,
            repo_id,
            dist_id,
            notify_agent=False,
            binding_config=binding_config)
        self.context.prompt.render_success_message(BIND_SUCCEEDED)
        warning = BIND_WARNING % dict(r=repo_id)
        self.context.prompt.render_warning_message(warning)
Example #13
0
    def unregister(self, **kwargs):

        force = kwargs['force']

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _("Write permission is required for %(d)s to perform this operation.")
            self.prompt.render_failure_message(msg % {'d': id_cert_dir})
            return exceptions.CODE_PERMISSIONS_EXCEPTION

        # Get the consumer ID
        try:
            consumer_id = load_consumer_id(self.context)
            if not consumer_id:
                msg = _('This consumer is not registered to the Pulp server.')
                self.context.prompt.render_failure_message(msg)
                return exceptions.CODE_NOT_FOUND
        except X509Error:
            self.context.logger.exception('Consumer certificate not valid.')
            if force:
                self._delete_cert()
                msg = _('Consumer certificate deleted.')
                self.context.prompt.render_success_message(msg)
                self._forced_warning()
                return os.EX_OK
            else:
                msg = _('Consumer certificate not valid. Please retry using the --force option.')
                self.context.prompt.render_failure_message(msg)
                return os.EX_DATAERR

        # Unregister on the server
        forced = True
        try:
            self.context.server.consumer.unregister(consumer_id)
            forced = False
        except NotFoundException:
            if not force:
                msg = _('This consumer does not exist on the server. Please retry using the --force option.')
                self.prompt.render_failure_message(msg)
                return exceptions.CODE_NOT_FOUND
        except X509Error:
            self.context.logger.exception('SSL connection failed.')
            if not force:
                msg = _('SSL connection failed. This error may be ignored by using the --force option.')
                self.prompt.render_failure_message(msg)
                return os.EX_OSERR
        except Exception:
            self.context.logger.exception('Unregistration failed')
            if not force:
                msg = _('Unregistration failed on the server. This error may be ignored by using the --force option.')
                self.prompt.render_failure_message(msg)
                return exceptions.CODE_UNEXPECTED

        # Unregister locally
        self._delete_cert()
        msg = 'Consumer [%(c)s] successfully unregistered' % dict(c=consumer_id)
        self.context.prompt.render_success_message(msg)
        if forced:
            self._forced_warning()
Example #14
0
    def run(self, **kwargs):

        self.context.prompt.render_warning_message(CLI_DEPRECATION_WARNING)

        consumer_id = load_consumer_id(self.context)
        delta = {
            'notes': {
                constants.NODE_NOTE_KEY: None,
                constants.STRATEGY_NOTE_KEY: None
            }
        }

        if not node_activated(self.context, consumer_id):
            self.context.prompt.render_success_message(
                NOT_ACTIVATED_NOTHING_DONE)
            return

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.context.prompt.render_success_message(NODE_DEACTIVATED)
        except NotFoundException, e:
            for _id, _type in missing_resources(e):
                if _type == 'consumer':
                    self.context.prompt.render_failure_message(
                        NOT_REGISTERED_MESSAGE)
                else:
                    raise
            return os.EX_DATAERR
Example #15
0
    def status(self):
        consumer_id = load_consumer_id(self.context)

        if consumer_id:
            m = 'This consumer is registered with the ID [%(i)s].'
            self.prompt.render_success_message(_(m) % {'i' : consumer_id})
        else:
            m = 'This consumer is not currently registered.'
            self.prompt.render_paragraph(_(m))
Example #16
0
    def status(self):
        consumer_id = load_consumer_id(self.context)

        if consumer_id:
            server = self.context.config['server']['host']
            m = 'This consumer is registered to the server [%(s)s] with the ID [%(i)s].'
            self.prompt.render_success_message(_(m) % {'s': server, 'i' : consumer_id})
        else:
            m = 'This consumer is not currently registered.'
            self.prompt.render_paragraph(_(m))
Example #17
0
    def status(self):
        consumer_id = load_consumer_id(self.context)

        if consumer_id:
            server = self.context.config['server']['host']
            m = 'This consumer is registered to the server [%(s)s] with the ID [%(i)s].'
            self.prompt.render_success_message(_(m) % {'s': server, 'i' : consumer_id})
        else:
            m = 'This consumer is not currently registered.'
            self.prompt.render_paragraph(_(m))
Example #18
0
    def status(self):
        consumer_id = load_consumer_id(self.context)

        if consumer_id:
            server = self.context.config["server"]["host"]
            m = "This consumer is registered to the server [%(s)s] with the ID [%(i)s]."
            self.prompt.render_success_message(_(m) % {"s": server, "i": consumer_id})
        else:
            m = "This consumer is not currently registered."
            self.prompt.render_paragraph(_(m))
Example #19
0
 def unbind(self, **kwargs):
     consumer_id = load_consumer_id(self.context)
     if not consumer_id:
         self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
         return
     repo_id = kwargs['repo-id']
     distributor_id = kwargs['distributor-id']
     try:
         self.context.server.bind.unbind(consumer_id, repo_id, distributor_id)
         self.prompt.render_success_message('Consumer [%s] successfully unbound from repository distributor [%s : %s]' % (consumer_id, repo_id, distributor_id))
     except NotFoundException:
         self.prompt.write('Consumer [%s] does not exist on the server' % consumer_id, tag='not-found')
Example #20
0
    def history(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return
        self.prompt.render_title(_('Consumer History [%(i)s]') % {'i' : consumer_id})

        history_list = self.context.server.consumer_history.history(consumer_id, kwargs['event-type'], kwargs['limit'], kwargs['sort'],
                                                            kwargs['start-date'], kwargs['end-date']).response_body
        filters = ['consumer_id', 'type', 'details', 'originator', 'timestamp']
        order = filters
        for history in history_list:
            self.prompt.render_document(history, filters=filters, order=order)
Example #21
0
    def history(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return
        self.prompt.render_title(_('Consumer History [%(i)s]') % {'i' : consumer_id})

        history_list = self.context.server.consumer_history.history(consumer_id, kwargs['event-type'], kwargs['limit'], kwargs['sort'],
                                                            kwargs['start-date'], kwargs['end-date']).response_body
        filters = ['consumer_id', 'type', 'details', 'originator', 'timestamp']
        order = filters
        for history in history_list:
            self.prompt.render_document(history, filters=filters, order=order)
Example #22
0
    def history(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return
        self.prompt.render_title(_("Consumer History [%(i)s]") % {"i": consumer_id})

        history_list = self.context.server.consumer_history.history(
            consumer_id, kwargs["event-type"], kwargs["limit"], kwargs["sort"], kwargs["start-date"], kwargs["end-date"]
        ).response_body
        filters = ["consumer_id", "type", "details", "originator", "timestamp"]
        order = filters
        for history in history_list:
            self.prompt.render_document(history, filters=filters, order=order)
Example #23
0
 def bind(self, **kwargs):
     consumer_id = load_consumer_id(self.context)
     if not consumer_id:
         self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
         return
     repo_id = kwargs["repo-id"]
     distributor_id = kwargs["distributor-id"]
     try:
         self.context.server.bind.bind(consumer_id, repo_id, distributor_id)
         self.prompt.render_success_message(
             "Consumer [%s] successfully bound to repository distributor [%s : %s]"
             % (consumer_id, repo_id, distributor_id)
         )
     except NotFoundException:
         self.prompt.write("Consumer [%s] does not exist on the server" % consumer_id, tag="not-found")
Example #24
0
    def run(self, **kwargs):

        consumer_id = load_consumer_id(self.context)
        delta = {'notes': ACTIVATED_NOTE}

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.context.prompt.render_success_message(NODE_ACTIVATED)
        except NotFoundException, e:
            for _id, _type in missing_resources(e):
                if _type == 'consumer':
                    self.context.prompt.render_failure_message(NOT_REGISTERED_MESSAGE)
                else:
                    raise
            return os.EX_DATAERR
Example #25
0
    def unbind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            m = 'This consumer is not registered to the Pulp server'
            self.prompt.render_failure_message(_(m))
            return

        repo_id = kwargs['repo-id']

        try:
            self.context.server.bind.unbind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID)
            m = 'Consumer [%(c)s] successfully unbound from repository [%(r)s]'
            self.prompt.render_success_message(_(m) % {'c' : consumer_id, 'r' : repo_id})
        except NotFoundException:
            m = 'Consumer [%(c)s] does not exist on the server'
            self.prompt.render_failure_message(_(m) % {'c' : consumer_id}, tag='not-found')
Example #26
0
    def unregister(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.context.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return

        try:
            self.context.server.consumer.unregister(consumer_id)
            self._delete_cert()
            self.context.prompt.render_success_message('Consumer [%s] successfully unregistered' % consumer_id)
        except Exception:
            if kwargs['force']:
                self._delete_cert()
                self.context.prompt.render_success_message('Consumer [%s] successfully unregistered' % consumer_id)
            else:
                raise
Example #27
0
    def register(self, **kwargs):

        # Get consumer id
        id = kwargs['consumer-id']

        # Check if this consumer is already registered
        existing_consumer = load_consumer_id(self.context)
        if existing_consumer:
            m = _(
                'This system has already been registered as a consumer. Please '
                'use the unregister command to remove the consumer before attempting '
                'to re-register.')
            self.prompt.render_failure_message(m)
            return

        # Get other consumer parameters
        name = id
        if 'display-name' in kwargs:
            name = kwargs['display-name']
        description = kwargs['description']
        notes = None
        if 'note' in kwargs.keys():
            if kwargs['note']:
                notes = args_to_notes_dict(kwargs['note'], include_none=False)

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _(
                "Write permission is required for %(d)s to perform this operation."
            )
            self.prompt.render_failure_message(msg % {'d': id_cert_dir})
            return exceptions.CODE_PERMISSIONS_EXCEPTION

        # Call the server
        consumer = self.context.server.consumer.register(
            id, name, description, notes).response_body

        # Write consumer cert
        id_cert_name = self.context.config['filesystem']['id_cert_filename']
        cert_filename = os.path.join(id_cert_dir, id_cert_name)
        f = open(cert_filename, 'w')
        f.write(consumer['certificate'])
        f.close()

        self.prompt.render_success_message(
            'Consumer [%s] successfully registered' % id)
Example #28
0
    def unbind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            m = "This consumer is not registered to the Pulp server"
            self.prompt.render_failure_message(_(m))
            return

        repo_id = kwargs["repo-id"]
        force = kwargs["force"]

        try:
            self.context.server.bind.unbind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID, force)
            m = "Consumer [%(c)s] successfully unbound from repository [%(r)s]"
            self.prompt.render_success_message(_(m) % {"c": consumer_id, "r": repo_id})
        except NotFoundException:
            m = "Consumer [%(c)s] does not exist on the server"
            self.prompt.render_failure_message(_(m) % {"c": consumer_id}, tag="not-found")
Example #29
0
    def update(self, **kwargs):

        # Assemble the delta for all options that were passed in
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return
        delta = dict([(k, v) for k, v in kwargs.items() if v is not None])
        if 'note' in delta.keys():
            if delta['note']:
                delta['notes'] = args_to_notes_dict(kwargs['note'], include_none=False)
            delta.pop('note')

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.prompt.render_success_message('Consumer [%s] successfully updated' % consumer_id)
        except NotFoundException:
            self.prompt.write('Consumer [%s] does not exist on the server' % consumer_id, tag='not-found')
Example #30
0
    def register(self, **kwargs):

        # Get consumer id
        id = kwargs["consumer-id"]

        # Check if this consumer is already registered
        existing_consumer = load_consumer_id(self.context)
        if existing_consumer:
            m = (
                "This system has already been registered as a consumer. Please "
                "use the unregister command to remove the consumer before attempting "
                "to reregister."
            )
            self.prompt.render_failure_message(_(m))
            return

        # Get other consumer parameters
        name = id
        if "display-name" in kwargs:
            name = kwargs["display-name"]
        description = kwargs["description"]
        notes = None
        if "note" in kwargs.keys():
            if kwargs["note"]:
                notes = args_to_notes_dict(kwargs["note"], include_none=False)

        # Check write permissions to cert directory
        id_cert_dir = self.context.config["filesystem"]["id_cert_dir"]
        if not os.access(id_cert_dir, os.W_OK):
            msg = _("Write permission is required for %(d)s to perform this operation.")
            self.prompt.render_failure_message(msg % {"d": id_cert_dir})
            return os.EX_NOPERM

        # Call the server
        consumer = self.context.server.consumer.register(id, name, description, notes).response_body

        # Write consumer cert
        id_cert_name = self.context.config["filesystem"]["id_cert_filename"]
        cert_filename = os.path.join(id_cert_dir, id_cert_name)
        f = open(cert_filename, "w")
        f.write(consumer["certificate"])
        f.close()

        self.prompt.render_success_message("Consumer [%s] successfully registered" % id)
Example #31
0
File: cli.py Project: zjhuntin/pulp
    def update(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message(
                "This consumer is not registered to the Pulp "
                "server.")
            return

        delta = dict([(k, v) for k, v in kwargs.items() if v is not None])
        if 'note' in delta.keys():
            if delta['note']:
                delta['notes'] = args_to_notes_dict(kwargs['note'],
                                                    include_none=False)
            delta.pop('note')
        # convert display-name to display_name
        key = 'display-name'
        if key in delta:
            v = delta.pop(key)
            key = key.replace('-', '_')
            delta[key] = v

        if kwargs.get(OPTION_EXCHANGE_KEYS.keyword):
            path = self.context.config['authentication']['rsa_pub']
            fp = open(path)
            try:
                delta['rsa_pub'] = fp.read()
            finally:
                fp.close()

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.prompt.render_success_message(
                'Consumer [%s] successfully updated' % consumer_id)
            if not kwargs.get(OPTION_EXCHANGE_KEYS.keyword):
                return
            try:
                update_server_key(self.context.config)
            except Exception, e:
                msg = _('Download server RSA key failed [%(e)s]' % {'e': e})
                self.prompt.render_failure_message(msg)
        except NotFoundException:
            self.prompt.write('Consumer [%s] does not exist on the server' %
                              consumer_id,
                              tag='not-found')
Example #32
0
    def run(self, **kwargs):

        consumer_id = load_consumer_id(self.context)
        delta = {"notes": {constants.NODE_NOTE_KEY: None, constants.STRATEGY_NOTE_KEY: None}}

        if not node_activated(self.context, consumer_id):
            self.context.prompt.render_success_message(NOT_ACTIVATED_NOTHING_DONE)
            return

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.context.prompt.render_success_message(NODE_DEACTIVATED)
        except NotFoundException, e:
            for _id, _type in missing_resources(e):
                if _type == "consumer":
                    self.context.prompt.render_failure_message(NOT_REGISTERED_MESSAGE)
                else:
                    raise
            return os.EX_DATAERR
Example #33
0
    def register(self, **kwargs):

        # Get consumer id
        id = kwargs['consumer-id']

        # Check if this consumer is already registered
        existing_consumer = load_consumer_id(self.context)
        if existing_consumer:
            m = _('This system has already been registered as a consumer. Please '
                  'use the unregister command to remove the consumer before attempting '
                  'to re-register.')
            self.prompt.render_failure_message(m)
            return

        # Get other consumer parameters
        name = id
        if 'display-name' in kwargs:
            name = kwargs['display-name']
        description = kwargs['description']
        notes = None
        if 'note' in kwargs.keys():
            if kwargs['note']:
                notes = args_to_notes_dict(kwargs['note'], include_none=False)

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _("Write permission is required for %(d)s to perform this operation.")
            self.prompt.render_failure_message(msg % {'d': id_cert_dir})
            return exceptions.CODE_PERMISSIONS_EXCEPTION

        # Call the server
        consumer = self.context.server.consumer.register(id, name, description, notes).response_body

        # Write consumer cert
        id_cert_name = self.context.config['filesystem']['id_cert_filename']
        cert_filename = os.path.join(id_cert_dir, id_cert_name)
        f = open(cert_filename, 'w')
        f.write(consumer['certificate'])
        f.close()

        self.prompt.render_success_message('Consumer [%s] successfully registered' % id)
Example #34
0
    def run(self, **kwargs):

        repo_id = kwargs[OPTION_REPO_ID.keyword]
        node_id = load_consumer_id(self.context)
        dist_id = constants.HTTP_DISTRIBUTOR

        try:
            self.context.server.bind.unbind(node_id, repo_id, dist_id)
            self.context.prompt.render_success_message(UNBIND_SUCCEEDED)
            warning = UNBIND_WARNING % dict(r=repo_id)
            self.context.prompt.render_warning_message(warning)
        except NotFoundException, e:
            unhandled = self.missing_resources(self.context.prompt, e)
            for _id, _type in unhandled:
                if _type == 'bind_id':
                    msg = NOT_BOUND_NOTHING_DONE
                    self.context.prompt.render_failure_message(msg)
                else:
                    raise
            return os.EX_DATAERR
Example #35
0
    def run(self, **kwargs):

        repo_id = kwargs[OPTION_REPO_ID.keyword]
        node_id = load_consumer_id(self.context)
        dist_id = constants.HTTP_DISTRIBUTOR

        try:
            self.context.server.bind.unbind(node_id, repo_id, dist_id)
            self.context.prompt.render_success_message(UNBIND_SUCCEEDED)
            warning = UNBIND_WARNING % dict(r=repo_id)
            self.context.prompt.render_warning_message(warning)
        except NotFoundException, e:
            unhandled = self.missing_resources(self.context.prompt, e)
            for _id, _type in unhandled:
                if _type == "bind_id":
                    msg = NOT_BOUND_NOTHING_DONE
                    self.context.prompt.render_success_message(msg)
                else:
                    raise
            return os.EX_DATAERR
Example #36
0
    def unbind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            m = _("This consumer is not registered to the Pulp server")
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs["repo-id"]
        force = kwargs["force"]

        try:
            response = self.context.server.bind.unbind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID, force)
            msg = _("Unbind tasks successfully created:")
            self.context.prompt.render_success_message(msg)
            tasks = [dict(task_id=str(t.task_id)) for t in response.response_body]
            self.context.prompt.render_document_list(tasks)
        except NotFoundException, e:
            bind_id = e.extra_data["resources"]["bind_id"]
            m = _("Binding [consumer: %(c)s, repository: %(r)s] does not exist on the server")
            d = {"c": bind_id["consumer_id"], "r": bind_id["repo_id"]}
            self.context.prompt.write(m % d, tag="not-found")
Example #37
0
File: cli.py Project: credativ/pulp
    def update(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message("This consumer is not registered to the Pulp "
                                               "server.")
            return

        delta = dict([(k, v) for k, v in kwargs.items() if v is not None])
        if 'note' in delta.keys():
            if delta['note']:
                delta['notes'] = args_to_notes_dict(kwargs['note'], include_none=False)
            delta.pop('note')
        # convert display-name to display_name
        key = 'display-name'
        if key in delta:
            v = delta.pop(key)
            key = key.replace('-', '_')
            delta[key] = v

        if kwargs.get(OPTION_EXCHANGE_KEYS.keyword):
            path = self.context.config['authentication']['rsa_pub']
            fp = open(path)
            try:
                delta['rsa_pub'] = fp.read()
            finally:
                fp.close()

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.prompt.render_success_message('Consumer [%s] successfully updated' % consumer_id)
            if not kwargs.get(OPTION_EXCHANGE_KEYS.keyword):
                return
            try:
                update_server_key(self.context.config)
            except Exception, e:
                msg = _('Download server RSA key failed [%(e)s]' % {'e': e})
                self.prompt.render_failure_message(msg)
        except NotFoundException:
            self.prompt.write('Consumer [%s] does not exist on the server' % consumer_id,
                              tag='not-found')
Example #38
0
    def bind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)

        if not consumer_id:
            m = _('This consumer is not registered to the Pulp server')
            self.prompt.render_failure_message(m)
            return

        repo_id = kwargs['repo-id']

        try:
            response = self.context.server.bind.bind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID)
            msg = _('Bind tasks successfully created:')
            self.context.prompt.render_success_message(msg)
            tasks = [dict(task_id=str(t.task_id)) for t in response.response_body.spawned_tasks]
            self.context.prompt.render_document_list(tasks)
        except BadRequestException, e:
            property_names = e.extra_data['property_names']
            if 'repo_id' in property_names:
                msg = _('Repository [%(r)s] does not exist on the server')
            else:
                msg = _('Repository [%(r)s] does not have a distributor')
            self.context.prompt.render_failure_message(msg % {'r': repo_id}, tag='not-found')
Example #39
0
    def run(self, **kwargs):

        repo_id = kwargs[OPTION_REPO_ID.keyword]
        node_id = load_consumer_id(self.context)
        dist_id = constants.HTTP_DISTRIBUTOR
        strategy = kwargs[STRATEGY_OPTION.keyword]
        binding_config = {constants.STRATEGY_KEYWORD: strategy}

        if not node_activated(self.context, node_id):
            msg = NOT_ACTIVATED_ERROR
            self.context.prompt.render_failure_message(msg)
            return os.EX_USAGE

        if strategy not in constants.STRATEGIES:
            msg = STRATEGY_NOT_SUPPORTED % dict(n=strategy, s=constants.STRATEGIES)
            self.context.prompt.render_failure_message(msg)
            return os.EX_DATAERR

        try:
            self.context.server.bind.bind(
                node_id,
                repo_id,
                dist_id,
                notify_agent=False,
                binding_config=binding_config)
            self.context.prompt.render_success_message(BIND_SUCCEEDED)
            warning = BIND_WARNING % dict(r=repo_id)
            self.context.prompt.render_warning_message(warning)
        except NotFoundException, e:
            unhandled = self.missing_resources(self.context.prompt, e)
            for _id, _type in unhandled:
                if _type == 'distributor':
                    msg = BIND_FAILED_NOT_ENABLED
                    self.context.prompt.render_failure_message(msg)
                else:
                    raise
            return os.EX_DATAERR
Example #40
0
    def bind(self, **kwargs):
        consumer_id = load_consumer_id(self.context)

        if not consumer_id:
            m = "This consumer is not registered to the Pulp server"
            self.prompt.render_failure_message(_(m))
            return

        repo_id = kwargs["repo-id"]

        try:
            self.context.server.bind.bind(consumer_id, repo_id, YUM_DISTRIBUTOR_TYPE_ID)
            m = "Consumer [%(c)s] successfully bound to repository [%(r)s]"
            self.prompt.render_success_message(_(m) % {"c": consumer_id, "r": repo_id})
        except NotFoundException, e:
            resources = e.extra_data["resources"]
            if "consumer" in resources:
                r_type = _("Consumer")
                r_id = consumer_id
            else:
                r_type = _("Repository")
                r_id = repo_id
            msg = _("%(t)s [%(id)s] does not exist on the server")
            self.context.prompt.write(msg % {"t": r_type, "id": r_id}, tag="not-found")
Example #41
0
    def update(self, **kwargs):

        # Assemble the delta for all options that were passed in
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return
        delta = dict([(k, v) for k, v in kwargs.items() if v is not None])
        if "note" in delta.keys():
            if delta["note"]:
                delta["notes"] = args_to_notes_dict(kwargs["note"], include_none=False)
            delta.pop("note")
        # convert display-name to display_name
        key = "display-name"
        if key in delta:
            v = delta.pop(key)
            key = key.replace("-", "_")
            delta[key] = v

        try:
            self.context.server.consumer.update(consumer_id, delta)
            self.prompt.render_success_message("Consumer [%s] successfully updated" % consumer_id)
        except NotFoundException:
            self.prompt.write("Consumer [%s] does not exist on the server" % consumer_id, tag="not-found")
Example #42
0
    def unregister(self, **kwargs):
        consumer_id = load_consumer_id(self.context)
        if not consumer_id:
            self.context.prompt.render_failure_message("This consumer is not registered to the Pulp server.")
            return

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _("Write permission is required for %(d)s to perform this operation.")
            self.prompt.render_failure_message(msg % {'d' : id_cert_dir})
            return os.EX_NOPERM

        try:
            self.context.server.consumer.unregister(consumer_id)
            self._delete_cert()
            self.context.prompt.render_success_message('Consumer [%s] successfully unregistered' % consumer_id)
        except NotFoundException:
            if kwargs['force']:
                self._delete_cert()
                self.context.prompt.render_success_message('Consumer [%s] successfully unregistered' % consumer_id)
            else:
                msg = _('This consumer does not exist on the server. Please retry using the --force option.')
                self.prompt.render_failure_message(msg)
Example #43
0
File: cli.py Project: pombreda/pulp
    def register(self, **kwargs):
        consumer_id = kwargs['consumer-id']

        # Check if this consumer is already registered

        existing_consumer = load_consumer_id(self.context)
        if existing_consumer:
            m = _(
                'This system has already been registered as a consumer. Please '
                'use the unregister command to remove the consumer before attempting '
                'to re-register.')
            self.prompt.render_failure_message(m)
            return

        # Get other consumer parameters

        name = kwargs.get('display-name', consumer_id)
        description = kwargs.get('description')
        notes = kwargs.get('note')
        if notes:
            notes = args_to_notes_dict(notes, include_none=False)

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _(
                "Write permission is required for %(d)s to perform this operation."
            )
            self.prompt.render_failure_message(msg % {'d': id_cert_dir})
            return exceptions.CODE_PERMISSIONS_EXCEPTION

        # RSA key
        path = self.context.config['authentication']['rsa_key']
        key = RSA.gen_key(2048, 65535, no_passphrase_callback)
        key.save_key(path, None)
        path = self.context.config['authentication']['rsa_pub']
        key.save_pub_key(path)
        fp = open(path)
        try:
            rsa_pub = fp.read()
        finally:
            fp.close()

        # Call the server

        reply = self.context.server.consumer.register(consumer_id,
                                                      name=name,
                                                      description=description,
                                                      notes=notes,
                                                      rsa_pub=rsa_pub)

        certificate = reply.response_body['certificate']

        # Write consumer certificate

        id_cert_name = self.context.config['filesystem']['id_cert_filename']
        cert_filename = os.path.join(id_cert_dir, id_cert_name)
        fp = open(cert_filename, 'w')
        try:
            fp.write(certificate)
        finally:
            fp.close()

        # download server public key

        try:
            update_server_key(self.context.config)
        except Exception, e:
            msg = _('Download server RSA key failed [%(e)s]' % {'e': e})
            self.prompt.render_failure_message(msg)
Example #44
0
 def get_consumer_id(self, kwargs):
     """
     Override this method to provide the consumer id to the run method.
     """
     return kwargs.get(OPTION_CONSUMER_ID.keyword,
                       load_consumer_id(self.context))
Example #45
0
    def register(self, **kwargs):
        consumer_id = kwargs['consumer-id']

        # Check if this consumer is already registered

        existing_consumer = load_consumer_id(self.context)
        if existing_consumer:
            m = _('This system has already been registered as a consumer. Please '
                  'use the unregister command to remove the consumer before attempting '
                  'to re-register.')
            self.prompt.render_failure_message(m)
            return

        # Get other consumer parameters

        name = kwargs.get('display-name', consumer_id)
        description = kwargs.get('description')
        notes = kwargs.get('note')
        if notes:
            notes = args_to_notes_dict(notes, include_none=False)

        # Check write permissions to cert directory
        id_cert_dir = self.context.config['filesystem']['id_cert_dir']
        if not os.access(id_cert_dir, os.W_OK):
            msg = _("Write permission is required for %(d)s to perform this operation.")
            self.prompt.render_failure_message(msg % {'d': id_cert_dir})
            return exceptions.CODE_PERMISSIONS_EXCEPTION

        # RSA key
        path = self.context.config['authentication']['rsa_key']
        key = RSA.gen_key(2048, 65535, no_passphrase_callback)
        key.save_key(path, None)
        path = self.context.config['authentication']['rsa_pub']
        key.save_pub_key(path)
        fp = open(path)
        try:
            rsa_pub = fp.read()
        finally:
            fp.close()

        # Call the server

        reply = self.context.server.consumer.register(
            consumer_id,
            name=name,
            description=description,
            notes=notes,
            rsa_pub=rsa_pub)

        certificate = reply.response_body['certificate']

        # Write consumer certificate

        id_cert_name = self.context.config['filesystem']['id_cert_filename']
        cert_filename = os.path.join(id_cert_dir, id_cert_name)
        # os.WRONLY opens the file for writing only; os.O_CREAT will create the
        # file if it does not already exist.
        fp = os.fdopen(os.open(cert_filename, os.O_WRONLY | os.O_CREAT, 0600), 'w')
        try:
            fp.write(certificate)
        finally:
            fp.close()

        update_server_key(self)
        self.prompt.render_success_message('Consumer [%s] successfully registered' % consumer_id)