summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Admin/Client.py
diff options
context:
space:
mode:
authorAndrew Brestick <brestick@mcs.anl.gov>2008-07-31 20:50:44 +0000
committerAndrew Brestick <brestick@mcs.anl.gov>2008-07-31 20:50:44 +0000
commite9e94e78bb52ca2ec36e3f3402dbde3f8289cdf3 (patch)
tree5f8c573da32e0f3dba86555a3534909abd2bb2d2 /src/lib/Server/Admin/Client.py
parent7c6c1636a0841ea9c5b28a4223c0cd3677eede53 (diff)
downloadbcfg2-e9e94e78bb52ca2ec36e3f3402dbde3f8289cdf3.tar.gz
bcfg2-e9e94e78bb52ca2ec36e3f3402dbde3f8289cdf3.tar.bz2
bcfg2-e9e94e78bb52ca2ec36e3f3402dbde3f8289cdf3.zip
added support for alternate metadata plugins in bcfg2-admin
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4845 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/Admin/Client.py')
-rw-r--r--src/lib/Server/Admin/Client.py76
1 files changed, 16 insertions, 60 deletions
diff --git a/src/lib/Server/Admin/Client.py b/src/lib/Server/Admin/Client.py
index c51ac1598..1f784a4f2 100644
--- a/src/lib/Server/Admin/Client.py
+++ b/src/lib/Server/Admin/Client.py
@@ -1,25 +1,14 @@
-import lxml.etree
-import fcntl
import Bcfg2.Server.Admin
+from Bcfg2.Server.Plugins.Metadata import MetadataConsistencyError
-class Client(Bcfg2.Server.Admin.Mode):
+class Client(Bcfg2.Server.Admin.MetadataCore):
__shorthelp__ = 'bcfg2-admin client add <client> attr1=val1 attr2=val2\nbcfg2-admin client del <client>'
__longhelp__ = __shorthelp__ + '\n\tCreate or delete client entries'
def __init__(self, configfile):
- Bcfg2.Server.Admin.Mode.__init__(self, configfile)
- try:
- self.bcore = Bcfg2.Server.Core.Core(self.get_repo_path(), [],
- [], [], 'foo', False, 'UTF-8')
- except Bcfg2.Server.Core.CoreInitError, msg:
- self.errExit("Core load failed because %s" % msg)
- [self.bcore.fam.Service() for _ in range(5)]
- while self.bcore.fam.Service():
- pass
- self.tree = lxml.etree.parse(self.get_repo_path() + "/Metadata/clients.xml")
- self.root = self.tree.getroot()
+ Bcfg2.Server.Admin.MetadataCore.__init__(self, configfile)
def __call__(self, args):
- Bcfg2.Server.Admin.Mode.__call__(self, args)
+ Bcfg2.Server.Admin.MetadataCore.__call__(self, args)
if len(args) == 0:
self.errExit("Client mode requires at least one argument: <add> or <delete>")
if "-h" in args:
@@ -30,55 +19,22 @@ class Client(Bcfg2.Server.Admin.Mode):
attr_d = {}
for i in args[2:]:
attr, val = i.split('=', 1)
- if attr not in ['profile', 'uuid', 'password', 'address',
- 'secure', 'location']:
+ if attr not in ['profile', 'user', 'state', 'image',
+ 'action']:
print "Attribute %s unknown" % attr
raise SystemExit(1)
attr_d[attr] = val
- self.add_client(args[1], attr_d)
+ try:
+ self.metadata.add_client(args[1], attr_d)
+ except MetadataConsistencyError:
+ print "Error in adding client"
+ raise SystemExit(1)
elif args[0] in ['delete', 'remove', 'del', 'rm']:
- self.del_client(args[1])
+ try:
+ self.metadata.remove_client(args[1])
+ except MetadataConsistencyError:
+ print "Error in deleting client"
+ raise SystemExit(1)
else:
print "No command specified"
raise SystemExit(1)
- client_tree = open(self.get_repo_path() + "/Metadata/clients.xml","w")
- fd = client_tree.fileno()
- while True:
- try:
- fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
- except IOError:
- continue
- else:
- break
- self.tree.write(client_tree)
- fcntl.lockf(fd, fcntl.LOCK_UN)
- client_tree.close()
-
- def add_client(self, client, attrs):
- '''add a new client'''
- element = lxml.etree.Element("Client", name=client)
- for key, val in attrs.iteritems():
- element.set(key, val)
- node = self.search_client(client)
- if node != None:
- print "Client \"%s\" already exists" % (client)
- raise SystemExit(1)
- self.root.append(element)
-
- def del_client(self, client):
- '''delete an existing client'''
- node = self.search_client(client)
- if node == None:
- print "Client \"%s\" not found" % (client)
- raise SystemExit(1)
- self.root.remove(node)
-
- def search_client(self, client):
- '''find a client'''
- for node in self.root:
- if node.attrib["name"] == client:
- return node
- for child in node:
- if child.tag == "Alias" and child.attrib["name"] == client:
- return node
- return None