Allow LetsEncrypt renewals and requesting certificates without specifying DNS provider
This commit is contained in:
27
lemur/dns_providers/cli.py
Normal file
27
lemur/dns_providers/cli.py
Normal file
@ -0,0 +1,27 @@
|
||||
from flask_script import Manager
|
||||
|
||||
from lemur.constants import SUCCESS_METRIC_STATUS
|
||||
from lemur.dns_providers.service import get_all_dns_providers, set_domains
|
||||
from lemur.extensions import metrics
|
||||
from lemur.plugins.base import plugins
|
||||
|
||||
manager = Manager(usage="Iterates through all DNS providers and sets DNS zones in the database.")
|
||||
|
||||
|
||||
@manager.command
|
||||
def get_all_zones():
|
||||
"""
|
||||
Retrieves all DNS providers from the database. Refreshes the zones associated with each DNS provider
|
||||
"""
|
||||
print("[+] Starting dns provider zone lookup and configuration.")
|
||||
dns_providers = get_all_dns_providers()
|
||||
acme_plugin = plugins.get("acme-issuer")
|
||||
|
||||
for dns_provider in dns_providers:
|
||||
zones = acme_plugin.get_all_zones(dns_provider)
|
||||
set_domains(dns_provider, zones)
|
||||
|
||||
status = SUCCESS_METRIC_STATUS
|
||||
|
||||
metrics.send('get_all_zones', 'counter', 1, metric_tags={'status': status})
|
||||
print("[+] Done with dns provider zone lookup and configuration.")
|
@ -1,5 +1,6 @@
|
||||
from sqlalchemy import Column, Integer, String, text, Text
|
||||
from sqlalchemy.dialects.postgresql import JSON
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy_utils import ArrowType
|
||||
|
||||
from lemur.database import db
|
||||
@ -22,6 +23,7 @@ class DnsProvider(db.Model):
|
||||
status = Column(String(length=128), nullable=True)
|
||||
options = Column(JSON, nullable=True)
|
||||
domains = Column(JSON, nullable=True)
|
||||
certificates = relationship("Certificate", backref='dns_provider', foreign_keys='Certificate.dns_provider_id')
|
||||
|
||||
def __init__(self, name, description, provider_type, credentials):
|
||||
self.name = name
|
||||
|
@ -22,6 +22,15 @@ def get(dns_provider_id):
|
||||
return provider
|
||||
|
||||
|
||||
def get_all_dns_providers():
|
||||
"""
|
||||
Retrieves all dns providers within Lemur.
|
||||
|
||||
:return:
|
||||
"""
|
||||
return DnsProvider.query.all()
|
||||
|
||||
|
||||
def get_friendly(dns_provider_id):
|
||||
"""
|
||||
Retrieves a dns provider by its lemur assigned ID.
|
||||
@ -96,6 +105,15 @@ def get_types():
|
||||
return provider_config
|
||||
|
||||
|
||||
def set_domains(dns_provider, domains):
|
||||
"""
|
||||
Increments pending certificate attempt counter and updates it in the database.
|
||||
"""
|
||||
dns_provider.domains = domains
|
||||
database.update(dns_provider)
|
||||
return dns_provider
|
||||
|
||||
|
||||
def create(data):
|
||||
provider_name = data.get("name")
|
||||
|
||||
|
Reference in New Issue
Block a user