1 # -*- coding: utf-8 -*-
3 # -------------------------------------------------------------
4 # Salt — Node execution module
5 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8 # Description: Functions related to the nodes pillar entry
9 # License: BSD-2-Clause
10 # -------------------------------------------------------------
13 from salt
.exceptions
import CommandExecutionError
, SaltCloudConfigError
17 return __pillar__
.get('nodes', {})
20 def get_all_properties(nodename
=None):
22 A function to get a node pillar configuration.
26 salt * node.get_all_properties
29 nodename
= __grains__
['id']
31 all_nodes
= _get_all_nodes()
33 if nodename
not in all_nodes
:
34 raise CommandExecutionError(
36 "Node {0} not declared in pillar.".format(nodename
)
40 return all_nodes
[nodename
]
43 def get(key
, nodename
=None):
45 A function to get a node pillar configuration key.
49 salt * node.get hostname
51 return _get_property(key
, nodename
, None)
54 def _explode_key(k
): return k
.split(':')
57 def _get_first_key(k
): return _explode_key(k
)[0]
60 def _strip_first_key(k
): return ':'.join(_explode_key(k
)[1:])
63 def _get_property(key
, nodename
, default_value
, parent
=None):
65 parent
= get_all_properties(nodename
)
68 first_key
= _get_first_key(key
)
69 if first_key
in parent
:
71 _strip_first_key(key
), nodename
,
72 default_value
, parent
[first_key
]
80 def list(key
, nodename
=None):
82 A function to get a node pillar configuration.
84 Returns a list if found, or an empty list if not found.
88 salt * node.list network:ipv4_aliases
90 return _get_property(key
, nodename
, [])
93 def has(key
, nodename
=None):
95 A function to get a node pillar configuration.
97 Returns a boolean, False if not found.
101 salt * node.has network:ipv6_tunnel
103 value
= _get_property(key
, nodename
, False)
107 def has_role(role
, nodename
=None):
109 A function to determine if a node has the specified role.
111 Returns a boolean, False if not found.
115 salt * node.has_role devserver
117 return role
in list('roles', nodename
)