summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Metadata.py
diff options
context:
space:
mode:
authorJames Yang <jjyang@mcs.anl.gov>2009-06-30 20:31:14 +0000
committerJames Yang <jjyang@mcs.anl.gov>2009-06-30 20:31:14 +0000
commit8907fa0879422d1845813772765469b101fea216 (patch)
tree41b9dee619a559ba6c73f74c8a2aa948be13b632 /src/lib/Server/Plugins/Metadata.py
parente915a49930556f4e736775e4fe2d5ff1bf43dfdb (diff)
downloadbcfg2-8907fa0879422d1845813772765469b101fea216.tar.gz
bcfg2-8907fa0879422d1845813772765469b101fea216.tar.bz2
bcfg2-8907fa0879422d1845813772765469b101fea216.zip
Changed how bcfg2-admin init handles plugins and added update_client to metadata for changes in 5305
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5306 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/Plugins/Metadata.py')
-rw-r--r--src/lib/Server/Plugins/Metadata.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/Server/Plugins/Metadata.py b/src/lib/Server/Plugins/Metadata.py
index 29c64984a..df6e571e0 100644
--- a/src/lib/Server/Plugins/Metadata.py
+++ b/src/lib/Server/Plugins/Metadata.py
@@ -99,6 +99,14 @@ class Metadata(Bcfg2.Server.Plugin.Plugin,
self.get_client_names_by_profiles,
self.get_all_group_names)
+ @classmethod
+ def init_repo(self, repo):
+ Bcfg2.Server.Plugin.init_repo(repo)
+ open("%s/Metadata/groups.xml" %
+ repo, "w").write(groups % os_selection)
+ open("%s/Metadata/clients.xml" %
+ repo, "w").write(clients % socket.getfqdn())
+
def get_groups(self):
'''return groups xml tree'''
groups_tree = lxml.etree.parse(self.data + "/groups.xml")
@@ -162,6 +170,28 @@ class Metadata(Bcfg2.Server.Plugin.Plugin,
fcntl.lockf(fd, fcntl.LOCK_UN)
client_tree.close()
+ def update_client(self, client_name, attribs):
+ '''Update a client's attributes'''
+ tree = lxml.etree.parse(self.data + "/clients.xml")
+ root = tree.getroot()
+ node = self.search_client(client_name, tree)
+ if node == None:
+ self.logger.error("Client \"%s\" not found" % (client_name))
+ raise MetadataConsistencyError
+ node.attrib.update(attribs)
+ client_tree = open(self.data + "/clients.xml","w")
+ fd = client_tree.fileno()
+ while True:
+ try:
+ fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
+ except IOError:
+ continue
+ else:
+ break
+ tree.write(client_tree)
+ fcntl.lockf(fd, fcntl.LOCK_UN)
+ client_tree.close()
+
def HandleEvent(self, event):
'''Handle update events for data files'''
filename = event.filename.split('/')[-1]