Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / db / query.py @ 19b2c29d

History | View | Annotate | Download (2.9 kB)

1 91884d63 Giorgos Korfiatis
# Copyright 2013 GRNET S.A. All rights reserved.
2 91884d63 Giorgos Korfiatis
#
3 91884d63 Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or without
4 91884d63 Giorgos Korfiatis
# modification, are permitted provided that the following conditions
5 91884d63 Giorgos Korfiatis
# are met:
6 91884d63 Giorgos Korfiatis
#
7 91884d63 Giorgos Korfiatis
#   1. Redistributions of source code must retain the above copyright
8 91884d63 Giorgos Korfiatis
#      notice, this list of conditions and the following disclaimer.
9 91884d63 Giorgos Korfiatis
#
10 91884d63 Giorgos Korfiatis
#  2. Redistributions in binary form must reproduce the above copyright
11 91884d63 Giorgos Korfiatis
#     notice, this list of conditions and the following disclaimer in the
12 91884d63 Giorgos Korfiatis
#     documentation and/or other materials provided with the distribution.
13 91884d63 Giorgos Korfiatis
#
14 91884d63 Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
15 91884d63 Giorgos Korfiatis
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 91884d63 Giorgos Korfiatis
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 91884d63 Giorgos Korfiatis
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
18 91884d63 Giorgos Korfiatis
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 91884d63 Giorgos Korfiatis
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 91884d63 Giorgos Korfiatis
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 91884d63 Giorgos Korfiatis
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 91884d63 Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 91884d63 Giorgos Korfiatis
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 91884d63 Giorgos Korfiatis
# SUCH DAMAGE.
25 91884d63 Giorgos Korfiatis
#
26 91884d63 Giorgos Korfiatis
# The views and conclusions contained in the software and documentation are
27 91884d63 Giorgos Korfiatis
# those of the authors and should not be interpreted as representing official
28 91884d63 Giorgos Korfiatis
# policies, either expressed or implied, of GRNET S.A.
29 91884d63 Giorgos Korfiatis
30 92d2d1ce Christos Stavrakakis
from synnefo.db.models import IPAddress
31 92d2d1ce Christos Stavrakakis
32 92d2d1ce Christos Stavrakakis
33 92d2d1ce Christos Stavrakakis
def get_server_ips(server, for_update=False):
34 92d2d1ce Christos Stavrakakis
    ips = IPAddress.objects.select_related("subnet")
35 92d2d1ce Christos Stavrakakis
    ips = ips.filter(nic__machine=server, deleted=False)
36 92d2d1ce Christos Stavrakakis
    if for_update:
37 92d2d1ce Christos Stavrakakis
        ips = ips.select_for_update()
38 92d2d1ce Christos Stavrakakis
    return ips
39 92d2d1ce Christos Stavrakakis
40 92d2d1ce Christos Stavrakakis
41 92d2d1ce Christos Stavrakakis
def get_server_active_ips(server, for_update=False):
42 92d2d1ce Christos Stavrakakis
    ips = get_server_ips(server, for_update=for_update)
43 92d2d1ce Christos Stavrakakis
    return ips.filter(nic__state="ACTIVE")
44 92d2d1ce Christos Stavrakakis
45 92d2d1ce Christos Stavrakakis
46 92d2d1ce Christos Stavrakakis
def get_server_public_ip(server, version=4):
47 92d2d1ce Christos Stavrakakis
    ips = get_server_active_ips(server)
48 92d2d1ce Christos Stavrakakis
    try:
49 92d2d1ce Christos Stavrakakis
        public_ips = ips.filter(network__public=True,
50 92d2d1ce Christos Stavrakakis
                                subnet__ipversion=version)
51 92d2d1ce Christos Stavrakakis
        return public_ips[0].address
52 92d2d1ce Christos Stavrakakis
    except IndexError:
53 92d2d1ce Christos Stavrakakis
        return None
54 92d2d1ce Christos Stavrakakis
55 92d2d1ce Christos Stavrakakis
56 92d2d1ce Christos Stavrakakis
def get_floating_ips(for_update=False):
57 92d2d1ce Christos Stavrakakis
    ips = IPAddress.objects.select_related("subnet")
58 92d2d1ce Christos Stavrakakis
    ips = ips.filter(floating_ip=True, deleted=False)
59 92d2d1ce Christos Stavrakakis
    if for_update:
60 92d2d1ce Christos Stavrakakis
        ips = ips.select_for_update()
61 92d2d1ce Christos Stavrakakis
    return ips
62 92d2d1ce Christos Stavrakakis
63 92d2d1ce Christos Stavrakakis
64 92d2d1ce Christos Stavrakakis
def get_server_floating_ips(server, for_update=False):
65 92d2d1ce Christos Stavrakakis
    floating_ips = get_floating_ips(for_update=for_update)
66 92d2d1ce Christos Stavrakakis
    return floating_ips.filter(nic__machine=server)
67 92d2d1ce Christos Stavrakakis
68 92d2d1ce Christos Stavrakakis
69 92d2d1ce Christos Stavrakakis
def get_server_floating_ip(server, address, for_update=False):
70 92d2d1ce Christos Stavrakakis
    server_fips = get_server_floating_ips(server, for_update=for_update)
71 92d2d1ce Christos Stavrakakis
    return server_fips.get(address=address)
72 92d2d1ce Christos Stavrakakis
73 92d2d1ce Christos Stavrakakis
74 92d2d1ce Christos Stavrakakis
def get_user_floating_ip(userid, address, for_update=False):
75 92d2d1ce Christos Stavrakakis
    fips = get_floating_ips(for_update=for_update)
76 92d2d1ce Christos Stavrakakis
    return fips.get(userid=userid, address=address)