Revision 64cdd31b snf-cyclades-app/synnefo/api/management/commands/network-create.py
b/snf-cyclades-app/synnefo/api/management/commands/network-create.py | ||
---|---|---|
35 | 35 |
|
36 | 36 |
from django.core.management.base import BaseCommand, CommandError |
37 | 37 |
from synnefo.management.common import validate_network_info, get_backend |
38 |
from synnefo.webproject.management.utils import pprint_table |
|
38 |
from synnefo.webproject.management.utils import pprint_table, parse_bool
|
|
39 | 39 |
|
40 | 40 |
from synnefo import quotas |
41 |
from synnefo.db.models import Network |
|
41 |
from synnefo.db.models import Network, Backend
|
|
42 | 42 |
from synnefo.db.utils import validate_mac, InvalidMacAddress |
43 | 43 |
from synnefo.logic.backend import create_network |
44 | 44 |
from synnefo.api.util import values_from_flavor |
... | ... | |
127 | 127 |
default=None, |
128 | 128 |
help='The tags of the Network (comma separated strings)'), |
129 | 129 |
make_option( |
130 |
'--floating-ip-pool', |
|
131 |
dest='floating_ip_pool', |
|
132 |
default="False", |
|
133 |
choices=["True", "False"], |
|
134 |
metavar="True|False", |
|
135 |
help="Use the network as a Floating IP pool. Floating IP pools" |
|
136 |
" are created in all available backends."), |
|
137 |
make_option( |
|
130 | 138 |
'--backend-id', |
131 | 139 |
dest='backend_id', |
132 | 140 |
default=None, |
... | ... | |
149 | 157 |
mac_prefix = options['mac_prefix'] |
150 | 158 |
tags = options['tags'] |
151 | 159 |
userid = options["owner"] |
160 |
floating_ip_pool = parse_bool(options["floating_ip_pool"]) |
|
152 | 161 |
|
153 | 162 |
if not name: |
154 | 163 |
raise CommandError("Name is required") |
... | ... | |
156 | 165 |
raise CommandError("Subnet is required") |
157 | 166 |
if not flavor: |
158 | 167 |
raise CommandError("Flavor is required") |
159 |
if public and not backend_id:
|
|
168 |
if public and not (backend_id or floating_ip_pool):
|
|
160 | 169 |
raise CommandError("backend-id is required") |
161 | 170 |
if not userid and not public: |
162 | 171 |
raise CommandError("'owner' is required for private networks") |
... | ... | |
198 | 207 |
"link": link, |
199 | 208 |
"mac_prefix": mac_prefix, |
200 | 209 |
"tags": tags, |
210 |
"floating_ip_pool": floating_ip_pool, |
|
201 | 211 |
"state": "ACTIVE"} |
202 | 212 |
|
203 | 213 |
if dry_run: |
... | ... | |
209 | 219 |
if userid: |
210 | 220 |
quotas.issue_and_accept_commission(network) |
211 | 221 |
|
212 |
if backend_id: |
|
213 |
# Create BackendNetwork only to the specified Backend |
|
222 |
# Create network in Backend if needed |
|
223 |
if floating_ip_pool: |
|
224 |
backends = Backend.objects.filter(offline=False) |
|
225 |
elif backend_id: |
|
226 |
backends = [backend] |
|
227 |
else: |
|
228 |
backends = [] |
|
229 |
|
|
230 |
for backend in backends: |
|
214 | 231 |
network.create_backend_network(backend) |
215 |
create_network(network=network, backend=backend, connect=True) |
|
232 |
self.stdout.write("Trying to connect network to backend '%s'\n" % |
|
233 |
backend) |
|
234 |
jobs = create_network(network=network, backend=backend, |
|
235 |
connect=True) |
|
236 |
self.stdout.write("Successfully issued jobs: %s\n" % |
|
237 |
",".join(jobs)) |
Also available in: Unified diff