Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / cyclades_rest_api.py @ 5207c784

History | View | Annotate | Download (5.3 kB)

1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from kamaki.clients.compute import ComputeClient
35
from kamaki.clients.utils import path4url
36
import json
37

    
38

    
39
class CycladesClientApi(ComputeClient):
40
    """GRNet Cyclades REST API Client"""
41

    
42
    def servers_get(self,
43
        server_id='',
44
        command='',
45
        success=200,
46
        changes_since=None,
47
        **kwargs):
48
        """GET base_url/servers[/server_id][/command] request
49

50
        :param server_id: integer (as int or str)
51

52
        :param command: 'ips', 'stats', or ''
53

54
        :param success: success code or list or tupple of accepted success
55
            codes. if server response code is not in this list, a ClientError
56
            raises
57

58
        :param changes_since: (date)
59

60
        :returns: request response
61
        """
62
        path = path4url('servers', server_id, command)
63
        self.set_param('changes-since', changes_since, changes_since)
64
        return self.get(path, success=success, **kwargs)
65

    
66
    def networks_get(self,
67
        network_id='', command='', success=(200, 203), **kwargs):
68
        """GET base_url/networks[/network_id][/command] request
69

70
        :param network_id: integer (str or int)
71

72
        :param command: (str) 'detail' or ''
73

74
        :param success: success code or list or tuple of accepted success
75
            codes. if server response code is not in this list, a ClientError
76
            raises
77

78
        :returns: request response
79
        """
80
        path = path4url('networks', network_id, command)
81
        return self.get(path, success=success, **kwargs)
82

    
83
    def networks_delete(self,
84
        network_id='', command='', success=204, **kwargs):
85
        """DEL ETE base_url/networks[/network_id][/command] request
86

87
        :param network_id: integer (str or int)
88

89
        :param command: (str) 'detail' or ''
90

91
        :param success: success code or list or tuple of accepted success
92
            codes. if server response code is not in this list, a ClientError
93
            raises
94

95
        :returns: request response
96
        """
97
        path = path4url('networks', network_id, command)
98
        return self.delete(path, success=success, **kwargs)
99

    
100
    def networks_post(self,
101
        network_id='', command='', json_data=None, success=202, **kwargs):
102
        """POST base_url/servers[/server_id]/[command] request
103

104
        :param network_id: integer (str or int)
105

106
        :param command: (str) 'detail' or ''
107

108
        :param json_data: (dict) will be send as data
109

110
        :param success: success code or list or tuple of accepted success
111
            codes. if server response code is not in this list, a ClientError
112
            raises
113

114
        :returns: request response
115
        """
116
        data = json_data
117
        if json_data is not None:
118
            data = json.dumps(json_data)
119
            self.set_header('Content-Type', 'application/json')
120
            self.set_header('Content-Length', len(data))
121

    
122
        path = path4url('networks', network_id, command)
123
        return self.post(path, data=data, success=success, **kwargs)
124

    
125
    def networks_put(self,
126
        network_id='', command='', json_data=None, success=204, **kwargs):
127
        """PUT base_url/servers[/server_id]/[command] request
128

129
        :param network_id: integer (str or int)
130

131
        :param command: (str) 'detail' or ''
132

133
        :param json_data: (dict) will be send as data
134

135
        :param success: success code or list or tuple of accepted success
136
            codes. if server response code is not in this list, a ClientError
137
            raises
138

139
        :returns: request response
140
        """
141
        data = json_data
142
        if json_data is not None:
143
            data = json.dumps(json_data)
144
            self.set_header('Content-Type', 'application/json')
145
            self.set_header('Content-Length', len(data))
146

    
147
        path = path4url('networks', network_id, command)
148
        return self.put(path, data=data, success=success, **kwargs)