aboutsummaryrefslogtreecommitdiff
path: root/pyenc/app/model.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyenc/app/model.py')
-rw-r--r--pyenc/app/model.py59
1 files changed, 21 insertions, 38 deletions
diff --git a/pyenc/app/model.py b/pyenc/app/model.py
index f67cd10..c37cec3 100644
--- a/pyenc/app/model.py
+++ b/pyenc/app/model.py
@@ -23,7 +23,7 @@ host_classes = db.Table(
# NOTE this is non-final, and might get removed shortly
environment_classes = db.Table(
'environment_classes',
- db.Column('environment_id', db.ForeignKey('puppet_environment.id'), primary_key=True),
+ db.Column('environment_id', db.ForeignKey('environment.id'), primary_key=True),
db.Column('class_id', db.ForeignKey('puppet_class.id'), primary_key=True),
)
@@ -32,25 +32,17 @@ class_files = db.Table(
'class_files',
db.Column('class_id', db.ForeignKey('puppet_class.id'), primary_key=True),
db.Column('file_id', db.ForeignKey('puppet_file.id'), primary_key=True),
- db.UniqueConstraint('class_id', 'file_id'),
)
-# class HostClasses(db.Model):
-# __tablename__ = 'host_classes'
-# id = db.Column(db.Integer, primary_key=True)
-# host_id = db.Column(db.Integer, db.ForeignKey('host.id'), nullable=False)
-# class_id = db.Column(db.Integer, db.ForeignKey('puppet_class.id'), nullable=False)
-
-
-class PuppetEnvironment(db.Model):
+class Environment(db.Model):
"""
A puppet environment.
An enviromnet is a collection of modules, but here we only keep
the files of the modules, in PuppetFile.
"""
- __tablename__ = 'puppet_environment'
+ __tablename__ = 'environment'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, nullable=False, unique=True)
classes = db.relationship(
@@ -60,6 +52,9 @@ class PuppetEnvironment(db.Model):
hosts = db.relationship(
'Host',
back_populates='environment')
+ files = db.relationship(
+ 'PuppetFile',
+ back_populates='environment')
class Host(db.Model):
@@ -75,9 +70,10 @@ class Host(db.Model):
__tablename__ = 'host'
id = db.Column(db.Integer, primary_key=True)
fqdn = db.Column(db.Text, nullable=False, unique=True)
- environment_id = db.Column(db.Integer, db.ForeignKey(f'{PuppetEnvironment.__tablename__}.id'))
- environment = db.relationship('PuppetEnvironment', back_populates='hosts')
- # classes = db.relationship('HostClasses', backref='host', lazy='dynamic')
+
+ environment_id = db.Column(db.Integer, db.ForeignKey(f'{Environment.__tablename__}.id'))
+ environment = db.relationship('Environment', back_populates='hosts')
+
classes = db.relationship(
'PuppetClass',
back_populates='hosts',
@@ -95,19 +91,20 @@ class PuppetFile(db.Model):
Keeps track of known puppet files. Each file contains 0 to many
puppet classes.
- Each file is uniquely identified by the pair (path, environment).
+ Each file is uniquely identified by the pair (path, environment_id).
"""
__tablename__ = 'puppet_file'
id = db.Column(db.Integer, primary_key=True)
- # Where we found the file (path inside environment)
- # e.g. /etc/puppetlabs/code/environments/<environment name>/<this path>
+ # Where we found the file (path inside environment_id)
+ # e.g. /etc/puppetlabs/code/environments/<environment_id name>/<this path>
path = db.Column(db.Text, nullable=False)
- # Puppet environment this file belongs in
- environment = db.Column(db.Integer,
- db.ForeignKey(f'{PuppetEnvironment.__tablename__}.id'),
- nullable=False)
+ # Puppet environment_id this file belongs in
+ environment_id = db.Column(db.Integer,
+ db.ForeignKey(f'{Environment.__tablename__}.id'),
+ nullable=False)
+ environment = db.relationship('Environment', back_populates='files')
# Checksum of the content, should be usable as a key in PuppetFileContent
checksum = db.Column(db.Text, nullable=False)
@@ -121,7 +118,7 @@ class PuppetFile(db.Model):
content = db.relationship('PuppetFileContent', backref='file')
__table_args__ = (
- db.UniqueConstraint('path', 'environment'),
+ db.UniqueConstraint('path', 'environment_id'),
)
@@ -145,20 +142,6 @@ class PuppetFileContent(db.Model):
json = db.Column(db.Text, nullable=False)
-# TODO class environment mappings?
-# - the same class can exist in multiple environmentns
-# - the same class in multiple environments might be different
-# - the class can come or go when the file is changed (??)
-# - when a node changes environment it still has its classes, but they
-# refer to something else now
-
-# Possibly:
-# nodes holds its list of classes as a list of strings
-# I have tables which maps class names to files per environment
-
-# What happens when two different environments have separate classes
-# which share a name
-
class PuppetClass(db.Model):
"""
A puppet class.
@@ -168,14 +151,14 @@ class PuppetClass(db.Model):
"""
__tablename__ = 'puppet_class'
id = db.Column(db.Integer, primary_key=True)
- class_name = db.Column(db.Text, nullable=False, unique=True)
+ name = db.Column(db.Text, nullable=False, unique=True)
hosts = db.relationship(
'Host',
back_populates='classes',
secondary=host_classes)
environments = db.relationship(
- 'PuppetEnvironment',
+ 'Environment',
back_populates='classes',
secondary=environment_classes)
files = db.relationship(