mirror of
https://github.com/ansible/awx.git
synced 2026-02-17 19:20:05 -03:30
Init repo
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,21 +1,205 @@
|
||||
from django.db import models
|
||||
|
||||
# TODO: split into seperate files?
|
||||
# TODO: smart objects discussion
|
||||
# TODO: jobs and events model
|
||||
# TODO: how to link up with Django user auth
|
||||
# TODO: general schema review/organization
|
||||
|
||||
class CommonModel(models.Model):
|
||||
''' common model for all object types that have these standard fields '''
|
||||
'''
|
||||
common model for all object types that have these standard fields
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
name = models.TextField()
|
||||
description = models.TextField()
|
||||
name = models.TextField()
|
||||
description = models.TextField()
|
||||
creation_date = models.DateField()
|
||||
db_table = 'inventories'
|
||||
|
||||
class Inventory(CommonModel):
|
||||
tags = models.ManyToManyField('Tag')
|
||||
|
||||
class Tag(CommonModel):
|
||||
'''
|
||||
any type of object can be given a search tag
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'tags'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
name = models.TextField()
|
||||
|
||||
|
||||
class AuditTrail(CommonModel):
|
||||
'''
|
||||
changing any object records the change
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'audit_trails'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
resource_type = models.TextField()
|
||||
modified_by = models.ForeignKey('User')
|
||||
delta = models.ForeignKey('Delta')
|
||||
detail = models.TextField()
|
||||
comment = models.TextField()
|
||||
tag = models.ForeignKey('Tag')
|
||||
|
||||
class Organization(CommonModel):
|
||||
'''
|
||||
organizations are the basic unit of multi-tenancy divisions
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'organizations'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
users = models.ManyToManyField('User')
|
||||
admins = models.ManyToManyField('User')
|
||||
|
||||
class Inventory(CommonModel):
|
||||
'''
|
||||
an inventory source contains lists and hosts.
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'inventory'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
id = models.AutoField(primary_key=True)
|
||||
organization = models.ForeignKey(Organization)
|
||||
sync_script_path = models.TextField() # for future use
|
||||
|
||||
class Host(CommonModel):
|
||||
'''
|
||||
A managed node
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'hosts'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
inventory = models.ForeignKey('Inventory')
|
||||
|
||||
|
||||
class Group(CommonModel):
|
||||
'''
|
||||
A group of managed nodes. May belong to multiple groups
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'groups'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
inventory = models.ForeignKey('Inventory')
|
||||
parents = models.ManyToManyField('Group') # ?
|
||||
|
||||
class InventoryVariable(CommonModel):
|
||||
'''
|
||||
A variable
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'inventory_variables'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
host = models.ForeignKey('Host')
|
||||
group = models.ForeignKey('Group')
|
||||
key = models.TextField()
|
||||
value = models.TextField()
|
||||
|
||||
class User(CommonModel):
|
||||
'''
|
||||
Basic user class
|
||||
'''
|
||||
|
||||
# FIXME: how to integrate with Django auth?
|
||||
|
||||
class Meta:
|
||||
db_table = 'users'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
organization = models.ManyToManyField('Organization')
|
||||
team = models.ManyToManyField('Team')
|
||||
credentials = models.ManyToManyField('Credential')
|
||||
|
||||
class Credential(CommonModel):
|
||||
'''
|
||||
A credential contains information about how to talk to a remote set of hosts
|
||||
Usually this is a SSH key location, and possibly an unlock password.
|
||||
If used with sudo, a sudo password should be set if required.
|
||||
'''
|
||||
|
||||
|
||||
class Meta:
|
||||
db_table = 'credentials'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
user = models.ForeignKey('User')
|
||||
project = models.ForeignKey('Project')
|
||||
team = models.ForeignKey('Team')
|
||||
ssh_key_path = models.TextField()
|
||||
ssh_key_data = models.TextField() # later
|
||||
ssh_key_unlock = models.TextField()
|
||||
ssh_password = models.TextField()
|
||||
sudo_password = models.TextField()
|
||||
|
||||
class Team(CommonModel):
|
||||
'''
|
||||
A team is a group of users that work on common projects.
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'teams'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
projects = models.ManyToManyField('Project')
|
||||
credentials = models.ManyToManyField('Credential')
|
||||
users = models.ManyToManyField('User')
|
||||
organization = models.ManyToManyField('Organization')
|
||||
|
||||
class Project(CommonModel):
|
||||
'''
|
||||
A project represents a playbook git repo that can access a set of inventories
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'projects'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
credentials = models.ManyToManyField('Credential')
|
||||
inventories = models.ManyToManyField('Inventory')
|
||||
local_repository = models.TextField()
|
||||
scm_type = models.TextField()
|
||||
default_playbook = models.TextField()
|
||||
|
||||
class Permission(CommonModel):
|
||||
'''
|
||||
A permission allows a user, project, or team to be able to use an inventory source.
|
||||
'''
|
||||
|
||||
class Meta:
|
||||
db_table = 'permissions'
|
||||
|
||||
id = models.AutoField(primary_key=True)
|
||||
user = models.ForeignKey('User')
|
||||
project = models.ForeignKey('Project')
|
||||
team = models.ForeignKey('Team')
|
||||
# ... others?
|
||||
|
||||
# TODO: Jobs
|
||||
|
||||
class LaunchJob(CommonModel):
|
||||
''' a launch job is a request to apply a project to an inventory source with a given credential'
|
||||
|
||||
inventory = models.ForeignKey('Inventory')
|
||||
credential = models.ForeignKey('Credential')
|
||||
project = models.ForeignKey('Project')
|
||||
user = models.ForeignKey('User')
|
||||
job_type = models.TextField()
|
||||
event = models.ForeignKey('Event')
|
||||
|
||||
# TODO: Events
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
acom/urls.pyc
BIN
acom/urls.pyc
Binary file not shown.
Reference in New Issue
Block a user