blob: f9abbf9822d9177d023484c6e437930acbd2ebac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#!/bin/env python
""" Migrate Probe host and group data from XML to DB backend for Metadata
and Probe plugins. Does not migrate individual probe return data. Assumes
migration to BOTH Metadata and Probe to database backends. """
import os
import sys
import lxml.etree
import Bcfg2.Options
import Bcfg2.DBSettings
def migrate(xclient, MetadataClientModel, ProbesGroupsModel):
""" Helper to do the migration given a <Client/> XML element """
client_name = xclient.get('name')
try:
try:
client = MetadataClientModel.objects.get(hostname=client_name)
except MetadataClientModel.DoesNotExist:
client = MetadataClientModel(hostname=client_name)
client.save()
except:
print("Failed to migrate client %s" % (client))
return False
try:
cgroups = []
for xgroup in xclient.findall('Group'):
group_name = xgroup.get('name')
cgroups.append(group_name)
try:
group = ProbesGroupsModel.objects.get(hostname=client_name,
group=group_name)
except ProbesGroupsModel.DoesNotExist:
group = ProbesGroupsModel(hostname=client_name,
group=group_name)
group.save()
ProbesGroupsModel.objects.filter(
hostname=client.hostname).exclude(
group__in=cgroups).delete()
except:
print("Failed to migrate groups")
return False
return True
def main():
""" Main """
opts = dict(repo=Bcfg2.Options.SERVER_REPOSITORY)
setup = Bcfg2.Options.OptionParser(opts)
setup.parse(sys.argv[1:])
probefile = os.path.join(setup['repo'], 'Probes', "probed.xml")
try:
xdata = lxml.etree.parse(probefile)
except lxml.etree.XMLSyntaxError:
err = sys.exc_info()[1]
print("Could not parse %s, skipping: %s" % (probefile, err))
# these must be loaded after option parsing is complete
from Bcfg2.Server.Plugins.Metadata import MetadataClientModel
from Bcfg2.Server.Plugins.Probes import ProbesGroupsModel
for xclient in xdata.findall('Client'):
print("Migrating Metadata and Probe groups for %s" %
xclient.get('name'))
migrate(xclient, MetadataClientModel, ProbesGroupsModel)
if __name__ == '__main__':
sys.exit(main())
|