def set_value(self, name, value, ttl=None, local=True, scope=SYSTEM_SCOPE, encrypt=False): """ Store a value in a dictionary which is local to this class. """ name = self._get_full_key_name(name=name, local=local) instance = KeyValuePair() instance.id = name instance.name = name instance.value = value if ttl: self._logger.warning( "MockDatastoreService is not able to expire keys based on ttl." ) instance.ttl = ttl self._datastore_items[name] = instance return True
def run(self, args, **kwargs): # normalize the file path to allow for relative files to be specified file_path = os.path.normpath(pjoin(os.getcwd(), args.file)) # load the data (JSON/YAML) from the file kvps = resource.load_meta_file(file_path) instances = [] # bail out if file was empty if not kvps: return instances # if the data is not a list (ie. it's a single entry) # then make it a list so our process loop is generic if not isinstance(kvps, list): kvps = [kvps] for item in kvps: # parse required KeyValuePair properties name = item['name'] value = item['value'] # parse optional KeyValuePair properties scope = item.get('scope', DEFAULT_CUD_SCOPE) user = item.get('user', None) secret = item.get('secret', False) ttl = item.get('ttl', None) # if the value is not a string, convert it to JSON # all keys in the datastore must strings if not isinstance(value, six.string_types): if args.convert: value = json.dumps(value) else: raise ValueError( ("Item '%s' has a value that is not a string." " Either pass in the -c/--convert option to convert" " non-string types to JSON strings automatically, or" " convert the data to a string in the file") % name) # create the KeyValuePair instance instance = KeyValuePair() instance.id = name # TODO: refactor and get rid of id instance.name = name instance.value = value instance.scope = scope if user: instance.user = user if secret: instance.secret = secret if ttl: instance.ttl = ttl # call the API to create/update the KeyValuePair self.manager.update(instance, **kwargs) instances.append(instance) return instances
def run(self, args, **kwargs): instance = KeyValuePair() instance.id = args.name # TODO: refactor and get rid of id instance.name = args.name instance.value = args.value if args.ttl: instance.ttl = args.ttl return self.manager.update(instance, **kwargs)
def run(self, args, **kwargs): # normalize the file path to allow for relative files to be specified file_path = os.path.normpath(pjoin(os.getcwd(), args.file)) # load the data (JSON/YAML) from the file kvps = resource.load_meta_file(file_path) # if the data is not a list (ie. it's a single entry) # then make it a list so our process loop is generic if not isinstance(kvps, list): kvps = [kvps] instances = [] for item in kvps: # parse required KeyValuePair properties name = item['name'] value = item['value'] # parse optional KeyValuePair properties scope = item.get('scope', DEFAULT_SCOPE) user = item.get('user', None) secret = item.get('secret', False) ttl = item.get('ttl', None) # if the value is not a string, convert it to JSON # all keys in the datastore must strings if not isinstance(value, six.string_types): if args.convert: value = json.dumps(value) else: raise ValueError(("Item '%s' has a value that is not a string." " Either pass in the -c/--convert option to convert" " non-string types to JSON strings automatically, or" " convert the data to a string in the file") % name) # create the KeyValuePair instance instance = KeyValuePair() instance.id = name # TODO: refactor and get rid of id instance.name = name instance.value = value instance.scope = scope if user: instance.user = user if secret: instance.secret = secret if ttl: instance.ttl = ttl # call the API to create/update the KeyValuePair self.manager.update(instance, **kwargs) instances.append(instance) return instances
def set_value( self, name, value, ttl=None, local=True, scope=SYSTEM_SCOPE, encrypt=False ): """ Set a value for the provided key. By default, value is set in a namespace local to the pack/class. If you want to set a global value, pass local=False to this method. :param name: Key name. :type name: ``str`` :param value: Key value. :type value: ``str`` :param ttl: Optional TTL (in seconds). :type ttl: ``int`` :param local: Set value in a namespace local to the pack/class. Defaults to True. :type: local: ``bool`` :param scope: Scope under which to place the item. Defaults to system scope. :type: local: ``str`` :param encrypt: Encrypt the value when saving. Defaults to False. :type: local: ``bool`` :return: ``True`` on success, ``False`` otherwise. :rtype: ``bool`` """ if scope != SYSTEM_SCOPE: raise ValueError("Scope %s is unsupported." % scope) name = self._get_full_key_name(name=name, local=local) value = str(value) client = self.get_api_client() self._logger.debug("Setting value in the datastore (name=%s)", name) instance = KeyValuePair() instance.id = name instance.name = name instance.value = value instance.scope = scope if encrypt: instance.secret = True if ttl: instance.ttl = ttl client.keys.update(instance=instance) return True
def run(self, args, **kwargs): instance = KeyValuePair() instance.id = args.name # TODO: refactor and get rid of id instance.name = args.name instance.value = args.value instance.scope = args.scope instance.user = args.user if args.secret: instance.secret = args.secret if args.encrypted: instance.encrypted = args.encrypted if args.ttl: instance.ttl = args.ttl return self.manager.update(instance, **kwargs)
def set_value(self, name, value, ttl=None, local=True): """ Set a value for the provided key. By default, value is set in a namespace local to the sensor. If you want to set a global value, pass local=False to this method. :param name: Key name. :type name: ``str`` :param value: Key value. :type value: ``str`` :param ttl: Optional TTL (in seconds). :type ttl: ``int`` :param local: Set value in a namespace local to the sensor. Defaults to True. :type: local: ``bool`` :return: ``True`` on success, ``False`` otherwise. :rtype: ``bool`` """ if local: name = self._get_key_name_with_sensor_prefix(name=name) value = str(value) client = self._get_api_client() self._logger.audit('Setting value in the datastore (name=%s)', name) instance = KeyValuePair() instance.id = name instance.name = name instance.value = value if ttl: instance.ttl = ttl client.keys.update(instance=instance) return True