Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / db / models_factory.py @ 26515bc1

History | View | Annotate | Download (6.6 kB)

1 672db045 Christos Stavrakakis
# Copyright 2012 GRNET S.A. All rights reserved.
2 672db045 Christos Stavrakakis
#
3 672db045 Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
4 672db045 Christos Stavrakakis
# without modification, are permitted provided that the following
5 672db045 Christos Stavrakakis
# conditions are met:
6 672db045 Christos Stavrakakis
#
7 672db045 Christos Stavrakakis
#   1. Redistributions of source code must retain the above
8 672db045 Christos Stavrakakis
#      copyright notice, this list of conditions and the following
9 672db045 Christos Stavrakakis
#      disclaimer.
10 672db045 Christos Stavrakakis
#
11 672db045 Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
12 672db045 Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 672db045 Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
14 672db045 Christos Stavrakakis
#      provided with the distribution.
15 672db045 Christos Stavrakakis
#
16 672db045 Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 672db045 Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 672db045 Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 672db045 Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 672db045 Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 672db045 Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 672db045 Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 672db045 Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 672db045 Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 672db045 Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 672db045 Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 672db045 Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
28 672db045 Christos Stavrakakis
#
29 672db045 Christos Stavrakakis
# The views and conclusions contained in the software and
30 672db045 Christos Stavrakakis
# documentation are those of the authors and should not be
31 672db045 Christos Stavrakakis
# interpreted as representing official policies, either expressed
32 672db045 Christos Stavrakakis
# or implied, of GRNET S.A.
33 672db045 Christos Stavrakakis
34 672db045 Christos Stavrakakis
import factory
35 672db045 Christos Stavrakakis
from synnefo.db import models
36 672db045 Christos Stavrakakis
37 672db045 Christos Stavrakakis
38 672db045 Christos Stavrakakis
def prefix_seq(x):
39 672db045 Christos Stavrakakis
    return lambda n: x + '-{0}'.format(n)
40 672db045 Christos Stavrakakis
41 672db045 Christos Stavrakakis
42 672db045 Christos Stavrakakis
def user_seq():
43 672db045 Christos Stavrakakis
    return lambda n: 'user-{0}.example.com'.format(n)
44 672db045 Christos Stavrakakis
45 672db045 Christos Stavrakakis
46 672db045 Christos Stavrakakis
def round_seq(x):
47 672db045 Christos Stavrakakis
    size = len(x)
48 672db045 Christos Stavrakakis
    return lambda n: x[int(n) % size]
49 672db045 Christos Stavrakakis
50 672db045 Christos Stavrakakis
51 672db045 Christos Stavrakakis
def round_seq_first(x):
52 672db045 Christos Stavrakakis
    size = len(x)
53 672db045 Christos Stavrakakis
    return lambda n: x[int(n) % size][0]
54 672db045 Christos Stavrakakis
55 672db045 Christos Stavrakakis
56 d4325f42 Christos Stavrakakis
class FlavorFactory(factory.DjangoModelFactory):
57 672db045 Christos Stavrakakis
    FACTORY_FOR = models.Flavor
58 672db045 Christos Stavrakakis
59 672db045 Christos Stavrakakis
    cpu = factory.Sequence(lambda n: n + 2, type=int)
60 672db045 Christos Stavrakakis
    ram = factory.Sequence(lambda n: n * 512, type=int)
61 672db045 Christos Stavrakakis
    disk = factory.Sequence(lambda n: n * 10, type=int)
62 672db045 Christos Stavrakakis
    disk_template = 'drbd'
63 672db045 Christos Stavrakakis
    deleted = False
64 672db045 Christos Stavrakakis
65 672db045 Christos Stavrakakis
66 d4325f42 Christos Stavrakakis
class BackendFactory(factory.DjangoModelFactory):
67 672db045 Christos Stavrakakis
    FACTORY_FOR = models.Backend
