本文整理汇总了Python中salt.utils.odict.OrderedDict.get方法的典型用法代码示例。如果您正苦于以下问题:Python OrderedDict.get方法的具体用法?Python OrderedDict.get怎么用?Python OrderedDict.get使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类salt.utils.odict.OrderedDict
的用法示例。
在下文中一共展示了OrderedDict.get方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: iostat
# 需要导入模块: from salt.utils.odict import OrderedDict [as 别名]
# 或者: from salt.utils.odict.OrderedDict import get [as 别名]
def iostat(zpool=None, sample_time=0):
'''
.. versionchanged:: 2016.3.0
Display I/O statistics for the given pools
zpool : string
optional name of storage pool
sample_time : int
seconds to capture data before output
CLI Example:
.. code-block:: bash
salt '*' zpool.iostat myzpool
'''
ret = OrderedDict()
# get zpool list data
zpool_cmd = _check_zpool()
cmd = '{zpool_cmd} iostat -v{zpool}{sample_time}'.format(
zpool_cmd=zpool_cmd,
zpool=' {0}'.format(zpool) if zpool else '',
sample_time=' {0} 2'.format(sample_time) if sample_time else ''
)
res = __salt__['cmd.run_all'](cmd, python_shell=False)
if res['retcode'] != 0:
ret['error'] = res['stderr'] if 'stderr' in res else res['stdout']
return ret
# note: hardcoded header fields, the double header is hard to parse
# capacity operations bandwidth
#pool alloc free read write read write
header = [
'pool',
'capacity-alloc',
'capacity-free',
'operations-read',
'operations-write',
'bandwith-read',
'bandwith-write'
]
root_vdev = None
vdev = None
dev = None
config_data = None
current_pool = None
for line in res['stdout'].splitlines():
if line.strip() == '':
continue
# ignore header
if line.startswith('pool') and line.endswith('write'):
continue
if line.endswith('bandwidth'):
continue
if line.startswith('-') and line.endswith('-'):
if config_data:
ret[current_pool] = config_data
config_data = OrderedDict()
current_pool = None
else:
if not isinstance(config_data, salt.utils.odict.OrderedDict):
continue
stat_data = OrderedDict()
stats = [x for x in line.strip().split(' ') if x not in ['']]
for prop in header:
if header.index(prop) < len(stats):
if prop == 'pool':
if not current_pool:
current_pool = stats[header.index(prop)]
continue
if stats[header.index(prop)] == '-':
continue
stat_data[prop] = stats[header.index(prop)]
dev = line.strip().split()[0]
if line[0:4] != ' ':
if line[0:2] == ' ':
vdev = line.strip().split()[0]
dev = None
else:
root_vdev = line.strip().split()[0]
vdev = None
dev = None
if root_vdev:
if not config_data.get(root_vdev):
config_data[root_vdev] = {}
if len(stat_data) > 0:
config_data[root_vdev] = stat_data
if vdev:
if vdev not in config_data[root_vdev]:
config_data[root_vdev][vdev] = {}
if len(stat_data) > 0:
config_data[root_vdev][vdev] = stat_data
#.........这里部分代码省略.........
示例2: managed
# 需要导入模块: from salt.utils.odict import OrderedDict [as 别名]
# 或者: from salt.utils.odict.OrderedDict import get [as 别名]
#.........这里部分代码省略.........
Example ``'changes'`` dict where a new entry was created
with a single attribute containing two values::
{'dn1': {'old': None,
'new': {'attr1': ['val1', 'val2']}}}
Example ``'changes'`` dict where a new attribute was added
to an existing entry::
{'dn1': {'old': {},
'new': {'attr2': ['val3']}}}
* ``'result'``
One of the following values:
* ``True`` if no changes were necessary or if all changes
were applied successfully.
* ``False`` if at least one change was unable to be applied.
* ``None`` if changes would be applied but it is in test
mode.
'''
if connect_spec is None:
connect_spec = {}
try:
connect_spec.setdefault('url', name)
except AttributeError:
# already a connection object
pass
connect = __salt__['ldap3.connect']
# hack to get at the ldap3 module to access the ldap3.LDAPError
# exception class. https://github.com/saltstack/salt/issues/27578
ldap3 = inspect.getmodule(connect)
with connect(connect_spec) as l:
old, new = _process_entries(l, entries)
# collect all of the affected entries (only the key is
# important in this dict; would have used an OrderedSet if
# there was one)
dn_set = OrderedDict()
dn_set.update(old)
dn_set.update(new)
# do some cleanup
dn_to_delete = set()
for dn in dn_set:
o = old.get(dn, {})
n = new.get(dn, {})
for x in o, n:
to_delete = set()
for attr, vals in six.iteritems(x):
if not len(vals):
# clean out empty attribute lists
to_delete.add(attr)
for attr in to_delete:
del x[attr]
if o == n:
# clean out unchanged entries
dn_to_delete.add(dn)
for dn in dn_to_delete:
for x in old, new:
x.pop(dn, None)
del dn_set[dn]
示例3: _process_entries
# 需要导入模块: from salt.utils.odict import OrderedDict [as 别名]
# 或者: from salt.utils.odict.OrderedDict import get [as 别名]
def _process_entries(l, entries):
'''Helper for managed() to process entries and return before/after views
Collect the current database state and update it according to the
data in :py:func:`managed`'s ``entries`` parameter. Return the
current database state and what it will look like after
modification.
:param l:
the LDAP connection object
:param entries:
the same object passed to the ``entries`` parameter of
:py:func:`manage`
:return:
an ``(old, new)`` tuple that describes the current state of
the entries and what they will look like after modification.
Each item in the tuple is an OrderedDict that maps an entry DN
to another dict that maps an attribute name to a set of its
values (it's a set because according to the LDAP spec,
attribute value ordering is unspecified and there can't be
duplicates). The structure looks like this:
{dn1: {attr1: set([val1])},
dn2: {attr1: set([val2]), attr2: set([val3, val4])}}
All of an entry's attributes and values will be included, even
if they will not be modified. If an entry mentioned in the
entries variable doesn't yet exist in the database, the DN in
``old`` will be mapped to an empty dict. If an entry in the
database will be deleted, the DN in ``new`` will be mapped to
an empty dict. All value sets are non-empty: An attribute
that will be added to an entry is not included in ``old``, and
an attribute that will be deleted frm an entry is not included
in ``new``.
These are OrderedDicts to ensure that the user-supplied
entries are processed in the user-specified order (in case
there are dependencies, such as ACL rules specified in an
early entry that make it possible to modify a later entry).
'''
old = OrderedDict()
new = OrderedDict()
for entries_dict in entries:
for dn, directives_seq in six.iteritems(entries_dict):
# get the old entry's state. first check to see if we've
# previously processed the entry.
olde = new.get(dn, None)
if olde is None:
# next check the database
results = __salt__['ldap3.search'](l, dn, 'base')
if len(results) == 1:
attrs = results[dn]
olde = dict(((attr, set(attrs[attr]))
for attr in attrs
if len(attrs[attr])))
else:
# nothing, so it must be a brand new entry
assert len(results) == 0
olde = {}
old[dn] = olde
# copy the old entry to create the new (don't do a simple
# assignment or else modifications to newe will affect
# olde)
newe = copy.deepcopy(olde)
new[dn] = newe
# process the directives
entry_status = {
'delete_others': False,
'mentioned_attributes': set(),
}
for directives in directives_seq:
_update_entry(newe, entry_status, directives)
if entry_status['delete_others']:
to_delete = set()
for attr in newe:
if attr not in entry_status['mentioned_attributes']:
to_delete.add(attr)
for attr in to_delete:
del newe[attr]
return old, new
示例4: PathInfoDict
# 需要导入模块: from salt.utils.odict import OrderedDict [as 别名]
# 或者: from salt.utils.odict.OrderedDict import get [as 别名]
class PathInfoDict(fileinfo.FileInfo):
def __init__(self, match_each=True, **patterns):
'''
match_each:
If True, each file path is matched which prevents uses less memory
but sacrifices performance a little bit. If False, the complete
list is matched after all the file information has been added to
pathinfo.
patterns:
Contains the patterns to match.
Example:
{ 'saltenv': 'base', 'relpath': ['*.sls'] }
'''
super(PathInfoDict, self).__init__(
fields=PATHINFO_FIELDS,
match_each=match_each,
**patterns
)
self._elements = OrderedDict()
@property
def as_sequence(self):
if self.pattern and not self.match_each:
return list(
matcher.ifilter(
self._elements.values(),
_pattern=self.pattern
)
)
return self._elements.values()
def element(self, root=None, abspath=None, **kwargs):
'''
kwargs contain extra information for custom methods.
This method must return a valid empty object if no vars are passed
to allow introspection to create patterns.
:param root:
:param abspath:
'''
if root is None and abspath is None:
root = os.path.abspath('.')
abspath = os.path.abspath('.')
relpath = os.path.relpath(abspath, root)
try:
element = self._elements.get(relpath, OrderedDict())
except AttributeError:
element = OrderedDict()
if not element:
for field in PATHINFO_FIELDS:
element.setdefault(field, '')
element['saltenv'] = kwargs.get('saltenv', 'base')
element['relpath'] = relpath
element['abspath'] = abspath
element['is_pillar'] = kwargs.get('is_pillar', False)
cachedir = kwargs.get('cachedir', '')
if cachedir and os.path.commonprefix([abspath, cachedir]) == cachedir:
element['cache_root'] = root
else:
element['file_root'] = root
element_hook = kwargs.get('_element_hook', None)
if element_hook:
element = element_hook(self, element, **kwargs)
return element
def add_element(self, element, **kwargs):
add_hook = kwargs.get('_add_hook', None)
if add_hook:
element = add_hook(self, element, **kwargs)
if element['relpath'] not in self._elements:
self._elements[element['relpath']] = element
def filelist(self, roots, **kwargs):
'''
:param roots:
file_roots, pillar_roots, cache_roots, etc to walk.
kwargs:
Contains any extra variables to pass to element.
'''
for env, destdirs in six.iteritems(roots):
kwargs['saltenv'] = env
super(PathInfoDict, self).filelist(destdirs, **kwargs)
return self.as_sequence