From d40fd4f9fcbfc35393a0e2f7ad87b06a9c4ff34b Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Tue, 25 Nov 2003 20:31:09 +0000 Subject: Minor comments and updates 2003/11/25 14:00:51-06:00 (none)!desai make pickleable 2003/11/21 15:58:56-06:00 (none)!desai (Logical change 1.5) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@17 ce84e21b-d406-0410-9b95-82705330c041 --- src/Metadata.py | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/Metadata.py b/src/Metadata.py index e69de29bb..8de23f8b9 100644 --- a/src/Metadata.py +++ b/src/Metadata.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python + +from threading import Lock + +from Error import NodeConfigurationError + +'''This file stores persistent metadata for the BCFG Configuration Repository''' + +class NodeStatistics(object): + '''Statistics type for Nodes. + self.last => time of last successful run + self.status => final status of last run + self.changeset -> the id of the last config successfully configured + self.count => number of times client run + self.fail => failure count''' + + def __init__(self): + self.last = 0 + self.status = False + self.changeset = 0 + self.count = 0 + self.fail = 0 + + def Suceed(self,changeset): + self.count += 1 + self.last = localtime() + self.status = True + self.changeset=changeset + + def Fail(self,changeset): + self.count += 1 + self.fail += 1 + self.status = False + +class Client(object): + def __init__(self,name,image,tags): + self.name = name + self.image = image + self.tags = tags + self.stats = NodeStatistics() + self.dirty = [] + + def UpdateStats(self,status,changeset): + if status: + self.stats.Succeed(changeset) + else: + self.stats.Fail(changeset) + +class ConfigurationRegion(object): + def __init__(self,name,scope,stype): + self.name = name + self.scope = scope + self.stype = stype + +class Store(object): + def __init__(self): + self.clients = {} + self.default = {} + self.bundles = {} + self.mappings = {} + self.rw = Lock() + self.r = Lock() + + def __getstate__(self): + d=self.__dict__.copy() + del d['rw'], d['r'] + return d + + def __setstate__(self,d): + self.__dict__=d + self.rw=Lock() + self.r=Lock() + + def GetImage(self,node): + try: + return self.nodes[node].image + except NodeConfigurationError, e: + self.nodes[node]=Node(node,self.default['image'],self.default['tags']) + return self.nodes[node].image + + def GetTags(self,node): + try: + return self.nodes[node].tags + except NodeConfigurationError, e: + self.nodes[node]=Node(node,self.default['image'],self.default['tags']) + return self.nodes[node].image + + def AddTag(self,node,tag): + if GetTags(node).count(tag) == 0: + self.nodes[node].tags.append(tag) + + def DelTag(self,node,tag): + if GetTags(node).count(tag) != 0: + self.nodes[node].tags.remove(tag) + + def GetBundles(self,tag): + return self.bundles.get(tag,[]) + + def GetNodeBundles(self,node): + ret = {} + for tag in self.GetTags(node): + for bundle in self.GetBundles(tag): + ret[bundle]=True + return ret.keys() -- cgit v1.2.3-1-g7c22