68 672db045 Christos Stavrakakis
69 672db045 Christos Stavrakakis
    clustername = factory.Sequence(prefix_seq('cluster'))
70 672db045 Christos Stavrakakis
    port = 5080
71 672db045 Christos Stavrakakis
    username = factory.Sequence(prefix_seq('username'))
72 672db045 Christos Stavrakakis
    password = factory.Sequence(prefix_seq('password'))
73 672db045 Christos Stavrakakis
    drained = False
74 672db045 Christos Stavrakakis
    offline = False
75 672db045 Christos Stavrakakis
76 672db045 Christos Stavrakakis
    mfree = 8192
77 672db045 Christos Stavrakakis
    mtotal = 16384
78 672db045 Christos Stavrakakis
    dfree = 132423
79 672db045 Christos Stavrakakis
    dtotal = 14921932
80 672db045 Christos Stavrakakis
    pinst_cnt = 2
81 672db045 Christos Stavrakakis
    ctotal = 80
82 672db045 Christos Stavrakakis
83 c9976c84 Christos Stavrakakis
    disk_templates = ["file", "plain", "drbd"]
84 c9976c84 Christos Stavrakakis
85 672db045 Christos Stavrakakis
86 672db045 Christos Stavrakakis
class DrainedBackend(BackendFactory):
87 672db045 Christos Stavrakakis
    drained = True
88 672db045 Christos Stavrakakis
89 672db045 Christos Stavrakakis
90 672db045 Christos Stavrakakis
class OfflineBackend(BackendFactory):
91 672db045 Christos Stavrakakis
    offline = True
92 672db045 Christos Stavrakakis
93 672db045 Christos Stavrakakis
94 d4325f42 Christos Stavrakakis
class VirtualMachineFactory(factory.DjangoModelFactory):
95 672db045 Christos Stavrakakis
    FACTORY_FOR = models.VirtualMachine
96 672db045 Christos Stavrakakis
97 672db045 Christos Stavrakakis
    name = factory.Sequence(prefix_seq('vm'))
98 672db045 Christos Stavrakakis
    userid = factory.Sequence(user_seq())
99 672db045 Christos Stavrakakis
    backend = factory.SubFactory(BackendFactory)
100 672db045 Christos Stavrakakis
    imageid = '78491238479120243171243'
101 672db045 Christos Stavrakakis
    flavor = factory.SubFactory(FlavorFactory)
102 672db045 Christos Stavrakakis
    deleted = False
103 672db045 Christos Stavrakakis
    suspended = False
104 672db045 Christos Stavrakakis
    operstate = factory.Sequence(round_seq_first(FACTORY_FOR.OPER_STATES))
105 672db045 Christos Stavrakakis
106 672db045 Christos Stavrakakis
107 672db045 Christos Stavrakakis
class DeletedVirtualMachine(VirtualMachineFactory):
108 672db045 Christos Stavrakakis
    deleted = True
109 672db045 Christos Stavrakakis
110 672db045 Christos Stavrakakis
111 672db045 Christos Stavrakakis
class ErrorVirtualMachine(VirtualMachineFactory):
112 672db045 Christos Stavrakakis
    operstate = "ERROR"
113 672db045 Christos Stavrakakis
114 672db045 Christos Stavrakakis
115 672db045 Christos Stavrakakis
class BuildVirtualMachine(VirtualMachineFactory):
116 672db045 Christos Stavrakakis
    operstate = "BUILD"
117 672db045 Christos Stavrakakis
118 672db045 Christos Stavrakakis
119 672db045 Christos Stavrakakis
class DestroyedVirtualMachine(VirtualMachineFactory):
120 672db045 Christos Stavrakakis
    operstate = "DESTROYED"
121 672db045 Christos Stavrakakis
122 672db045 Christos Stavrakakis
123 672db045 Christos Stavrakakis
class StartedVirtualMachine(VirtualMachineFactory):
124 672db045 Christos Stavrakakis
    operstate = "STARTED"
