Source code for cloudmesh_client.cloud.inventory

from __future__ import print_function

import os.path
import sys

import hostlist
import yaml

from cloudmesh_client.cloud.ListResource import ListResource
from cloudmesh_client.common.ConfigDict import ConfigDict
from cloudmesh_client.common.Printer import Printer
from cloudmesh_client.common.Shell import Shell
from cloudmesh_client.common.util import banner
from cloudmesh_client.shell.console import Console


[docs]class Inventory(ListResource):
[docs] def info(self): banner("Configuration") Console.ok('Object Attibutes: {:}'.format(', '.join(self.order))) Console.ok('Objects: {:}'.format(len(self.data))) Console.ok('Configuration File: {:}'.format(self.config_filename)) Console.ok('Configuration:') print(self.config) try: config = ConfigDict(filename=self.config_filename) except Exception as e: Console.error("Problem reading the yaml file {:}".format( self.config_filename), traceflag=False) Console.error("Please check if the file exists or is empty", traceflag=False) Console.error(e.message) banner("")
def __init__(self): self.order = [ "host", "cluster", "label", "service", "ip", "project", "owners", "comment"] self.entry = {} for key in self.order: self.entry[key] = "" self.data = {} self.config_filename = "cloudmesh.yaml" self.config = ConfigDict(filename=self.config_filename) self.datafile = self.config["cloudmesh.system.data"] self.read(self.datafile)
[docs] def read(self, filename=None, format="yaml"): if filename is None: filename = self.datafile if not os.path.isfile(filename): self.save(filename) stream = open(filename, "r") self.data = yaml.safe_load(stream) stream.close()
[docs] def save(self, filename=None, format="yaml"): if filename is None: filename = self.datafile with open(filename, 'w') as yaml_file: yaml_file.write(self.list(format=format))
[docs] def add(self, **kwargs): if "host" not in kwargs: print("ERROR no id specified") sys.exit(1) hosts = hostlist.expand_hostlist(kwargs['host']) for host in hosts: if host in self.data: entry = self.data[host] else: entry = dict(self.entry) self.data[host] = entry for key, value in kwargs.items(): entry[key] = value entry['host'] = host for attribute in entry: self.data[host][attribute] = entry[attribute] self.save()
[docs] def list(self, format='dict', sort_keys=True, order=None): if order is None: order = self.order return Printer.write(self.data, order=order, output=format, sort_keys=sort_keys)
def _str(self, data, with_empty=False): print for key in data: if self.data[key] is '' or self.data[key] is None: pass else: print(self.data[key])
# noinspection PyBroadException,PyPep8Naming
[docs]class command_system(object):
[docs] @classmethod def status(cls, host): msg = "Unknown host" try: msg = Shell.ping("-c", "1", host) except: pass if "1 packets transmitted, 1 packets received" in msg: return True elif "Unknown host" in msg: return False else: return False
if __name__ == "__main__": i = Inventory() banner("Info") i.info() banner("changing values") i.add(host="i1", cluster="kilo", label="india") i.add(host="i2", cluster="kilo", label="gregor") i.add(host="d[1-4]", cluster="kilo", label="delta") banner("saving") i.save() for output in ['dict', 'yaml', 'csv', 'table']: banner(output) print(i.list(format=output)) banner("reading") n = Inventory() n.read() print(n.list('table')) n.save()