Skip to content

Instantly share code, notes, and snippets.

@auser
Last active December 15, 2015 04:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save auser/5201567 to your computer and use it in GitHub Desktop.
Save auser/5201567 to your computer and use it in GitHub Desktop.
"""
This enables us to call the minions and search for a specific role
"""
import logging
# Import salt libs
import salt.utils
import salt.payload
log = logging.getLogger(__name__)
def get_roles(role, *args, **kwargs):
"""
Send the informer.is_role command to all minions
"""
ret = []
nodes = __salt__['mine.get']('*', 'grains.item')
print "-------------------------------> NODES {0}".format(nodes)
for name, node_details in nodes.iteritems():
name = _realname(name)
roles = node_details.get('roles', [])
if role in roles:
ret.append(name)
return ret
def get_node_grain_item(name, item):
"""Get the details of a node by the name nodename"""
name = _realname(name)
node = __salt__['mine.get'](name, 'grains.item')
print "NODE DETAILS ------> {0}: {1}".format(name, node[name])
return node[name][item]
def all():
"""Get all the hosts and their ip addresses"""
ret = {}
nodes = __salt__['mine.get']('*', 'grains.item')
for name, node_details in nodes.iteritems():
if 'ec2_local-ipv4' in node_details:
ret[_realname(name)] = node_details['ec2_local-ipv4']
else:
ip = __salt__['mine.get'](name, 'network.ip_addrs')[name][0]
print "-----------------------------> {0}".format(ip)
ret[_realname(name)] = ip
return ret
def _realname(name):
"""Basically a filter to get the 'real' name of a node"""
if name == 'master':
return 'saltmaster'
else:
return name
{% for name, ip in salt['informer.all']().iteritems() %}
{{ name }}_host:
host.present:
- ip: {{ ip }}
- name: {{ name }}
{% endfor %}
master: {{ pillar['salt']['master'] }}
id: {{ grains['id'] }}
log_file: /var/log/salt/minion
log_level: {{ pillar['salt'].get('log_level', 'debug') }}
log_fmt_logfile: '%(asctime)-15s salt-minion[%(process)d] %(name)s: %(message)s'
log_datefmt_logfile: '%b %d %H:%M:%S'
grains:
environment: {{ grains.get('environment', 'development') }}
location: {{ grains.get('location', 'vagrant') }}
mine_functions:
network.ip_addrs:
- eth0
- eth1
disk.usage: []
grains.item:
- roles
mine_interval: 60
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment