aboutsummaryrefslogtreecommitdiff
path: root/pyenc/model.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyenc/model.py')
-rw-r--r--pyenc/model.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/pyenc/model.py b/pyenc/model.py
new file mode 100644
index 0000000..dc0db05
--- /dev/null
+++ b/pyenc/model.py
@@ -0,0 +1,70 @@
+"""
+Database model for application
+"""
+
+from flask_sqlalchemy import SQLAlchemy
+import requests
+import yaml
+
+db = SQLAlchemy()
+
+host_classes = db.Table('host_classes',
+ db.Column('host_id', db.ForeignKey('host.id')),
+ db.Column('class_id', db.ForeignKey('puppet_class.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 Host(db.Model):
+ __tablename__ = 'host'
+ id = db.Column(db.Integer, primary_key=True)
+ fqdn = db.Column(db.Text, nullable=False)
+ environment = db.Column(db.Text)
+ # classes = db.relationship('HostClasses', backref='host', lazy='dynamic')
+ classes = db.relationship('PuppetClass',
+ back_populates='hosts',
+ secondary=host_classes)
+
+class PuppetClass(db.Model):
+ __tablename__ = 'puppet_class'
+ id = db.Column(db.Integer, primary_key=True)
+ class_name = db.Column(db.Text, nullable=False)
+ source_file = db.Column(db.Text)
+ hosts = db.relationship('Host',
+ back_populates='classes',
+ secondary=host_classes)
+
+
+##################################################
+# Everything below should be removed
+
+
+def import_from_puppetdb():
+ payload = {'query': 'nodes {}'}
+ r = requests.post('http://busting.adrift.space:8080/pdb/query/v4',
+ data=json.dumps(payload))
+ for item in r.json():
+ db.session.add(
+ Host(fqdn=item['certname'],
+ environment=item['catalog_environment']))
+ db.session.commit()
+
+def import_more():
+ with open('/usr/local/puppet/nodes.yaml') as f:
+ data = yaml.full_load(f)
+ for fqdn, val in data.items():
+ h = Host.query.where(Host.fqdn==fqdn).first()
+ print(h)
+ if not h: continue
+ # print(h)
+ classes = data[h.fqdn]['classes']
+ if type(classes) == dict:
+ classes = classes.keys()
+ cls = PuppetClass.query.where(PuppetClass.class_name.in_(classes)).all()
+ print(cls)
+ for c in cls:
+ h.classes.append(c)
+ db.session.commit()