Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
aca6c74c
authored
Feb 15, 2013
by
Őry Máté
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
one: lint models.py
parent
b18fbe92
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
340 additions
and
76 deletions
+340
-76
one/migrations/0013_auto__chg_field_sshkey_key__chg_field_userclouddetails_ssh_private_key.py
+254
-0
one/models.py
+83
-73
store/views.py
+3
-3
No files found.
one/migrations/0013_auto__chg_field_sshkey_key__chg_field_userclouddetails_ssh_private_key.py
0 → 100644
View file @
aca6c74c
# -*- coding: 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
):
# Changing field 'SshKey.key'
db
.
alter_column
(
'one_sshkey'
,
'key'
,
self
.
gf
(
'django.db.models.fields.TextField'
)())
# Changing field 'UserCloudDetails.ssh_private_key'
db
.
alter_column
(
'one_userclouddetails'
,
'ssh_private_key'
,
self
.
gf
(
'django.db.models.fields.TextField'
)(
default
=
''
))
# Changing field 'UserCloudDetails.user'
db
.
alter_column
(
'one_userclouddetails'
,
'user_id'
,
self
.
gf
(
'django.db.models.fields.related.OneToOneField'
)(
unique
=
True
,
to
=
orm
[
'auth.User'
]))
# Changing field 'Instance.name'
db
.
alter_column
(
'one_instance'
,
'name'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
default
=
''
,
unique
=
True
,
max_length
=
100
))
def
backwards
(
self
,
orm
):
# Changing field 'SshKey.key'
db
.
alter_column
(
'one_sshkey'
,
'key'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
max_length
=
2000
))
# Changing field 'UserCloudDetails.ssh_private_key'
db
.
alter_column
(
'one_userclouddetails'
,
'ssh_private_key'
,
self
.
gf
(
'django.db.models.fields.TextField'
)(
null
=
True
))
# Changing field 'UserCloudDetails.user'
db
.
alter_column
(
'one_userclouddetails'
,
'user_id'
,
self
.
gf
(
'django.db.models.fields.related.ForeignKey'
)(
to
=
orm
[
'auth.User'
],
unique
=
True
))
# Changing field 'Instance.name'
db
.
alter_column
(
'one_instance'
,
'name'
,
self
.
gf
(
'django.db.models.fields.CharField'
)(
unique
=
True
,
max_length
=
100
,
null
=
True
))
models
=
{
'auth.group'
:
{
'Meta'
:
{
'object_name'
:
'Group'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'80'
}),
'permissions'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
"orm['auth.Permission']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
})
},
'auth.permission'
:
{
'Meta'
:
{
'ordering'
:
"('content_type__app_label', 'content_type__model', 'codename')"
,
'unique_together'
:
"(('content_type', 'codename'),)"
,
'object_name'
:
'Permission'
},
'codename'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'content_type'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['contenttypes.ContentType']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
})
},
'auth.user'
:
{
'Meta'
:
{
'object_name'
:
'User'
},
'date_joined'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime.now'
}),
'email'
:
(
'django.db.models.fields.EmailField'
,
[],
{
'max_length'
:
'75'
,
'blank'
:
'True'
}),
'first_name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'blank'
:
'True'
}),
'groups'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
"orm['auth.Group']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'is_active'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'is_staff'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'is_superuser'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'last_login'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime.now'
}),
'last_name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'blank'
:
'True'
}),
'password'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'128'
}),
'user_permissions'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
"orm['auth.Permission']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
}),
'username'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'30'
})
},
'contenttypes.contenttype'
:
{
'Meta'
:
{
'ordering'
:
"('name',)"
,
'unique_together'
:
"(('app_label', 'model'),)"
,
'object_name'
:
'ContentType'
,
'db_table'
:
"'django_content_type'"
},
'app_label'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'model'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
})
},
'firewall.domain'
:
{
'Meta'
:
{
'object_name'
:
'Domain'
},
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'modified_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'40'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.User']"
}),
'ttl'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'600'
})
},
'firewall.group'
:
{
'Meta'
:
{
'object_name'
:
'Group'
},
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'modified_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'20'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.User']"
,
'null'
:
'True'
,
'blank'
:
'True'
})
},
'firewall.host'
:
{
'Meta'
:
{
'object_name'
:
'Host'
},
'comment'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'groups'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'symmetrical'
:
'False'
,
'to'
:
"orm['firewall.Group']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'hostname'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'40'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'ipv4'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'39'
}),
'ipv6'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'max_length'
:
'39'
,
'unique'
:
'True'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'location'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'mac'
:
(
'firewall.fields.MACAddressField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'17'
}),
'modified_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.User']"
}),
'pub_ipv4'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'max_length'
:
'39'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'reverse'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'40'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'shared_ip'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'vlan'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['firewall.Vlan']"
})
},
'firewall.vlan'
:
{
'Meta'
:
{
'object_name'
:
'Vlan'
},
'comment'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'dhcp_pool'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'domain'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['firewall.Domain']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'interface'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'20'
}),
'ipv4'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'39'
}),
'ipv6'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'39'
}),
'modified_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'20'
}),
'net4'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'39'
}),
'net6'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'39'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.User']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'prefix4'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'16'
}),
'prefix6'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'80'
}),
'reverse_domain'
:
(
'django.db.models.fields.TextField'
,
[],
{}),
'snat_ip'
:
(
'django.db.models.fields.GenericIPAddressField'
,
[],
{
'max_length'
:
'39'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'snat_to'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'symmetrical'
:
'False'
,
'to'
:
"orm['firewall.Vlan']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'vid'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'unique'
:
'True'
})
},
'one.disk'
:
{
'Meta'
:
{
'ordering'
:
"['name']"
,
'object_name'
:
'Disk'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'100'
})
},
'one.instance'
:
{
'Meta'
:
{
'object_name'
:
'Instance'
},
'active_since'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'null'
:
'True'
,
'blank'
:
'True'
}),
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'firewall_host'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'instance_set'"
,
'null'
:
'True'
,
'to'
:
"orm['firewall.Host']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'ip'
:
(
'django.db.models.fields.IPAddressField'
,
[],
{
'max_length'
:
'15'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'100'
,
'blank'
:
'True'
}),
'one_id'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'unique'
:
'True'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'instance_set'"
,
'to'
:
"orm['auth.User']"
}),
'pw'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'20'
}),
'share'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'instance_set'"
,
'null'
:
'True'
,
'to'
:
"orm['one.Share']"
}),
'state'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'DEPLOYABLE'"
,
'max_length'
:
'20'
}),
'template'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'instance_set'"
,
'to'
:
"orm['one.Template']"
}),
'time_of_delete'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'None'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'time_of_suspend'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'None'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'waiting'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
})
},
'one.instancetype'
:
{
'CPU'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'Meta'
:
{
'ordering'
:
"['credit']"
,
'object_name'
:
'InstanceType'
},
'RAM'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'credit'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'100'
})
},
'one.network'
:
{
'Meta'
:
{
'ordering'
:
"['name']"
,
'object_name'
:
'Network'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'100'
}),
'nat'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'public'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
})
},
'one.share'
:
{
'Meta'
:
{
'object_name'
:
'Share'
},
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{}),
'group'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'share_set'"
,
'to'
:
"orm['school.Group']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'instance_limit'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'share_set'"
,
'null'
:
'True'
,
'to'
:
"orm['auth.User']"
}),
'per_user_limit'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'template'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'share_set'"
,
'to'
:
"orm['one.Template']"
}),
'type'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'10'
})
},
'one.sshkey'
:
{
'Meta'
:
{
'object_name'
:
'SshKey'
},
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'key'
:
(
'django.db.models.fields.TextField'
,
[],
{}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'sshkey_set'"
,
'to'
:
"orm['auth.User']"
})
},
'one.template'
:
{
'Meta'
:
{
'object_name'
:
'Template'
},
'access_type'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'10'
}),
'created_at'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'description'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'disk'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'template_set'"
,
'to'
:
"orm['one.Disk']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'instance_type'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'template_set'"
,
'to'
:
"orm['one.InstanceType']"
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'100'
}),
'network'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'template_set'"
,
'to'
:
"orm['one.Network']"
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'related_name'
:
"'template_set'"
,
'to'
:
"orm['auth.User']"
}),
'public'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'state'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'NEW'"
,
'max_length'
:
'10'
}),
'system'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
})
},
'one.userclouddetails'
:
{
'Meta'
:
{
'object_name'
:
'UserCloudDetails'
},
'disk_quota'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'2048'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'instance_quota'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'20'
}),
'share_quota'
:
(
'django.db.models.fields.IntegerField'
,
[],
{
'default'
:
'0'
}),
'smb_password'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'20'
}),
'ssh_key'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'userclouddetails_set'"
,
'null'
:
'True'
,
'to'
:
"orm['one.SshKey']"
}),
'ssh_private_key'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'user'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'related_name'
:
"'cloud_details'"
,
'unique'
:
'True'
,
'to'
:
"orm['auth.User']"
})
},
'school.course'
:
{
'Meta'
:
{
'object_name'
:
'Course'
},
'code'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'20'
}),
'default_group'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'default_group_of'"
,
'null'
:
'True'
,
'to'
:
"orm['school.Group']"
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'80'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'owners'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'symmetrical'
:
'False'
,
'to'
:
"orm['school.Person']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'short_name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'10'
,
'null'
:
'True'
,
'blank'
:
'True'
})
},
'school.group'
:
{
'Meta'
:
{
'unique_together'
:
"(('name', 'course', 'semester'),)"
,
'object_name'
:
'Group'
},
'course'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['school.Course']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'members'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'course_groups'"
,
'null'
:
'True'
,
'symmetrical'
:
'False'
,
'to'
:
"orm['school.Person']"
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'80'
}),
'owners'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'owned_groups'"
,
'null'
:
'True'
,
'symmetrical'
:
'False'
,
'to'
:
"orm['school.Person']"
}),
'semester'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['school.Semester']"
})
},
'school.person'
:
{
'Meta'
:
{
'object_name'
:
'Person'
},
'code'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'30'
}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'language'
:
(
'django.db.models.fields.CharField'
,
[],
{
'default'
:
"'hu'"
,
'max_length'
:
'10'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['auth.User']"
,
'unique'
:
'True'
,
'null'
:
'True'
,
'blank'
:
'True'
})
},
'school.semester'
:
{
'Meta'
:
{
'object_name'
:
'Semester'
},
'end'
:
(
'django.db.models.fields.DateField'
,
[],
{}),
'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'20'
}),
'start'
:
(
'django.db.models.fields.DateField'
,
[],
{})
}
}
complete_apps
=
[
'one'
]
\ No newline at end of file
one/models.py
View file @
aca6c74c
# coding=utf-8
# coding=utf-8
from
datetime
import
datetime
from
datetime
import
timedelta
as
td
import
subprocess
,
tempfile
,
os
,
stat
,
re
,
base64
,
struct
,
logging
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.core.exceptions
import
ValidationError
from
django.core.exceptions
import
ValidationError
from
django.core
import
signing
from
django.core
import
signing
from
django.db
import
models
from
django.db
import
models
from
django.db
import
transaction
from
django.db
import
transaction
from
django.db.models.signals
import
post_delete
,
pre_delete
from
django.db.models.signals
import
post_save
from
django.db.models.signals
import
post_save
from
django
import
forms
from
django
import
forms
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.utils.translation
import
ugettext_lazy
as
_
from
firewall.models
import
Host
,
Rule
,
Vlan
from
firewall.models
import
Host
,
Rule
,
Vlan
from
one.util
import
keygen
from
school.models
import
Person
,
Group
from
school.models
import
Person
,
Group
from
datetime
import
timedelta
as
td
from
django.db.models.signals
import
post_delete
,
pre_delete
from
store.api
import
StoreApi
from
store.api
import
StoreApi
from
django.db
import
transaction
from
.util
import
keygen
from
datetime
import
datetime
import
logging
import
subprocess
,
tempfile
,
os
,
stat
,
re
,
base64
,
struct
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
pwgen
=
User
.
objects
.
make_random_password
pwgen
=
User
.
objects
.
make_random_password
...
@@ -33,19 +33,19 @@ post_save.connect(create_user_profile, sender=User)
...
@@ -33,19 +33,19 @@ post_save.connect(create_user_profile, sender=User)
class
UserCloudDetails
(
models
.
Model
):
class
UserCloudDetails
(
models
.
Model
):
"""Cloud related details of a user."""
"""Cloud related details of a user."""
user
=
models
.
ForeignKey
(
User
,
null
=
False
,
blank
=
False
,
unique
=
True
,
user
=
models
.
OneToOneField
(
User
,
verbose_name
=
_
(
'user'
)
,
verbose_name
=
_
(
'user'
)
)
related_name
=
'cloud_details'
)
smb_password
=
models
.
CharField
(
max_length
=
20
,
smb_password
=
models
.
CharField
(
max_length
=
20
,
verbose_name
=
_
(
'Samba password'
),
verbose_name
=
_
(
'Samba password'
),
help_text
=
_
(
'Generated password for accessing store from '
help_text
=
_
(
'Generated password for accessing store from '
'Windows.'
))
'Windows.'
))
ssh_key
=
models
.
ForeignKey
(
'SshKey'
,
null
=
True
,
ssh_key
=
models
.
ForeignKey
(
'SshKey'
,
verbose_name
=
_
(
'SSH key (public)'
)
,
verbose_name
=
_
(
'SSH key (public)'
)
,
null
=
True
,
blank
=
True
,
related_name
=
'userclouddetails_set'
,
help_text
=
_
(
'Generated SSH public key for accessing store from '
help_text
=
_
(
'Generated SSH public key for accessing store from '
'Linux.'
))
'Linux.'
))
ssh_private_key
=
models
.
TextField
(
verbose_name
=
_
(
'SSH key (private)'
),
ssh_private_key
=
models
.
TextField
(
verbose_name
=
_
(
'SSH key (private)'
),
null
=
True
,
help_text
=
_
(
'Generated SSH private key for '
blank
=
True
,
help_text
=
_
(
'Generated SSH private key for '
'accessing store from Linux.'
))
'accessing store from Linux.'
))
share_quota
=
models
.
IntegerField
(
verbose_name
=
_
(
'share quota'
),
share_quota
=
models
.
IntegerField
(
verbose_name
=
_
(
'share quota'
),
default
=
0
)
default
=
0
)
instance_quota
=
models
.
IntegerField
(
verbose_name
=
_
(
'instance quota'
),
instance_quota
=
models
.
IntegerField
(
verbose_name
=
_
(
'instance quota'
),
...
@@ -139,12 +139,12 @@ class OpenSshKeyValidator(object):
...
@@ -139,12 +139,12 @@ class OpenSshKeyValidator(object):
class
SshKey
(
models
.
Model
):
class
SshKey
(
models
.
Model
):
"""SSH public key (in OpenSSH format)."""
"""SSH public key (in OpenSSH format)."""
user
=
models
.
ForeignKey
(
User
,
null
=
False
,
blank
=
False
)
user
=
models
.
ForeignKey
(
User
,
related_name
=
'sshkey_set'
)
key
=
models
.
CharField
(
max_length
=
2000
,
verbose_name
=
_
(
'SSH key'
),
key
=
models
.
TextField
(
verbose_name
=
_
(
'SSH key'
),
help_text
=
_
(
'<a href="/info/ssh/">SSH public key in OpenSSH '
help_text
=
_
(
'<a href="/info/ssh/">SSH public key in OpenSSH '
'format</a> used for shell and store login '
'format</a> used for shell and store login '
'(2048+ bit RSA preferred). Example: '
'(2048+ bit RSA preferred). Example: '
'<code>ssh-rsa AAAAB...QtQ== john</code>.'
),
'<code>ssh-rsa AAAAB...QtQ== john</code>.'
),
validators
=
[
OpenSshKeyValidator
()])
validators
=
[
OpenSshKeyValidator
()])
def
__unicode__
(
self
):
def
__unicode__
(
self
):
...
@@ -174,19 +174,18 @@ TYPES_C = tuple([(i[0], i[1]["verbose_name"]) for i in TYPES.items()])
...
@@ -174,19 +174,18 @@ TYPES_C = tuple([(i[0], i[1]["verbose_name"]) for i in TYPES.items()])
class
Share
(
models
.
Model
):
class
Share
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
100
,
verbose_name
=
_
(
'name'
))
name
=
models
.
CharField
(
max_length
=
100
,
verbose_name
=
_
(
'name'
))
description
=
models
.
TextField
(
verbose_name
=
_
(
'description'
))
description
=
models
.
TextField
(
verbose_name
=
_
(
'description'
))
template
=
models
.
ForeignKey
(
'Template'
,
null
=
False
,
blank
=
False
)
template
=
models
.
ForeignKey
(
'Template'
,
related_name
=
'share_set'
)
group
=
models
.
ForeignKey
(
Group
,
null
=
False
,
blank
=
False
)
group
=
models
.
ForeignKey
(
Group
,
related_name
=
'share_set'
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
_
(
'created at'
))
verbose_name
=
_
(
'created at'
))
type
=
models
.
CharField
(
choices
=
TYPES_C
,
max_length
=
10
,
blank
=
False
,
type
=
models
.
CharField
(
choices
=
TYPES_C
,
max_length
=
10
)
null
=
False
)
instance_limit
=
models
.
IntegerField
(
verbose_name
=
_
(
'instance limit'
),
instance_limit
=
models
.
IntegerField
(
verbose_name
=
_
(
'instance limit'
),
help_text
=
_
(
'Maximal count of instances launchable for this '
help_text
=
_
(
'Maximal count of instances launchable for this '
'share.'
))
'share.'
))
per_user_limit
=
models
.
IntegerField
(
verbose_name
=
_
(
'per user limit'
),
per_user_limit
=
models
.
IntegerField
(
verbose_name
=
_
(
'per user limit'
),
help_text
=
_
(
'Maximal count of instances launchable by a single '
help_text
=
_
(
'Maximal count of instances launchable by a single '
'user.'
))
'user.'
))
owner
=
models
.
ForeignKey
(
User
,
null
=
True
,
blank
=
True
)
owner
=
models
.
ForeignKey
(
User
,
null
=
True
,
blank
=
True
,
related_name
=
'share_set'
)
def
get_type
(
self
):
def
get_type
(
self
):
t
=
TYPES
[
self
.
type
]
t
=
TYPES
[
self
.
type
]
...
@@ -218,8 +217,14 @@ class Disk(models.Model):
...
@@ -218,8 +217,14 @@ class Disk(models.Model):
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
verbose_name
=
_
(
'name'
))
verbose_name
=
_
(
'name'
))
@classmethod
class
Meta
:
def
update
(
cls
):
ordering
=
[
'name'
]
def
__unicode__
(
self
):
return
u"
%
s (#
%
d)"
%
(
self
.
name
,
self
.
id
)
@staticmethod
def
update
():
"""Get and register virtual disks from OpenNebula."""
"""Get and register virtual disks from OpenNebula."""
import
subprocess
import
subprocess
proc
=
subprocess
.
Popen
([
"/opt/occi.sh"
,
"storage"
,
"list"
],
proc
=
subprocess
.
Popen
([
"/opt/occi.sh"
,
"storage"
,
"list"
],
...
@@ -241,12 +246,6 @@ class Disk(models.Model):
...
@@ -241,12 +246,6 @@ class Disk(models.Model):
l
.
append
(
id
)
l
.
append
(
id
)
Disk
.
objects
.
exclude
(
id__in
=
l
)
.
delete
()
Disk
.
objects
.
exclude
(
id__in
=
l
)
.
delete
()
def
__unicode__
(
self
):
return
u"
%
s (#
%
d)"
%
(
self
.
name
,
self
.
id
)
class
Meta
:
ordering
=
[
'name'
]
class
Network
(
models
.
Model
):
class
Network
(
models
.
Model
):
"""Virtual networks automatically synchronized with OpenNebula."""
"""Virtual networks automatically synchronized with OpenNebula."""
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
...
@@ -256,8 +255,14 @@ class Network(models.Model):
...
@@ -256,8 +255,14 @@ class Network(models.Model):
public
=
models
.
BooleanField
(
verbose_name
=
_
(
'public'
),
public
=
models
.
BooleanField
(
verbose_name
=
_
(
'public'
),
help_text
=
_
(
'If internet gateway is available.'
))
help_text
=
_
(
'If internet gateway is available.'
))
@classmethod
class
Meta
:
def
update
(
cls
):
ordering
=
[
'name'
]
def
__unicode__
(
self
):
return
self
.
name
@staticmethod
def
update
():
"""Get and register virtual networks from OpenNebula."""
"""Get and register virtual networks from OpenNebula."""
import
subprocess
import
subprocess
proc
=
subprocess
.
Popen
([
"/opt/occi.sh"
,
"network"
,
"list"
],
proc
=
subprocess
.
Popen
([
"/opt/occi.sh"
,
"network"
,
"list"
],
...
@@ -279,10 +284,6 @@ class Network(models.Model):
...
@@ -279,10 +284,6 @@ class Network(models.Model):
l
.
append
(
id
)
l
.
append
(
id
)
cls
.
objects
.
exclude
(
id__in
=
l
)
.
delete
()
cls
.
objects
.
exclude
(
id__in
=
l
)
.
delete
()
def
__unicode__
(
self
):
return
self
.
name
class
Meta
:
ordering
=
[
'name'
]
class
InstanceType
(
models
.
Model
):
class
InstanceType
(
models
.
Model
):
"""Instance types in OCCI configuration (manually synchronized)."""
"""Instance types in OCCI configuration (manually synchronized)."""
...
@@ -292,11 +293,13 @@ class InstanceType(models.Model):
...
@@ -292,11 +293,13 @@ class InstanceType(models.Model):
RAM
=
models
.
IntegerField
(
help_text
=
_
(
'Mebibytes of memory.'
))
RAM
=
models
.
IntegerField
(
help_text
=
_
(
'Mebibytes of memory.'
))
credit
=
models
.
IntegerField
(
verbose_name
=
_
(
'credits'
),
credit
=
models
.
IntegerField
(
verbose_name
=
_
(
'credits'
),
help_text
=
_
(
'Price of instance.'
))
help_text
=
_
(
'Price of instance.'
))
def
__unicode__
(
self
):
return
u"
%
s"
%
self
.
name
class
Meta
:
class
Meta
:
ordering
=
[
'credit'
]
ordering
=
[
'credit'
]
def
__unicode__
(
self
):
return
u"
%
s"
%
self
.
name
TEMPLATE_STATES
=
((
'NEW'
,
_
(
'new'
)),
(
'SAVING'
,
_
(
'saving'
)),
TEMPLATE_STATES
=
((
'NEW'
,
_
(
'new'
)),
(
'SAVING'
,
_
(
'saving'
)),
(
'READY'
,
_
(
'ready'
)),
)
(
'READY'
,
_
(
'ready'
)),
)
class
Template
(
models
.
Model
):
class
Template
(
models
.
Model
):
...
@@ -306,11 +309,13 @@ class Template(models.Model):
...
@@ -306,11 +309,13 @@ class Template(models.Model):
access_type
=
models
.
CharField
(
max_length
=
10
,
access_type
=
models
.
CharField
(
max_length
=
10
,
choices
=
[(
'rdp'
,
'rdp'
),
(
'nx'
,
'nx'
),
(
'ssh'
,
'ssh'
)],
choices
=
[(
'rdp'
,
'rdp'
),
(
'nx'
,
'nx'
),
(
'ssh'
,
'ssh'
)],
verbose_name
=
_
(
'access method'
))
verbose_name
=
_
(
'access method'
))
disk
=
models
.
ForeignKey
(
Disk
,
verbose_name
=
_
(
'disk'
))
disk
=
models
.
ForeignKey
(
Disk
,
verbose_name
=
_
(
'disk'
)
,
related_name
=
'template_set'
)
instance_type
=
models
.
ForeignKey
(
InstanceType
,
instance_type
=
models
.
ForeignKey
(
InstanceType
,
related_name
=
'template_set'
,
verbose_name
=
_
(
'instance type'
))
verbose_name
=
_
(
'instance type'
))
network
=
models
.
ForeignKey
(
Network
,
verbose_name
=
_
(
'network'
))
network
=
models
.
ForeignKey
(
Network
,
verbose_name
=
_
(
'network'
),
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
))
related_name
=
'template_set'
)
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
),
related_name
=
'template_set'
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
_
(
'created at'
))
verbose_name
=
_
(
'created at'
))
state
=
models
.
CharField
(
max_length
=
10
,
choices
=
TEMPLATE_STATES
,
state
=
models
.
CharField
(
max_length
=
10
,
choices
=
TEMPLATE_STATES
,
...
@@ -322,17 +327,23 @@ class Template(models.Model):
...
@@ -322,17 +327,23 @@ class Template(models.Model):
help_text
=
(
_
(
'Name of operating system in format like "
%
s".'
)
%
help_text
=
(
_
(
'Name of operating system in format like "
%
s".'
)
%
"Ubuntu 12.04 LTS Desktop amd64"
))
"Ubuntu 12.04 LTS Desktop amd64"
))
class
Meta
:
verbose_name
=
_
(
'template'
)
verbose_name_plural
=
_
(
'templates'
)
def
__unicode__
(
self
):
return
self
.
name
def
running_instances
(
self
):
def
running_instances
(
self
):
return
self
.
instance_set
.
exclude
(
state
=
'DONE'
)
.
count
()
return
self
.
instance_set
.
exclude
(
state
=
'DONE'
)
.
count
()
@property
def
os_type
(
self
):
def
os_type
(
self
):
if
self
.
access_type
==
'rdp'
:
if
self
.
access_type
==
'rdp'
:
return
"win"
return
"win"
else
:
else
:
return
"linux"
return
"linux"
def
__unicode__
(
self
):
return
self
.
name
@transaction.commit_on_success
@transaction.commit_on_success
def
safe_delete
(
self
):
def
safe_delete
(
self
):
if
not
self
.
instance_set
.
exclude
(
state
=
'DONE'
)
.
exists
():
if
not
self
.
instance_set
.
exclude
(
state
=
'DONE'
)
.
exists
():
...
@@ -342,18 +353,16 @@ class Template(models.Model):
...
@@ -342,18 +353,16 @@ class Template(models.Model):
logger
.
info
(
"Could not delete template. Instances still running!"
)
logger
.
info
(
"Could not delete template. Instances still running!"
)
return
False
return
False
class
Meta
:
verbose_name
=
_
(
'template'
)
verbose_name_plural
=
_
(
'templates'
)
class
Instance
(
models
.
Model
):
class
Instance
(
models
.
Model
):
"""Virtual machine instance."""
"""Virtual machine instance."""
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
verbose_name
=
_
(
'name'
),
null
=
True
,
blank
=
True
)
verbose_name
=
_
(
'name'
),
blank
=
True
)
ip
=
models
.
IPAddressField
(
blank
=
True
,
null
=
True
,
ip
=
models
.
IPAddressField
(
blank
=
True
,
null
=
True
,
verbose_name
=
_
(
'IP address'
))
verbose_name
=
_
(
'IP address'
))
template
=
models
.
ForeignKey
(
Template
,
verbose_name
=
_
(
'template'
))
template
=
models
.
ForeignKey
(
Template
,
verbose_name
=
_
(
'template'
),
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
))
related_name
=
'instance_set'
)
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
),
related_name
=
'instance_set'
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
_
(
'created at'
))
verbose_name
=
_
(
'created at'
))
state
=
models
.
CharField
(
max_length
=
20
,
state
=
models
.
CharField
(
max_length
=
20
,
...
@@ -369,18 +378,30 @@ class Instance(models.Model):
...
@@ -369,18 +378,30 @@ class Instance(models.Model):
verbose_name
=
_
(
'active since'
),
verbose_name
=
_
(
'active since'
),
help_text
=
_
(
'Time stamp of successful boot report.'
))
help_text
=
_
(
'Time stamp of successful boot report.'
))
firewall_host
=
models
.
ForeignKey
(
Host
,
blank
=
True
,
null
=
True
,
firewall_host
=
models
.
ForeignKey
(
Host
,
blank
=
True
,
null
=
True
,
verbose_name
=
_
(
'host in firewall'
))
verbose_name
=
_
(
'host in firewall'
)
,
related_name
=
'instance_set'
)
pw
=
models
.
CharField
(
max_length
=
20
,
verbose_name
=
_
(
'password'
),
pw
=
models
.
CharField
(
max_length
=
20
,
verbose_name
=
_
(
'password'
),
help_text
=
_
(
'Original password of instance'
))
help_text
=
_
(
'Original password of instance'
))
one_id
=
models
.
IntegerField
(
unique
=
True
,
blank
=
True
,
null
=
True
,
one_id
=
models
.
IntegerField
(
unique
=
True
,
blank
=
True
,
null
=
True
,
verbose_name
=
_
(
'OpenNebula ID'
))
verbose_name
=
_
(
'OpenNebula ID'
))
share
=
models
.
ForeignKey
(
'Share'
,
blank
=
True
,
null
=
True
,
share
=
models
.
ForeignKey
(
'Share'
,
blank
=
True
,
null
=
True
,
verbose_name
=
_
(
'share'
))
verbose_name
=
_
(
'share'
)
,
related_name
=
'instance_set'
)
time_of_suspend
=
models
.
DateTimeField
(
default
=
None
,
time_of_suspend
=
models
.
DateTimeField
(
default
=
None
,
verbose_name
=
_
(
'time of suspend'
),
null
=
True
,
blank
=
Fals
e
)
verbose_name
=
_
(
'time of suspend'
),
null
=
True
,
blank
=
Tru
e
)
time_of_delete
=
models
.
DateTimeField
(
default
=
None
,
time_of_delete
=
models
.
DateTimeField
(
default
=
None
,
verbose_name
=
_
(
'time of delete'
),
null
=
True
,
blank
=
Fals
e
)
verbose_name
=
_
(
'time of delete'
),
null
=
True
,
blank
=
Tru
e
)
waiting
=
models
.
BooleanField
(
default
=
False
)
waiting
=
models
.
BooleanField
(
default
=
False
)
class
Meta
:
verbose_name
=
_
(
'instance'
)
verbose_name_plural
=
_
(
'instances'
)
def
__unicode__
(
self
):
return
self
.
name
@models.permalink
def
get_absolute_url
(
self
):
return
(
'vm_show'
,
None
,
{
'iid'
:
self
.
id
})
def
get_port
(
self
):
def
get_port
(
self
):
"""Get public port number for default access method."""
"""Get public port number for default access method."""
proto
=
self
.
template
.
access_type
proto
=
self
.
template
.
access_type
...
@@ -410,9 +431,6 @@ class Instance(models.Model):
...
@@ -410,9 +431,6 @@ class Instance(models.Model):
except
:
except
:
return
return
def
__unicode__
(
self
):
return
self
.
name
def
update_state
(
self
):
def
update_state
(
self
):
"""Get and update VM state from OpenNebula."""
"""Get and update VM state from OpenNebula."""
import
subprocess
import
subprocess
...
@@ -451,10 +469,6 @@ class Instance(models.Model):
...
@@ -451,10 +469,6 @@ class Instance(models.Model):
pass
pass
return
age
return
age
@models.permalink
def
get_absolute_url
(
self
):
return
(
'vm_show'
,
None
,
{
'iid'
:
self
.
id
})
@classmethod
@classmethod
def
submit
(
cls
,
template
,
owner
,
extra
=
""
,
share
=
None
):
def
submit
(
cls
,
template
,
owner
,
extra
=
""
,
share
=
None
):
"""Submit a new instance to OpenNebula."""
"""Submit a new instance to OpenNebula."""
...
@@ -466,7 +480,7 @@ class Instance(models.Model):
...
@@ -466,7 +480,7 @@ class Instance(models.Model):
os
.
chmod
(
f
.
name
,
stat
.
S_IRUSR
|
stat
.
S_IWUSR
|
stat
.
S_IRGRP
|
stat
.
S_IROTH
)
os
.
chmod
(
f
.
name
,
stat
.
S_IRUSR
|
stat
.
S_IWUSR
|
stat
.
S_IRGRP
|
stat
.
S_IROTH
)
token
=
signing
.
dumps
(
inst
.
id
,
salt
=
'activate'
)
token
=
signing
.
dumps
(
inst
.
id
,
salt
=
'activate'
)
try
:
try
:
details
=
owner
.
userclouddetails_set
.
all
()[
0
]
details
=
owner
.
cloud_details
except
:
except
:
details
=
UserCloudDetails
(
user
=
owner
)
details
=
UserCloudDetails
(
user
=
owner
)
details
.
save
()
details
.
save
()
...
@@ -608,6 +622,7 @@ class Instance(models.Model):
...
@@ -608,6 +622,7 @@ class Instance(models.Model):
t
=
self
.
template
t
=
self
.
template
t
.
state
=
'SAVING'
t
.
state
=
'SAVING'
t
.
save
()
t
.
save
()
def
check_if_is_save_as_done
(
self
):
def
check_if_is_save_as_done
(
self
):
if
self
.
state
!=
'DONE'
:
if
self
.
state
!=
'DONE'
:
return
False
return
False
...
@@ -615,18 +630,13 @@ class Instance(models.Model):
...
@@ -615,18 +630,13 @@ class Instance(models.Model):
imgname
=
"template-
%
d-
%
d"
%
(
self
.
template
.
id
,
self
.
id
)
imgname
=
"template-
%
d-
%
d"
%
(
self
.
template
.
id
,
self
.
id
)
disks
=
Disk
.
objects
.
filter
(
name
=
imgname
)
disks
=
Disk
.
objects
.
filter
(
name
=
imgname
)
if
len
(
disks
)
!=
1
:
if
len
(
disks
)
!=
1
:
return
f
alse
return
F
alse
self
.
template
.
disk_id
=
disks
[
0
]
.
id
self
.
template
.
disk_id
=
disks
[
0
]
.
id
self
.
template
.
state
=
'READY'
self
.
template
.
state
=
'READY'
self
.
template
.
save
()
self
.
template
.
save
()
self
.
firewall_host_delete
()
self
.
firewall_host_delete
()
return
True
return
True
class
Meta
:
verbose_name
=
_
(
'instance'
)
verbose_name_plural
=
_
(
'instances'
)
def
delete_instance
(
sender
,
instance
,
using
,
**
kwargs
):
def
delete_instance
(
sender
,
instance
,
using
,
**
kwargs
):
if
instance
.
state
!=
"DONE"
:
if
instance
.
state
!=
"DONE"
:
instance
.
one_delete
()
instance
.
one_delete
()
...
...
store/views.py
View file @
aca6c74c
...
@@ -13,7 +13,7 @@ import base64
...
@@ -13,7 +13,7 @@ import base64
def
estabilish_store_user
(
request
,
user
):
def
estabilish_store_user
(
request
,
user
):
try
:
try
:
details
=
request
.
user
.
userclouddetails_set
.
all
()[
0
]
details
=
request
.
user
.
cloud_details
password
=
details
.
smb_password
password
=
details
.
smb_password
quota
=
details
.
disk_quota
*
1024
quota
=
details
.
disk_quota
*
1024
key_list
=
[]
key_list
=
[]
...
@@ -34,7 +34,7 @@ def index(request):
...
@@ -34,7 +34,7 @@ def index(request):
try
:
try
:
auth
=
request
.
POST
[
'auth'
]
auth
=
request
.
POST
[
'auth'
]
try
:
try
:
details
=
request
.
user
.
userclouddetails_set
.
all
()[
0
]
details
=
request
.
user
.
cloud_details
password
=
details
.
smb_password
password
=
details
.
smb_password
key_list
=
[]
key_list
=
[]
for
key
in
request
.
user
.
sshkey_set
.
all
():
for
key
in
request
.
user
.
sshkey_set
.
all
():
...
@@ -182,7 +182,7 @@ def gui(request):
...
@@ -182,7 +182,7 @@ def gui(request):
return
render_to_response
(
'store/gui.html'
,
RequestContext
(
request
,
{
'username'
:
user
,
'host'
:
StoreApi
.
get_host
()}))
return
render_to_response
(
'store/gui.html'
,
RequestContext
(
request
,
{
'username'
:
user
,
'host'
:
StoreApi
.
get_host
()}))
elif
request
.
method
==
'POST'
:
elif
request
.
method
==
'POST'
:
try
:
try
:
details
=
request
.
user
.
userclouddetails_set
.
all
()[
0
]
details
=
request
.
user
.
cloud_details
password
=
details
.
smb_password
password
=
details
.
smb_password
key_list
=
[]
key_list
=
[]
for
key
in
request
.
user
.
sshkey_set
.
all
():
for
key
in
request
.
user
.
sshkey_set
.
all
():
...
...
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