diff options
Diffstat (limited to 'pyenc/model.py')
-rw-r--r-- | pyenc/model.py | 70 |
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() |