diff --git a/nodes.py b/nodes.py index 333a373..e02c97a 100644 --- a/nodes.py +++ b/nodes.py @@ -316,6 +316,24 @@ class Nodes(object): self.version = release.rstrip('\n').strip(' ').strip('"') logging.info('release:%s' % (self.version)) + def get_release(self): + cmd = "awk -F ':' '/fuel_version/ {print \$2}' /etc/astute.yaml" + for node in self.nodes.values(): + # skip master + if (node.node_id != 0) and ( node.status == 'ready'): + release, err, code = ssh_node(ip=node.ip, + command=cmd, + sshopts=self.sshopts, + sshvars='', + timeout=self.timeout, + filename=None) + if code != 0: + logging.warning("get_release: node: %s: Can't get node release" % (node.node_id)) + node.release = self.version + continue + node.release = release.rstrip('\n').strip(' ').strip('"') + logging.info("get_release: node: %s, release: %s" % (node.node_id, node.release)) + def get_node_file_list(self): for key in self.files.keys(): # ### case diff --git a/test-nodes.py b/test-nodes.py new file mode 100755 index 0000000..5df0c72 --- /dev/null +++ b/test-nodes.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +# Copyright 2015 Mirantis, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import argparse +import nodes +import logging +import sys +import loadconf + + +def main(argv=None): + if argv is None: + argv = sys.argv + + parser = argparse.ArgumentParser(description='need to add description') + parser.add_argument('--config', default='config.yaml', + help='Config file') + parser.add_argument('-o', '--dest-file', default='/tmp/', + help='output archive file') + parser.add_argument('-f', '--nodes', + help='nodes file', default='nodes.json') + parser.add_argument('-e', '--extended', default="0", + help='exec once by role cmdfiles') + parser.add_argument('-c', '--cluster', help='cluster id') + parser.add_argument('-d', '--debug', + help="Print lots of debugging statements", + action="store_const", dest="loglevel", + const=logging.DEBUG, + default=logging.WARNING,) + parser.add_argument('-v', '--verbose', + help="Be verbose", + action="store_const", dest="loglevel", + const=logging.INFO,) + + args = parser.parse_args(argv[1:]) + logging.basicConfig(level=args.loglevel, + format='%(asctime)s %(levelname)s %(message)s') + args.extended = args.extended == "1" + conf = loadconf.load_conf(args.config) + n = nodes.Nodes(conf=conf, + extended=args.extended, + cluster=args.cluster, + destdir=args.dest_file) + # nodes.print_nodes() + n.get_node_file_list() + n.print_nodes() + n.get_release() + return 0 + +if __name__ == '__main__': + exit(main(sys.argv))