125 672db045 Christos Stavrakakis
126 672db045 Christos Stavrakakis
127 672db045 Christos Stavrakakis
class StopedVirtualMachine(VirtualMachineFactory):
128 672db045 Christos Stavrakakis
    operstate = "STOPED"
129 672db045 Christos Stavrakakis
130 672db045 Christos Stavrakakis
131 d4325f42 Christos Stavrakakis
class VirtualMachineMetadataFactory(factory.DjangoModelFactory):
132 672db045 Christos Stavrakakis
    FACTORY_FOR = models.VirtualMachineMetadata
133 672db045 Christos Stavrakakis
134 672db045 Christos Stavrakakis
    meta_key = factory.Sequence(prefix_seq('key'))
135 672db045 Christos Stavrakakis
    meta_value = factory.Sequence(prefix_seq('pass'))
136 672db045 Christos Stavrakakis
    vm = factory.SubFactory(VirtualMachineFactory)
137 672db045 Christos Stavrakakis
138 672db045 Christos Stavrakakis
139 d4325f42 Christos Stavrakakis
class NetworkFactory(factory.DjangoModelFactory):
140 672db045 Christos Stavrakakis
    FACTORY_FOR = models.Network
141 672db045 Christos Stavrakakis
142 672db045 Christos Stavrakakis
    name = factory.Sequence(prefix_seq('network'))
143 672db045 Christos Stavrakakis
    userid = factory.Sequence(user_seq())
144 672db045 Christos Stavrakakis
    subnet = factory.Sequence(lambda n: '192.168.{0}.0/24'.format(n))
145 672db045 Christos Stavrakakis
    gateway = factory.LazyAttribute(lambda a: a.subnet[:-4] + '1')
146 5aeb4e93 Christos Stavrakakis
    subnet6 = "2001:648:2ffc:1112::/64"
147 672db045 Christos Stavrakakis
    dhcp = False
148 672db045 Christos Stavrakakis
    flavor = factory.Sequence(round_seq(models.Network.FLAVORS.keys()))
149 672db045 Christos Stavrakakis
    mode = factory.LazyAttribute(lambda a:
150 672db045 Christos Stavrakakis
                                 models.Network.FLAVORS[a.flavor]['mode'])
151 672db045 Christos Stavrakakis
    link = factory.Sequence(prefix_seq('link'))
152 672db045 Christos Stavrakakis
    mac_prefix = 'aa:00:0'
153 672db045 Christos Stavrakakis
    tags = factory.LazyAttribute(lambda a:
154 672db045 Christos Stavrakakis
                                 models.Network.FLAVORS[a.flavor]['tags'])
155 672db045 Christos Stavrakakis
    public = False
156 672db045 Christos Stavrakakis
    deleted = False
157 672db045 Christos Stavrakakis
    state = factory.Sequence(round_seq_first(models.Network.OPER_STATES))
158 672db045 Christos Stavrakakis
159 672db045 Christos Stavrakakis
160 5aeb4e93 Christos Stavrakakis
class IPv6NetworkFactory(NetworkFactory):
161 5aeb4e93 Christos Stavrakakis
    subnet = None
162 5aeb4e93 Christos Stavrakakis
    gateway = None
163 5aeb4e93 Christos Stavrakakis
164 5aeb4e93 Christos Stavrakakis
165 672db045 Christos Stavrakakis
class DeletedNetwork(NetworkFactory):
166 672db045 Christos Stavrakakis
    deleted = True
167 672db045 Christos Stavrakakis
168 672db045 Christos Stavrakakis
169 d4325f42 Christos Stavrakakis
class BackendNetworkFactory(factory.DjangoModelFactory):
170 672db045 Christos Stavrakakis
    FACTORY_FOR = models.BackendNetwork
171 672db045 Christos Stavrakakis
172 672db045 Christos Stavrakakis
    network = factory.SubFactory(NetworkFactory)
