Added created field to all of the objects

- added --timestamps switch to list command

DocImpact: stackforge/fuel-devops - New switch required for job cleaner
to work, this is required to fully track object creation time, adds
switch --timestamps to shell command, no policy modifications.
Partial-Bug: #1415024
Change-Id: I3485d97666a866277a48a76ba17105ae6a289aee
This commit is contained in:
Pawel Brzozowski 2015-02-13 10:54:00 +01:00
parent ca54e5d667
commit 11dc6953a7
3 changed files with 197 additions and 2 deletions

View File

@ -0,0 +1,185 @@
# -*- coding: utf-8 -*-
# flake8: noqa
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'Environment.created'
db.add_column('devops_environment', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
# Adding field 'Node.created'
db.add_column('devops_node', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
# Adding field 'Volume.created'
db.add_column('devops_volume', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
# Adding field 'Network.created'
db.add_column('devops_network', 'created',
self.gf('django.db.models.fields.DateTimeField')(
default=datetime.datetime.utcnow,
auto_now_add=True, blank=True), keep_default=False)
def backwards(self, orm):
# Deleting field 'Environment.created'
db.delete_column('devops_environment', 'created')
# Deleting field 'Node.created'
db.delete_column('devops_node', 'created')
# Deleting field 'Volume.created'
db.delete_column('devops_volume', 'created')
# Deleting field 'Network.created'
db.delete_column('devops_network', 'created')
models = {
u'devops.address': {
'Meta': {'object_name': 'Address'},
u'id': (
'django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'interface': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Interface']"}),
'ip_address': ('django.db.models.fields.GenericIPAddressField', [],
{'max_length': '39'})
},
u'devops.diskdevice': {
'Meta': {'object_name': 'DiskDevice'},
'bus': ('django.db.models.fields.CharField',
[], {'max_length': '255'}
),
'device': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Node']"}),
'target_dev': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'type': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'volume': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Volume']", 'null': 'True'})
},
u'devops.environment': {
'Meta': {'object_name': 'Environment'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'})
},
u'devops.interface': {
'Meta': {'object_name': 'Interface'},
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'mac_address': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'model': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'network': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Network']"}),
'node': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Node']"}),
'type': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
u'devops.network': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Network'},
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'forward': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'has_dhcp_server': ('django.db.models.fields.BooleanField', [],
{}),
'has_pxe_server': ('django.db.models.fields.BooleanField', [], {}),
'has_reserved_ips': ('django.db.models.fields.BooleanField', [],
{'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'ip_network': ('django.db.models.fields.CharField', [],
{'unique': 'True', 'max_length': '255'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'tftp_root_dir': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'uuid': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
},
u'devops.node': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Node'},
'architecture': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'boot': ('django.db.models.fields.CharField', [],
{'default': "'[]'", 'max_length': '255'}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'has_vnc': ('django.db.models.fields.BooleanField', [],
{'default': 'True'}),
'hypervisor': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'memory': ('django.db.models.fields.IntegerField', [],
{'default': '1024'}),
'metadata': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'os_type': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'role': ('django.db.models.fields.CharField', [],
{'max_length': '255', 'null': 'True'}),
'uuid': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'vcpu': ('django.db.models.fields.PositiveSmallIntegerField', [],
{'default': '1'})
},
u'devops.volume': {
'Meta': {'unique_together': "(('name', 'environment'),)",
'object_name': 'Volume'},
'backing_store': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Volume']", 'null': 'True'}),
'capacity': ('django.db.models.fields.BigIntegerField', [], {}),
'created': ('django.db.models.fields.DateTimeField', [],
{'default': 'datetime.datetime.utcnow',
'auto_now_add': 'True', 'blank': 'True'}),
'environment': ('django.db.models.fields.related.ForeignKey', [],
{'to': u"orm['devops.Environment']",
'null': 'True'}),
'format': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
u'id': ('django.db.models.fields.AutoField', [],
{'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [],
{'max_length': '255'}),
'uuid': ('django.db.models.fields.CharField', [],
{'max_length': '255'})
}
}
complete_apps = ['devops']

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
import json
from django.conf import settings
@ -41,6 +42,7 @@ def double_tuple(*args):
class DriverModel(models.Model):
_driver = None
created = models.DateTimeField(auto_now_add=True, default=datetime.utcnow)
class Meta:
abstract = True

View File

@ -32,7 +32,7 @@ class Shell(object):
self.commands.get(self.params.command)(self)
def do_list(self):
env_list = self.manager.environment_list().values('name')
env_list = self.manager.environment_list().values('name', 'created')
for env in env_list:
if self.params.list_ips:
cur_env = self.manager.environment_get(env['name'])
@ -41,6 +41,9 @@ class Shell(object):
admin_ip = (cur_env.node_by_name('admin').
get_ip_address_by_network_name('admin'))
print('{0}\t{1}'.format(env['name'], admin_ip))
elif self.params.timestamps:
created_text = env['created'].strftime('%Y-%m-%d_%H:%M:%S')
print('{0} {1}'.format(env['name'], created_text))
else:
print(env['name'])
@ -180,6 +183,11 @@ class Shell(object):
action='store_const', const=True,
help='show admin node ip addresses',
default=False)
timestamps_parser = argparse.ArgumentParser(add_help=False)
timestamps_parser.add_argument('--timestamps', dest='timestamps',
action='store_const', const=True,
help='show creation timestamps',
default=False)
parser = argparse.ArgumentParser(
description="Manage virtual environments. "
"For addional help use command with -h/--help")
@ -187,7 +195,7 @@ class Shell(object):
help='available commands',
dest='command')
subparsers.add_parser('list',
parents=[list_ips_parser],
parents=[list_ips_parser, timestamps_parser],
help="Show virtual environments",
description="Show virtual environments on host")
subparsers.add_parser('show', parents=[name_parser],