From dd85a75bed17c049e44394571b07ea431e41d8f7 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Thu, 7 Oct 2004 13:37:19 +0000 Subject: add profile assertion support (Logical change 1.77) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@375 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Metadata.py | 17 +++++++++++++++-- src/sbin/Bcfg2Server | 13 +++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/lib/Server/Metadata.py b/src/lib/Server/Metadata.py index 31769e40e..5346dd5cf 100644 --- a/src/lib/Server/Metadata.py +++ b/src/lib/Server/Metadata.py @@ -104,8 +104,21 @@ class MetadataStore(SingleXMLFileBacked): if k[:8] == 'default_': self.defaults[k[8:]] = v - def FetchMetadata(self,client): - if self.clients.has_key(client): + def FetchMetadata(self,client, image=None, profile=None): + if ((image != None) and (profile != None)): + # Client asserted profile/image + self.clients[client] = (image,profile) + f = filter(lambda x:x.attrib['name'] == client, self.element.findall("Client")) + if len(f) == 0: + # non-existent client + SubElement(self.element, "Client", name=client, image=image, profile=profile) + self.WriteBack() + elif len(f) == 1: + # already existing client + f[0].attrib['profile'] = profile + f[0].attrib['image'] = image + self.WriteBack() + elif self.clients.has_key(client): (image,profile) = self.clients[client] else: # default profile stuff goes here diff --git a/src/sbin/Bcfg2Server b/src/sbin/Bcfg2Server index 6575326ce..dde064474 100644 --- a/src/sbin/Bcfg2Server +++ b/src/sbin/Bcfg2Server @@ -44,13 +44,6 @@ class BcfgServer(Server): self.LogFailure("Cron") return 0 - def GetMetadata(self, client): - if self.metadata.clients.has_key(client): - return self.metadata.clients[client] - else: - syslog(LOG_INFO, "Inserting default metadata for client %s"%(client)) - pass - def BuildConfig(self, xml, (peer,port)): try: client = gethostbyaddr(peer)[0].split('.')[0] @@ -59,7 +52,11 @@ class BcfgServer(Server): t = time() config = Element("Configuration", version='2.0') # get metadata for host - m = self.GetMetadata(client) + if xml.attrib.has_key("profile") and xml.attrib.has_key("image"): + m = self.metadata.FetchMetadata(client, image=xml.attrib['image'], profile=xml.attrib['profile']) + else: + m = self.metadata.FetchMetadata(client) + try: structures = self.core.GetStructures(m) except: -- cgit v1.2.3-1-g7c22