wip
This commit is contained in:
parent
35c1db0ec6
commit
9ce47a0aa7
5 changed files with 28 additions and 28 deletions
|
@ -25,7 +25,6 @@ def acme_records(metadata):
|
||||||
@metadata_reactor.provides(
|
@metadata_reactor.provides(
|
||||||
'bind/acls/acme',
|
'bind/acls/acme',
|
||||||
'bind/keys/acme',
|
'bind/keys/acme',
|
||||||
'bind/views/internal/acl',
|
|
||||||
'bind/views/external/zones',
|
'bind/views/external/zones',
|
||||||
)
|
)
|
||||||
def acme_zone(metadata):
|
def acme_zone(metadata):
|
||||||
|
@ -43,16 +42,11 @@ def acme_zone(metadata):
|
||||||
'!{ !{' + ' '.join(f'{ip};' for ip in sorted(allowed_ips)) + '}; any;}',
|
'!{ !{' + ' '.join(f'{ip};' for ip in sorted(allowed_ips)) + '}; any;}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'keys': {
|
|
||||||
'acme': {},
|
|
||||||
},
|
|
||||||
'views': {
|
'views': {
|
||||||
'internal': {
|
|
||||||
'acl': {
|
|
||||||
'! key acme',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'external': {
|
'external': {
|
||||||
|
'keys': {
|
||||||
|
'acme': {},
|
||||||
|
},
|
||||||
'zones': {
|
'zones': {
|
||||||
metadata.get('bind/acme_zone'): {
|
metadata.get('bind/acme_zone'): {
|
||||||
'allow_update': {
|
'allow_update': {
|
||||||
|
|
|
@ -6,12 +6,14 @@ acl "${acl_name}" {
|
||||||
};
|
};
|
||||||
% endfor
|
% endfor
|
||||||
|
|
||||||
% for key_name, key_conf in sorted(keys.items()):
|
% for view_name, view_conf in views.items():
|
||||||
|
% for key_name, key_conf in sorted(view_conf['keys'].items()):
|
||||||
key "${key_name}" {
|
key "${key_name}" {
|
||||||
algorithm hmac-sha512;
|
algorithm hmac-sha512;
|
||||||
secret "${key_conf['token']}";
|
secret "${key_conf['token']}";
|
||||||
};
|
};
|
||||||
% endfor
|
% endfor
|
||||||
|
% endfor
|
||||||
|
|
||||||
% for view_name, view_conf in views.items():
|
% for view_name, view_conf in views.items():
|
||||||
view "${view_name}" {
|
view "${view_name}" {
|
||||||
|
|
|
@ -81,7 +81,6 @@ files['/etc/bind/named.conf.local'] = {
|
||||||
for view_name, view_conf in master_node.metadata.get('bind/views').items()
|
for view_name, view_conf in master_node.metadata.get('bind/views').items()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'keys': master_node.metadata.get('bind/keys'),
|
|
||||||
'views': dict(sorted(
|
'views': dict(sorted(
|
||||||
master_node.metadata.get('bind/views').items(),
|
master_node.metadata.get('bind/views').items(),
|
||||||
key=lambda e: (e[1].get('default', False), e[0]),
|
key=lambda e: (e[1].get('default', False), e[0]),
|
||||||
|
|
|
@ -23,6 +23,7 @@ defaults = {
|
||||||
'views': {
|
'views': {
|
||||||
'internal': {
|
'internal': {
|
||||||
'is_internal': True,
|
'is_internal': True,
|
||||||
|
'keys': {},
|
||||||
'acl': {
|
'acl': {
|
||||||
'our-nets',
|
'our-nets',
|
||||||
},
|
},
|
||||||
|
@ -31,6 +32,7 @@ defaults = {
|
||||||
'external': {
|
'external': {
|
||||||
'default': True,
|
'default': True,
|
||||||
'is_internal': False,
|
'is_internal': False,
|
||||||
|
'keys': {},
|
||||||
'acl': {
|
'acl': {
|
||||||
'any',
|
'any',
|
||||||
},
|
},
|
||||||
|
@ -38,7 +40,6 @@ defaults = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'zones': {},
|
'zones': {},
|
||||||
'keys': {},
|
|
||||||
},
|
},
|
||||||
'telegraf': {
|
'telegraf': {
|
||||||
'config': {
|
'config': {
|
||||||
|
@ -175,24 +176,29 @@ def slaves(metadata):
|
||||||
|
|
||||||
|
|
||||||
@metadata_reactor.provides(
|
@metadata_reactor.provides(
|
||||||
'bind/keys',
|
'bind/views',
|
||||||
)
|
)
|
||||||
def generate_keys(metadata):
|
def generate_keys(metadata):
|
||||||
return {
|
return {
|
||||||
'bind': {
|
'bind': {
|
||||||
'keys': {
|
'views': {
|
||||||
key: {
|
view_name: {
|
||||||
'token':repo.libs.hmac.hmac_sha512(
|
'keys': {
|
||||||
key,
|
key: {
|
||||||
str(repo.vault.random_bytes_as_base64_for(
|
'token':repo.libs.hmac.hmac_sha512(
|
||||||
f"{metadata.get('id')} bind key {key}",
|
key,
|
||||||
length=32,
|
str(repo.vault.random_bytes_as_base64_for(
|
||||||
)),
|
f"{metadata.get('id')} bind key {key}",
|
||||||
)
|
length=32,
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
for key in view_conf['keys']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
for view_name, view_conf in metadata.get('bind/views').items()
|
||||||
}
|
}
|
||||||
for key in metadata.get('bind/keys')
|
}
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -213,11 +219,10 @@ def generate_acl_entries_for_keys(metadata):
|
||||||
},
|
},
|
||||||
# reject keys from other views
|
# reject keys from other views
|
||||||
*{
|
*{
|
||||||
f'! key {other_view_name}.{zone_name}'
|
f'! key {key}'
|
||||||
for other_view_name, other_view_conf in metadata.get('bind/views').items()
|
for other_view_name, other_view_conf in metadata.get('bind/views').items()
|
||||||
if other_view_name != view_name
|
if other_view_name != view_name
|
||||||
for zone_name, zone_conf in other_view_conf['zones'].items()
|
for key in other_view_conf.get('keys', [])
|
||||||
if zone_conf.get('key', False)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ files = {
|
||||||
'server': ip_interface(acme_node.metadata.get('network/internal/ipv4')).ip,
|
'server': ip_interface(acme_node.metadata.get('network/internal/ipv4')).ip,
|
||||||
'zone': acme_node.metadata.get('bind/acme_zone'),
|
'zone': acme_node.metadata.get('bind/acme_zone'),
|
||||||
'acme_key_name': 'acme',
|
'acme_key_name': 'acme',
|
||||||
'acme_key': acme_node.metadata.get('bind/keys/acme/token'),
|
'acme_key': acme_node.metadata.get('bind/views/external/keys/acme/token'),
|
||||||
'domains': node.metadata.get('letsencrypt/domains'),
|
'domains': node.metadata.get('letsencrypt/domains'),
|
||||||
},
|
},
|
||||||
'mode': '0755',
|
'mode': '0755',
|
||||||
|
|
Loading…
Reference in a new issue