Manipulate DNS records on various DNS providers in a standardized way.
domain.net
for www.domain.net
) using
tldextract
, and usage of --delegated
option to enforce a specific zone name that is useful for
third-level domains hosted on a specific zone (eg., sub-zone sub.domain.net
delegated from zone
domain.net
).
It is now possible to use the --resolve-zone-name
flag on Lexicon client to trigger an actual
resolution of the zone name from a given FQDN using live DNS servers by leveraging dnspython
utilities. Most of the time this makes --delegated
useless, since Lexicon will be able to guess
the correct zone name.pyotp
Python dependency in Lexicon to help implementing OTP (one-time password)
on providers whose API supports this kind of authentication.hover
provider, with a new flag named --auth-totp-secret
.py.typed
to inform types checkers about availability of type
annotations in Lexicon codebase.Client
is used as a context manager.cryptography
in providers where only hashing is needed.lexicon.client.Client
becomes a context manager.
When invoked with the with
keyword, it will provide an operation object that embeds the
target provider fully authenticated (authenticate
method called on the Provider).
This operation object gives access to four methods: create_record
, update_record
,
delete_record
and list_records
. These methods can be invoked instead of the old
execute
method to execute a specific action on the DNS zone. In this case, type
,
name
, content
fields do not need to be set in the config anymore, since they are
passed directly as arguments to the new methods. Upon context manager closing, the cleanup
method defined in the Provider is ensured to be called. See the README file of the project
for an example of how to use this new approach.NAMESERVER_DOMAIN
variable and provider_parser
function that had to be defined
in each provider module are respectively migrated to get_nameservers
and configure_parser
static methods in each Provider class. They are defined as abstract
in the interface and must be implemented in the concrete classes._create_record
, _modify_record
, _delete_record
and _list_records
are migrated to their public counterpart create_record
,
modify_record
, delete_record
and list_records
in each Provider class. These are
the new abstract methods for each action that need to be implemented.lexicon.client.Client.execute
is deprecated and will be removed in Lexicon 4.lexicon.providers
, containing the actual provider implementations, is migrated to
lexicon._private.providers
. The provider implementations are not supposed to be used
directly, please use lexicon.client.Client
instead with the new methods described above.
Package lexicon.providers
stubs to lexicon._private.providers
to ease the migration
path, but it is deprecated and will be removed in Lexicon 4.lexicon.providers.base
, that contains the Provider interface to implement, is
migrated to module lexicon.interfaces
. Module lexicon.providers.base
stubs
to lexicon.interfaces
to ease the migration path, but it is deprecated and will be removed
in Lexicon 4.lexicon.cli
, lexicon.parser
and lexicon.discovery
are migrated to the
private package lexicon._private
as they are not part of the public API. Old modules
stubs to the new modules in the private package lexicon._private
to ease the migration path,
but it is deprecated and will be removed in Lexicon 4./lexicon
folder is moved in /src/lexicon
folder to comply with
modern Python project layouts. Tests are migrated to /tests
folder.duckdns
provider (experimental support) (#1533)dnsservices
provider (#1603)flexibleengine
provider (#1600)azure
provider (#1606)