Import node module from Nasqueron rOPS
[wynter-salt-workstation.git] / _modules / node.py
blob18ad56ec15e68e90f128e453bb74ac9a21c37ead
1 # -*- coding: utf-8 -*-
3 # -------------------------------------------------------------
4 # Salt — Node execution module
5 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6 # Project: Nasqueron
7 # Created: 2017-10-21
8 # Description: Functions related to the nodes pillar entry
9 # License: BSD-2-Clause
10 # -------------------------------------------------------------
13 from salt.exceptions import CommandExecutionError, SaltCloudConfigError
16 def _get_all_nodes():
17 return __pillar__.get('nodes', {})
20 def get_all_properties(nodename=None):
21 '''
22 A function to get a node pillar configuration.
24 CLI Example:
26 salt * node.get_all_properties
27 '''
28 if nodename is None:
29 nodename = __grains__['id']
31 all_nodes = _get_all_nodes()
33 if nodename not in all_nodes:
34 raise CommandExecutionError(
35 SaltCloudConfigError(
36 "Node {0} not declared in pillar.".format(nodename)
40 return all_nodes[nodename]
43 def get(key, nodename=None):
44 '''
45 A function to get a node pillar configuration key.
47 CLI Example:
49 salt * node.get hostname
50 '''
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):
64 if parent is None:
65 parent = get_all_properties(nodename)
67 if ':' in key:
68 first_key = _get_first_key(key)
69 if first_key in parent:
70 return _get_property(
71 _strip_first_key(key), nodename,
72 default_value, parent[first_key]
74 elif key in parent:
75 return parent[key]
77 return default_value
80 def list(key, nodename=None):
81 '''
82 A function to get a node pillar configuration.
84 Returns a list if found, or an empty list if not found.
86 CLI Example:
88 salt * node.list network:ipv4_aliases
89 '''
90 return _get_property(key, nodename, [])
93 def has(key, nodename=None):
94 '''
95 A function to get a node pillar configuration.
97 Returns a boolean, False if not found.
99 CLI Example:
101 salt * node.has network:ipv6_tunnel
103 value = _get_property(key, nodename, False)
104 return bool(value)
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.
113 CLI Example:
115 salt * node.has_role devserver
117 return role in list('roles', nodename)