173 672db045 Christos Stavrakakis
    backend = factory.SubFactory(BackendFactory)
174 672db045 Christos Stavrakakis
    operstate = factory.Sequence(round_seq_first(FACTORY_FOR.OPER_STATES))
175 672db045 Christos Stavrakakis
176 672db045 Christos Stavrakakis
177 d4325f42 Christos Stavrakakis
class NetworkInterfaceFactory(factory.DjangoModelFactory):
178 672db045 Christos Stavrakakis
    FACTORY_FOR = models.NetworkInterface
179 672db045 Christos Stavrakakis
180 672db045 Christos Stavrakakis
    machine = factory.SubFactory(VirtualMachineFactory)
181 672db045 Christos Stavrakakis
    network = factory.SubFactory(NetworkFactory)
182 672db045 Christos Stavrakakis
    index = factory.Sequence(lambda x: x, type=int)
183 5aeb4e93 Christos Stavrakakis
    mac = factory.Sequence(lambda n: 'aa:{0}{0}:{0}{0}:aa:{0}{0}:{0}{0}'
184 5aeb4e93 Christos Stavrakakis
                           .format(hex(int(n) % 15)[2:3]))
185 68b952f9 Christos Stavrakakis
    ipv4 = factory.LazyAttributeSequence(lambda a, n: a.network.subnet[:-4] +
186 672db045 Christos Stavrakakis
                                         '{0}'.format(int(n) + 2))
187 939d71dd Christos Stavrakakis
    state = "ACTIVE"
188 672db045 Christos Stavrakakis
    firewall_profile =\
189 672db045 Christos Stavrakakis
        factory.Sequence(round_seq_first(FACTORY_FOR.FIREWALL_PROFILES))
190 672db045 Christos Stavrakakis
191 672db045 Christos Stavrakakis
192 c2876228 Christos Stavrakakis
class FloatingIPFactory(factory.DjangoModelFactory):
193 c2876228 Christos Stavrakakis
    FACTORY_FOR = models.FloatingIP
194 c2876228 Christos Stavrakakis
195 c2876228 Christos Stavrakakis
    machine = factory.SubFactory(VirtualMachineFactory)
196 9115d567 Christos Stavrakakis
    network = factory.SubFactory(NetworkFactory, public=False, deleted=False,
197 9115d567 Christos Stavrakakis
                                 floating_ip_pool=True)
198 c2876228 Christos Stavrakakis
    ipv4 = factory.LazyAttributeSequence(lambda a, n: a.network.subnet[:-4] +
199 c2876228 Christos Stavrakakis
                                         '{0}'.format(int(n) + 2))
200 c2876228 Christos Stavrakakis
201 c2876228 Christos Stavrakakis
202 d4325f42 Christos Stavrakakis
class BridgePoolTableFactory(factory.DjangoModelFactory):
203 672db045 Christos Stavrakakis
    FACTORY_FOR = models.BridgePoolTable
204 672db045 Christos Stavrakakis
205 672db045 Christos Stavrakakis
    size = 20
206 672db045 Christos Stavrakakis
    base = 'prv'
207 672db045 Christos Stavrakakis
208 672db045 Christos Stavrakakis
209 d4325f42 Christos Stavrakakis
class MacPrefixPoolTableFactory(factory.DjangoModelFactory):
210 672db045 Christos Stavrakakis
    FACTORY_FOR = models.MacPrefixPoolTable
211 672db045 Christos Stavrakakis
    size = 100
212 672db045 Christos Stavrakakis
    base = 'aa:00:0'
213 d552dddd Christos Stavrakakis
214 d552dddd Christos Stavrakakis
215 d4325f42 Christos Stavrakakis
class QuotaHolderSerialFactory(factory.DjangoModelFactory):
216 d552dddd Christos Stavrakakis
    FACTORY_FOR = models.QuotaHolderSerial
217 41a7fae7 Christos Stavrakakis
    serial = factory.Sequence(lambda x: x, type=int)