summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2004-10-07 13:37:19 +0000
committerNarayan Desai <desai@mcs.anl.gov>2004-10-07 13:37:19 +0000
commitdd85a75bed17c049e44394571b07ea431e41d8f7 (patch)
tree088c147adb76bb780ce0d13d9d4742520da02377
parent1106b939ce92a1280e1b8819b357c6294683248e (diff)
downloadbcfg2-dd85a75bed17c049e44394571b07ea431e41d8f7.tar.gz
bcfg2-dd85a75bed17c049e44394571b07ea431e41d8f7.tar.bz2
bcfg2-dd85a75bed17c049e44394571b07ea431e41d8f7.zip
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
-rw-r--r--src/lib/Server/Metadata.py17
-rw-r--r--src/sbin/Bcfg2Server13
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: