Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Gelencsér Szabolcs
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
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
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.core.exceptions
import
ValidationError
from
django.core
import
signing
from
django.db
import
models
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
import
forms
from
django.utils.translation
import
ugettext_lazy
as
_
from
firewall.models
import
Host
,
Rule
,
Vlan
from
one.util
import
keygen
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
django.db
import
transaction
from
datetime
import
datetime
import
logging
import
subprocess
,
tempfile
,
os
,
stat
,
re
,
base64
,
struct
from
.util
import
keygen
logger
=
logging
.
getLogger
(
__name__
)
pwgen
=
User
.
objects
.
make_random_password
...
...
@@ -33,19 +33,19 @@ post_save.connect(create_user_profile, sender=User)
class
UserCloudDetails
(
models
.
Model
):
"""Cloud related details of a user."""
user
=
models
.
ForeignKey
(
User
,
null
=
False
,
blank
=
False
,
unique
=
True
,
verbose_name
=
_
(
'user'
)
)
user
=
models
.
OneToOneField
(
User
,
verbose_name
=
_
(
'user'
)
,
related_name
=
'cloud_details'
)
smb_password
=
models
.
CharField
(
max_length
=
20
,
verbose_name
=
_
(
'Samba password'
),
help_text
=
_
(
'Generated password for accessing store from '
'Windows.'
))
ssh_key
=
models
.
ForeignKey
(
'SshKey'
,
null
=
True
,
verbose_name
=
_
(
'SSH key (public)'
)
,
ssh_key
=
models
.
ForeignKey
(
'SshKey'
,
verbose_name
=
_
(
'SSH key (public)'
)
,
null
=
True
,
blank
=
True
,
related_name
=
'userclouddetails_set'
,
help_text
=
_
(
'Generated SSH public key for accessing store from '
'Linux.'
))
'Linux.'
))
ssh_private_key
=
models
.
TextField
(
verbose_name
=
_
(
'SSH key (private)'
),
null
=
True
,
help_text
=
_
(
'Generated SSH private key for '
'accessing store from Linux.'
))
blank
=
True
,
help_text
=
_
(
'Generated SSH private key for '
'accessing store from Linux.'
))
share_quota
=
models
.
IntegerField
(
verbose_name
=
_
(
'share quota'
),
default
=
0
)
instance_quota
=
models
.
IntegerField
(
verbose_name
=
_
(
'instance quota'
),
...
...
@@ -139,12 +139,12 @@ class OpenSshKeyValidator(object):
class
SshKey
(
models
.
Model
):
"""SSH public key (in OpenSSH format)."""
user
=
models
.
ForeignKey
(
User
,
null
=
False
,
blank
=
False
)
key
=
models
.
CharField
(
max_length
=
2000
,
verbose_name
=
_
(
'SSH key'
),
user
=
models
.
ForeignKey
(
User
,
related_name
=
'sshkey_set'
)
key
=
models
.
TextField
(
verbose_name
=
_
(
'SSH key'
),
help_text
=
_
(
'<a href="/info/ssh/">SSH public key in OpenSSH '
'format</a> used for shell and store login '
'(2048+ bit RSA preferred). Example: '
'<code>ssh-rsa AAAAB...QtQ== john</code>.'
),
'format</a> used for shell and store login '
'(2048+ bit RSA preferred). Example: '
'<code>ssh-rsa AAAAB...QtQ== john</code>.'
),
validators
=
[
OpenSshKeyValidator
()])
def
__unicode__
(
self
):
...
...
@@ -174,19 +174,18 @@ TYPES_C = tuple([(i[0], i[1]["verbose_name"]) for i in TYPES.items()])
class
Share
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
100
,
verbose_name
=
_
(
'name'
))
description
=
models
.
TextField
(
verbose_name
=
_
(
'description'
))
template
=
models
.
ForeignKey
(
'Template'
,
null
=
False
,
blank
=
False
)
group
=
models
.
ForeignKey
(
Group
,
null
=
False
,
blank
=
False
)
template
=
models
.
ForeignKey
(
'Template'
,
related_name
=
'share_set'
)
group
=
models
.
ForeignKey
(
Group
,
related_name
=
'share_set'
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
_
(
'created at'
))
type
=
models
.
CharField
(
choices
=
TYPES_C
,
max_length
=
10
,
blank
=
False
,
null
=
False
)
type
=
models
.
CharField
(
choices
=
TYPES_C
,
max_length
=
10
)
instance_limit
=
models
.
IntegerField
(
verbose_name
=
_
(
'instance limit'
),
help_text
=
_
(
'Maximal count of instances launchable for this '
'share.'
))
per_user_limit
=
models
.
IntegerField
(
verbose_name
=
_
(
'per user limit'
),
help_text
=
_
(
'Maximal count of instances launchable by a single '
'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
):
t
=
TYPES
[
self
.
type
]
...
...
@@ -218,8 +217,14 @@ class Disk(models.Model):
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
verbose_name
=
_
(
'name'
))
@classmethod
def
update
(
cls
):
class
Meta
:
ordering
=
[
'name'
]
def
__unicode__
(
self
):
return
u"
%
s (#
%
d)"
%
(
self
.
name
,
self
.
id
)
@staticmethod
def
update
():
"""Get and register virtual disks from OpenNebula."""
import
subprocess
proc
=
subprocess
.
Popen
([
"/opt/occi.sh"
,
"storage"
,
"list"
],
...
...
@@ -241,12 +246,6 @@ class Disk(models.Model):
l
.
append
(
id
)
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
):
"""Virtual networks automatically synchronized with OpenNebula."""
name
=
models
.
CharField
(
max_length
=
100
,
unique
=
True
,
...
...
@@ -256,8 +255,14 @@ class Network(models.Model):
public
=
models
.
BooleanField
(
verbose_name
=
_
(
'public'
),
help_text
=
_
(
'If internet gateway is available.'
))
@classmethod
def
update
(
cls
):
class
Meta
:
ordering
=
[
'name'
]
def
__unicode__
(
self
):
return
self
.
name
@staticmethod
def
update
():
"""Get and register virtual networks from OpenNebula."""
import
subprocess
proc
=
subprocess
.
Popen
([
"/opt/occi.sh"
,
"network"
,
"list"
],
...
...
@@ -279,10 +284,6 @@ class Network(models.Model):
l
.
append
(
id
)
cls
.
objects
.
exclude
(
id__in
=
l
)
.
delete
()
def
__unicode__
(
self
):
return
self
.
name
class
Meta
:
ordering
=
[
'name'
]
class
InstanceType
(
models
.
Model
):
"""Instance types in OCCI configuration (manually synchronized)."""
...
...
@@ -292,11 +293,13 @@ class InstanceType(models.Model):
RAM
=
models
.
IntegerField
(
help_text
=
_
(
'Mebibytes of memory.'
))
credit
=
models
.
IntegerField
(
verbose_name
=
_
(
'credits'
),
help_text
=
_
(
'Price of instance.'
))
def
__unicode__
(
self
):
return
u"
%
s"
%
self
.
name
class
Meta
:
ordering
=
[
'credit'
]
def
__unicode__
(
self
):
return
u"
%
s"
%
self
.
name
TEMPLATE_STATES
=
((
'NEW'
,
_
(
'new'
)),
(
'SAVING'
,
_
(
'saving'
)),
(
'READY'
,
_
(
'ready'
)),
)
class
Template
(
models
.
Model
):
...
...
@@ -306,11 +309,13 @@ class Template(models.Model):
access_type
=
models
.
CharField
(
max_length
=
10
,
choices
=
[(
'rdp'
,
'rdp'
),
(
'nx'
,
'nx'
),
(
'ssh'
,
'ssh'
)],
verbose_name
=
_
(
'access method'
))
disk
=
models
.
ForeignKey
(
Disk
,
verbose_name
=
_
(
'disk'
))
instance_type
=
models
.
ForeignKey
(
InstanceType
,
disk
=
models
.
ForeignKey
(
Disk
,
verbose_name
=
_
(
'disk'
)
,
related_name
=
'template_set'
)
instance_type
=
models
.
ForeignKey
(
InstanceType
,
related_name
=
'template_set'
,
verbose_name
=
_
(
'instance type'
))
network
=
models
.
ForeignKey
(
Network
,
verbose_name
=
_
(
'network'
))
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
))
network
=
models
.
ForeignKey
(
Network
,
verbose_name
=
_
(
'network'
),
related_name
=
'template_set'
)
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
),
related_name
=
'template_set'
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
_
(
'created at'
))
state
=
models
.
CharField
(
max_length
=
10
,
choices
=
TEMPLATE_STATES
,
...
...
@@ -322,17 +327,23 @@ class Template(models.Model):
help_text
=
(
_
(
'Name of operating system in format like "
%
s".'
)
%
"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
):
return
self
.
instance_set
.
exclude
(
state
=
'DONE'
)
.
count
()
@property
def
os_type
(
self
):
if
self
.
access_type
==
'rdp'
:
return
"win"
else
:
return
"linux"
def
__unicode__
(
self
):
return
self
.
name
@transaction.commit_on_success
def
safe_delete
(
self
):
if
not
self
.
instance_set
.
exclude
(
state
=
'DONE'
)
.
exists
():
...
...
@@ -342,18 +353,16 @@ class Template(models.Model):
logger
.
info
(
"Could not delete template. Instances still running!"
)
return
False
class
Meta
:
verbose_name
=
_
(
'template'
)
verbose_name_plural
=
_
(
'templates'
)
class
Instance
(
models
.
Model
):
"""Virtual machine instance."""
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
,
verbose_name
=
_
(
'IP address'
))
template
=
models
.
ForeignKey
(
Template
,
verbose_name
=
_
(
'template'
))
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
))
template
=
models
.
ForeignKey
(
Template
,
verbose_name
=
_
(
'template'
),
related_name
=
'instance_set'
)
owner
=
models
.
ForeignKey
(
User
,
verbose_name
=
_
(
'owner'
),
related_name
=
'instance_set'
)
created_at
=
models
.
DateTimeField
(
auto_now_add
=
True
,
verbose_name
=
_
(
'created at'
))
state
=
models
.
CharField
(
max_length
=
20
,
...
...
@@ -369,18 +378,30 @@ class Instance(models.Model):
verbose_name
=
_
(
'active since'
),
help_text
=
_
(
'Time stamp of successful boot report.'
))
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'
),
help_text
=
_
(
'Original password of instance'
))
one_id
=
models
.
IntegerField
(
unique
=
True
,
blank
=
True
,
null
=
True
,
verbose_name
=
_
(
'OpenNebula ID'
))
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
,
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
,
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
)
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
):
"""Get public port number for default access method."""
proto
=
self
.
template
.
access_type
...
...
@@ -410,9 +431,6 @@ class Instance(models.Model):
except
:
return
def
__unicode__
(
self
):
return
self
.
name
def
update_state
(
self
):
"""Get and update VM state from OpenNebula."""
import
subprocess
...
...
@@ -451,10 +469,6 @@ class Instance(models.Model):
pass
return
age
@models.permalink
def
get_absolute_url
(
self
):
return
(
'vm_show'
,
None
,
{
'iid'
:
self
.
id
})
@classmethod
def
submit
(
cls
,
template
,
owner
,
extra
=
""
,
share
=
None
):
"""Submit a new instance to OpenNebula."""
...
...
@@ -466,7 +480,7 @@ class Instance(models.Model):
os
.
chmod
(
f
.
name
,
stat
.
S_IRUSR
|
stat
.
S_IWUSR
|
stat
.
S_IRGRP
|
stat
.
S_IROTH
)
token
=
signing
.
dumps
(
inst
.
id
,
salt
=
'activate'
)
try
:
details
=
owner
.
userclouddetails_set
.
all
()[
0
]
details
=
owner
.
cloud_details
except
:
details
=
UserCloudDetails
(
user
=
owner
)
details
.
save
()
...
...
@@ -608,6 +622,7 @@ class Instance(models.Model):
t
=
self
.
template
t
.
state
=
'SAVING'
t
.
save
()
def
check_if_is_save_as_done
(
self
):
if
self
.
state
!=
'DONE'
:
return
False
...
...
@@ -615,18 +630,13 @@ class Instance(models.Model):
imgname
=
"template-
%
d-
%
d"
%
(
self
.
template
.
id
,
self
.
id
)
disks
=
Disk
.
objects
.
filter
(
name
=
imgname
)
if
len
(
disks
)
!=
1
:
return
f
alse
return
F
alse
self
.
template
.
disk_id
=
disks
[
0
]
.
id
self
.
template
.
state
=
'READY'
self
.
template
.
save
()
self
.
firewall_host_delete
()
return
True
class
Meta
:
verbose_name
=
_
(
'instance'
)
verbose_name_plural
=
_
(
'instances'
)
def
delete_instance
(
sender
,
instance
,
using
,
**
kwargs
):
if
instance
.
state
!=
"DONE"
:
instance
.
one_delete
()
...
...
store/views.py
View file @
aca6c74c
...
...
@@ -13,7 +13,7 @@ import base64
def
estabilish_store_user
(
request
,
user
):
try
:
details
=
request
.
user
.
userclouddetails_set
.
all
()[
0
]
details
=
request
.
user
.
cloud_details
password
=
details
.
smb_password
quota
=
details
.
disk_quota
*
1024
key_list
=
[]
...
...
@@ -34,7 +34,7 @@ def index(request):
try
:
auth
=
request
.
POST
[
'auth'
]
try
:
details
=
request
.
user
.
userclouddetails_set
.
all
()[
0
]
details
=
request
.
user
.
cloud_details
password
=
details
.
smb_password
key_list
=
[]
for
key
in
request
.
user
.
sshkey_set
.
all
():
...
...
@@ -182,7 +182,7 @@ def gui(request):
return
render_to_response
(
'store/gui.html'
,
RequestContext
(
request
,
{
'username'
:
user
,
'host'
:
StoreApi
.
get_host
()}))
elif
request
.
method
==
'POST'
:
try
:
details
=
request
.
user
.
userclouddetails_set
.
all
()[
0
]
details
=
request
.
user
.
cloud_details
password
=
details
.
smb_password
key_list
=
[]
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