the big cleanup: deprecate federica driver
[sfa.git] / sfa / openstack / client.py
1 from sfa.util.sfalogging import logger
2 from keystoneclient.v2_0 import client as keystone_client
3 from glance import client as glance_client
4 from novaclient.v1_1 import client as nova_client
5 from sfa.util.config import Config
6
7
8 def parse_novarc(filename):
9     opts = {}
10     f = open(filename, 'r')
11     for line in f:
12         try:
13             line = line.replace('export', '').strip()
14             parts = line.split('=')
15             if len(parts) > 1:
16                 value = parts[1].replace("\'", "")
17                 value = value.replace('\"', '')
18                 opts[parts[0]] = value
19         except:
20             pass
21     f.close()
22     return opts
23
24
25 class KeystoneClient:
26
27     def __init__(self, username=None, password=None, tenant=None, url=None, config=None):
28         if not config:
29             config = Config()
30         opts = parse_novarc(config.SFA_NOVA_NOVARC)
31         if username:
32             opts['OS_USERNAME'] = username
33         if password:
34             opts['OS_PASSWORD'] = password
35         if tenant:
36             opts['OS_TENANT_NAME'] = tenant
37         if url:
38             opts['OS_AUTH_URL'] = url
39         self.opts = opts
40         self.client = keystone_client.Client(username=opts.get('OS_USERNAME'),
41                                              password=opts.get('OS_PASSWORD'),
42                                              tenant_name=opts.get(
43                                                  'OS_TENANT_NAME'),
44                                              auth_url=opts.get('OS_AUTH_URL'))
45
46     def connect(self, *args, **kwds):
47         self.__init__(*args, **kwds)
48
49     def __getattr__(self, name):
50         return getattr(self.client, name)
51
52
53 class GlanceClient:
54
55     def __init__(self, config=None):
56         if not config:
57             config = Config()
58         opts = parse_novarc(config.SFA_NOVA_NOVARC)
59         self.client = glance_client.get_client(host='0.0.0.0',
60                                                username=opts.get(
61                                                    'OS_USERNAME'),
62                                                password=opts.get(
63                                                    'OS_PASSWORD'),
64                                                tenant=opts.get(
65                                                    'OS_TENANT_NAME'),
66                                                auth_url=opts.get('OS_AUTH_URL'))
67
68     def __getattr__(self, name):
69         return getattr(self.client, name)
70
71
72 class NovaClient:
73
74     def __init__(self, username=None, password=None, tenant=None, url=None, config=None):
75         if not config:
76             config = Config()
77         opts = parse_novarc(config.SFA_NOVA_NOVARC)
78         if username:
79             opts['OS_USERNAME'] = username
80         if password:
81             opts['OS_PASSWORD'] = password
82         if tenant:
83             opts['OS_TENANT_NAME'] = tenant
84         if url:
85             opts['OS_AUTH_URL'] = url
86         self.opts = opts
87         self.client = nova_client.Client(username=opts.get('OS_USERNAME'),
88                                          api_key=opts.get('OS_PASSWORD'),
89                                          project_id=opts.get('OS_TENANT_NAME'),
90                                          auth_url=opts.get('OS_AUTH_URL'),
91                                          region_name='',
92                                          extensions=[],
93                                          service_type='compute',
94                                          service_name='',
95                                          )
96
97     def connect(self, *args, **kwds):
98         self.__init__(*args, **kwds)
99
100     def __getattr__(self, name):
101         return getattr(self.client, name)