summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Admin/Init.py
blob: 01bede88e3cb547a9d797c9dd761521c4461bdb5 (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import os, socket
import Bcfg2.Server.Admin

config = '''
[server]
repository = %s
structures = Bundler,Base
generators = SSHbase,Cfg,Pkgmgr,Rules

[statistics]
sendmailpath = /usr/sbin/sendmail
database_engine = sqlite3
# 'postgresql', 'mysql', 'mysql_old', 'sqlite3' or 'ado_mssql'.
database_name =
# Or path to database file if using sqlite3.
#<repository>/etc/brpt.sqlite is default path if left empty
database_user =
# Not used with sqlite3.
database_password =
# Not used with sqlite3.
database_host =
# Not used with sqlite3.
database_port =
# Set to empty string for default. Not used with sqlite3.
web_debug = True


[communication]
protocol = xmlrpc/ssl
password = %s
key = %s/bcfg2.key

[components]
bcfg2 = %s
'''

groups = '''
<Groups version='3.0'>
   <Group profile='true' public='false' default='true' name='basic'>
      <Group name='%s'/>
   </Group>
   <Group name='ubuntu'/>
   <Group name='debian'/>
   <Group name='freebsd'/>
   <Group name='gentoo'/>
   <Group name='redhat'/>
   <Group name='suse'/>
   <Group name='mandrake'/>
   <Group name='solaris'/>
</Groups>
'''
clients = '''
<Clients version="3.0">
   <Client profile="basic" pingable="Y" pingtime="0" name="%s"/>
</Clients>
'''

os_list = [('Redhat/Fedora/RHEL/RHAS/Centos', 'redhat'),
           ('SUSE/SLES', 'suse'),
           ('Mandrake', 'mandrake'),
           ('Debian', 'debian'),
           ('Ubuntu', 'ubuntu'),
           ('Gentoo', 'gentoo'),
           ('FreeBSD', 'freebsd')]


class Init(Bcfg2.Server.Admin.Mode):
    __shorthelp__ = 'bcfg2-admin init'
    __longhelp__ = __shorthelp__ + '\n\tCompare two client specifications or directories of specifications'
    def __call__(self, args):
        Bcfg2.Server.Admin.Mode.__call__(self, args)
        repopath = raw_input( "location of bcfg2 repository [/var/lib/bcfg2]: " )
        if repopath == '':
            repopath = '/var/lib/bcfg2'
        password = ''
        while ( password == '' ):
            password = raw_input(
                "Input password used for communication verification: " )
        server = "https://%s:6789" % socket.getfqdn()
        rs = raw_input( "Input the server location [%s]: " % server)
        if rs:
            server = rs
        #create the groups.xml file
        prompt = '''Input base Operating System for clients:\n'''
        for entry in os_list:
            prompt += "%d: \n" % (os_list.index(entry) + 1, entry[0])
        prompt += ': '
        os_sel = os_list[int(raw_input(prompt))-1][1]
        self.initializeRepo(repopath, server, password, os_sel)
        print "Repository created successfuly in %s" % (repopath)

    def initializeRepo(self, repo, server_uri, password, os_selection):
        '''Setup a new repo'''
        keypath = os.path.dirname(os.path.abspath(self.configfile))
        confdata = config % ( repo, password, keypath, server_uri )
        open(self.configfile,"w").write(confdata)
        # FIXME automate ssl key generation
        os.popen('openssl req -x509 -nodes -days 1000 -newkey rsa:1024 -out %s/bcfg2.key -keyout %s/bcfg2.key' % (keypath, keypath))
        try:
            os.chmod('%s/bcfg2.key'% keypath,'0600')
        except:
            pass
    
        for subdir in ['SSHbase', 'Cfg', 'Pkgmgr', 'Rules', 'etc', 'Metadata',
                       'Base', 'Bundler']:
            path = "%s/%s" % (repo, subdir)
            newpath = ''
            for subdir in path.split('/'):
                newpath = newpath + subdir + '/'
                try:
                    os.mkdir(newpath)
                except:
                    continue
            
        open("%s/Metadata/groups.xml"%repo, "w").write(groups % os_selection)
        #now the clients file
        open("%s/Metadata/clients.xml"%repo, "w").write(clients % socket.getfqdn())