Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
synnefo
Commits
7ade5b01
Commit
7ade5b01
authored
Feb 06, 2012
by
Vangelis Koukis
Browse files
Merge branch 'plankton'
parents
839f4e3b
934852e6
Changes
4
Hide whitespace changes
Inline
Side-by-side
snf-cyclades-app/synnefo/db/migrations/0026_auto__del_unique_flavor_disk_ram_cpu__add_unique_flavor_disk_ram_cpu_d.py
0 → 100644
View file @
7ade5b01
# encoding: utf-8
import
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Removing unique constraint on 'Flavor', fields ['disk', 'ram', 'cpu']
db
.
delete_unique
(
'db_flavor'
,
[
'disk'
,
'ram'
,
'cpu'
])
# Adding unique constraint on 'Flavor', fields ['disk', 'ram', 'cpu', 'disk_template']
db
.
create_unique
(
'db_flavor'
,
[
'disk'
,
'ram'
,
'cpu'
,
'disk_template'
])
def
backwards
(
self
,
orm
):
# Removing unique constraint on 'Flavor', fields ['disk', 'ram', 'cpu', 'disk_template']
db
.
delete_unique
(
'db_flavor'
,
[
'disk'
,
'ram'
,
'cpu'
,
'disk_template'
])
# Adding unique constraint on 'Flavor', fields ['disk', 'ram', 'cpu']
db
.
create_unique
(
'db_flavor'
,
[
'disk'
,
'ram'
,
'cpu'
])
models
=
{
'db.debit'
:
{
'Meta'
:
{
'object_name'
:
'Debit'
},
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
}),
'vm'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.VirtualMachine']"
}),
'when'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{})
},
'db.disk'
:
{
'Meta'
:
{
'object_name'
:
'Disk'
},
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'size'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'vm'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.VirtualMachine']"
,
'null'
:
'True'
,
'blank'
:
'True'
})
},
'db.flavor'
:
{
'Meta'
:
{
'unique_together'
:
"(('cpu', 'ram', 'disk', 'disk_template'),)"
,
'object_name'
:
'Flavor'
},
'cpu'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'0'
}),
'deleted'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'disk'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'0'
}),
'disk_template'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'drbd'"
,
'max_length'
:
'32'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'ram'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'0'
})
},
'db.flavorcost'
:
{
'Meta'
:
{
'object_name'
:
'FlavorCost'
},
'cost_active'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{}),
'cost_inactive'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{}),
'effective_from'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{}),
'flavor'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.Flavor']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
})
},
'db.image'
:
{
'Meta'
:
{
'object_name'
:
'Image'
},
'backend_id'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'debian_base'"
,
'max_length'
:
'50'
}),
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'format'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'dump'"
,
'max_length'
:
'30'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'public'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'sourcevm'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.VirtualMachine']"
,
'null'
:
'True'
}),
'state'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.imagemetadata'
:
{
'Meta'
:
{
'unique_together'
:
"(('meta_key', 'image'),)"
,
'object_name'
:
'ImageMetadata'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'image'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'metadata'"
,
'to'
:
"orm['db.Image']"
}),
'meta_key'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
}),
'meta_value'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'500'
})
},
'db.invitations'
:
{
'Meta'
:
{
'object_name'
:
'Invitations'
},
'accepted'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'level'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'null'
:
'True'
}),
'source'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'source'"
,
'to'
:
"orm['db.SynnefoUser']"
}),
'target'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'target'"
,
'to'
:
"orm['db.SynnefoUser']"
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.limit'
:
{
'Meta'
:
{
'object_name'
:
'Limit'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
}),
'value'
:
(
'django.db.models.fields.IntegerField'
,
[],
{})
},
'db.network'
:
{
'Meta'
:
{
'object_name'
:
'Network'
},
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'link'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'+'"
,
'to'
:
"orm['db.NetworkLink']"
}),
'machines'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
"orm['db.VirtualMachine']"
,
'through'
:
"orm['db.NetworkInterface']"
,
'symmetrical'
:
'False'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
,
'null'
:
'True'
}),
'public'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'state'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.networkinterface'
:
{
'Meta'
:
{
'object_name'
:
'NetworkInterface'
},
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'firewall_profile'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'null'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'index'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'null'
:
'True'
}),
'ipv4'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'15'
,
'null'
:
'True'
}),
'ipv6'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
,
'null'
:
'True'
}),
'mac'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'17'
,
'null'
:
'True'
}),
'machine'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'nics'"
,
'to'
:
"orm['db.VirtualMachine']"
}),
'network'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'nics'"
,
'to'
:
"orm['db.Network']"
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.networklink'
:
{
'Meta'
:
{
'object_name'
:
'NetworkLink'
},
'available'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'index'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'network'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'+'"
,
'null'
:
'True'
,
'to'
:
"orm['db.Network']"
})
},
'db.synnefouser'
:
{
'Meta'
:
{
'object_name'
:
'SynnefoUser'
},
'auth_token'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'32'
,
'null'
:
'True'
}),
'auth_token_created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'auth_token_expires'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'credit'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'max_invitations'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'null'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'255'
}),
'realname'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"''"
,
'max_length'
:
'255'
}),
'state'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'ACTIVE'"
,
'max_length'
:
'30'
}),
'tmp_auth_token'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'32'
,
'null'
:
'True'
}),
'tmp_auth_token_expires'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'type'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
}),
'uniq'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
,
'null'
:
'True'
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.virtualmachine'
:
{
'Meta'
:
{
'object_name'
:
'VirtualMachine'
},
'action'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'null'
:
'True'
}),
'backendjobid'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{
'null'
:
'True'
}),
'backendjobstatus'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'null'
:
'True'
}),
'backendlogmsg'
:
(
'django.db.models.fields.TextField'
,
[],
{
'null'
:
'True'
}),
'backendopcode'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'null'
:
'True'
}),
'buildpercentage'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'0'
}),
'charged'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime(2012, 2, 6, 14, 22, 35, 176380)'
}),
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'deleted'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'flavor'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.Flavor']"
}),
'hostid'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'imageid'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'operstate'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'null'
:
'True'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
}),
'suspended'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.virtualmachinegroup'
:
{
'Meta'
:
{
'ordering'
:
"['name']"
,
'object_name'
:
'VirtualMachineGroup'
},
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'machines'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
"orm['db.VirtualMachine']"
,
'symmetrical'
:
'False'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'255'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['db.SynnefoUser']"
}),
'updated'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
})
},
'db.virtualmachinemetadata'
:
{
'Meta'
:
{
'unique_together'
:
"(('meta_key', 'vm'),)"
,
'object_name'
:
'VirtualMachineMetadata'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'meta_key'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
}),
'meta_value'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'500'
}),
'vm'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'metadata'"
,
'to'
:
"orm['db.VirtualMachine']"
})
}
}
complete_apps
=
[
'db'
]
snf-cyclades-app/synnefo/db/models.py
View file @
7ade5b01
...
...
@@ -172,7 +172,7 @@ class Flavor(models.Model):
class
Meta
:
verbose_name
=
u
'Virtual machine flavor'
unique_together
=
(
'cpu'
,
'ram'
,
'disk'
)
unique_together
=
(
'cpu'
,
'ram'
,
'disk'
,
'disk_template'
)
@
property
def
name
(
self
):
...
...
snf-cyclades-app/synnefo/plankton/views.py
View file @
7ade5b01
...
...
@@ -35,6 +35,7 @@ import json
from
string
import
punctuation
from
StringIO
import
StringIO
from
urllib
import
unquote
from
django.conf
import
settings
from
django.http
import
HttpResponse
,
HttpResponseNotFound
...
...
@@ -99,10 +100,10 @@ def _get_image_headers(request):
for
key
,
val
in
request
.
META
.
items
():
if
key
.
startswith
(
META_PROPERTY_PREFIX
):
name
=
normalize
(
key
[
META_PROPERTY_PREFIX_LEN
:])
headers
[
'properties'
][
name
]
=
val
headers
[
'properties'
][
unquote
(
name
)
]
=
unquote
(
val
)
elif
key
.
startswith
(
META_PREFIX
):
name
=
normalize
(
key
[
META_PREFIX_LEN
:])
headers
[
name
]
=
val
headers
[
unquote
(
name
)
]
=
unquote
(
val
)
is_public
=
headers
.
get
(
'is_public'
,
None
)
if
is_public
is
not
None
:
...
...
snf-docs/cyclades-admin-tools.rst
View file @
7ade5b01
...
...
@@ -16,8 +16,8 @@ To chage a setting use ``kamaki config set``:
.. code-block:: console
kamaki config set image_url https://cyclades.
okeanos.grnet.gr
/plankton
kamaki config set storage_url https://pithos.
okeanos.grnet.gr
/v1
kamaki config set image_url https://cyclades.
example.com
/plankton
kamaki config set storage_url https://pithos.
example.com
/v1
kamaki config set token ...
...
...
@@ -29,7 +29,7 @@ used by the ``kamaki store`` commands:
.. code-block:: console
kamaki config set storage_account images@
okeanos.grnet.gr
kamaki config set storage_account images@
example.com
kamaki config set storage_container images
If the container does not exist, you will have to create it before uploading
...
...
@@ -48,7 +48,7 @@ or use kamaki directly:
You can use any Pithos client to verify that the image was uploaded correctly.
The full Pithos URL for the previous example will be
``pithos://images@
okeanos.grnet.gr
/images/ubuntu.iso``.
``pithos://images@
example.com
/images/ubuntu.iso``.
Register the image
...
...
@@ -59,7 +59,7 @@ a public image the one from the previous example use:
.. code-block:: console
kamaki glance register Ubuntu pithos://images@
okeanos.grnet.gr
/images/ubuntu.iso --public
kamaki glance register Ubuntu pithos://images@
example.com
/images/ubuntu.iso --public
The ``--public`` flag is important, if missing the registered image will not
be listed by ``kamaki glance list``.
...
...
@@ -69,7 +69,7 @@ options. A more complete example would be the following:
.. code-block:: console
kamaki glance register Ubuntu pithos://images@
okeanos.grnet.gr
/images/ubuntu.iso \
kamaki glance register Ubuntu pithos://images@
example.com
/images/ubuntu.iso \
--public --disk-format diskdump --property kernel=3.1.2
To verify that the image was registered successfully use:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment