From 7428f2c18e0cc050e8154c27a18cbed1064ad388 Mon Sep 17 00:00:00 2001 From: Evgeniy L Date: Thu, 2 Apr 2015 16:55:41 -0700 Subject: [PATCH] Add discovery --- examples/nodes_list.yaml | 4 ++++ solar/solar/cli.py | 10 ++++++++-- solar/solar/extensions/base.py | 6 +++++- solar/solar/extensions/discovery.py | 25 +++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 examples/nodes_list.yaml create mode 100644 solar/solar/extensions/discovery.py diff --git a/examples/nodes_list.yaml b/examples/nodes_list.yaml new file mode 100644 index 00000000..e962dd11 --- /dev/null +++ b/examples/nodes_list.yaml @@ -0,0 +1,4 @@ +- id: 6176aaa2-d97f-11e4-8dbe-080027c2ffdb + ip: 127.0.0.1 + ssh_port: 22 + ssh_key: .vagrant/machines/default/virtualbox/private_key diff --git a/solar/solar/cli.py b/solar/solar/cli.py index 9c1bfce0..d969878c 100644 --- a/solar/solar/cli.py +++ b/solar/solar/cli.py @@ -27,6 +27,7 @@ import argparse import yaml from solar import utils +from solar.extensions.discovery import Discovery from solar.core import ansible from solar.interfaces.db import Storage from solar.third_party.dir_dbm import DirDBM @@ -54,8 +55,7 @@ class Cmd(object): required=True) parser.add_argument( '-t', '--tags', nargs='+', - help='Identifier or resource' - ) + help='Identifier or resource') parser = self.subparser.add_parser('prepare') parser.set_defaults(func=getattr(self, 'prepare')) @@ -88,9 +88,15 @@ class Cmd(object): '--resource', required=True) + parser = self.subparser.add_parser('discover') + parser.set_defaults(func=getattr(self, 'discover')) + parser = self.subparser.add_parser('clear') parser.set_defaults(func=getattr(self, 'clear')) + def discover(self, args): + Discovery({'id': 'discovery'}).execute(self.dbm) + def parse(self, args): parsed = self.parser.parse_args(args) return parsed.func(parsed) diff --git a/solar/solar/extensions/base.py b/solar/solar/extensions/base.py index 6d59bf57..022db266 100644 --- a/solar/solar/extensions/base.py +++ b/solar/solar/extensions/base.py @@ -16,7 +16,11 @@ class BaseResource(object): @property def inventory(self): """Return data that will be used for inventory""" - return {self.uid: self.config.get('input', {})} + return {self.uid: self.input} + + @property + def input(self): + return self.config.get('input', {}) def execute(self, action): """Return data that will be used by orchestration framework""" diff --git a/solar/solar/extensions/discovery.py b/solar/solar/extensions/discovery.py new file mode 100644 index 00000000..fa591a9a --- /dev/null +++ b/solar/solar/extensions/discovery.py @@ -0,0 +1,25 @@ +import io +import os + +import yaml + +from solar import utils +from solar.extensions import base + + +class Discovery(base.BaseResource): + + FILE_PATH = os.path.join( + os.path.dirname(__file__), '..', '..', '..', + 'examples', 'nodes_list.yaml') + + def execute(self, db): + with io.open(self.FILE_PATH) as f: + nodes = yaml.load(f) + + for node in nodes: + node['tags'] = [] + + db['node_list'] = yaml.dump(nodes, default_flow_style=False) + + return nodes