Source code for pyarchops_tinc.tinc

# -*- coding: utf-8 -*-

"""Main module."""

import typing
import suitable


[docs]def apply( api: suitable.api.Api, config: dict, quiet: bool = False ) -> typing.Tuple: """ installs tinc """ results = dict() results['install_pkgs'] = install_pkgs(api, quiet=quiet) results['create_tinc_network_folder'] = create_tinc_network_folder( api, config=config ) results['deploy_configuration'] = deploy_configuration( api, config=config, quiet=quiet) results['enable_service'] = enable_service(api, config=config, quiet=quiet) if not quiet: print(results) return (True, results)
[docs]def install_pkgs(api: suitable.api.Api, quiet: bool = False) -> dict: """ installs tinc requirements""" result = api.pacman( name=['tinc', 'inetutils', 'dhclient', 'net-tools'], state='present' ) if not quiet: print(result['contacted']) return dict({'install_pkgs': result})
[docs]def create_tinc_network_folder( api: suitable.api.Api, config: dict, ) -> dict: """ creates /etc/tinc/<network> """ result = api.file( name=f"/etc/tinc/{config['tinc_network_name']}", state='directory', mode="0755", owner='root', group='root' ) return dict({'create_tinc_network_folder': result})
[docs]def deploy_hosts_files( api: suitable.api.Api, config: dict, ) -> dict: """ deploys tinc /hosts/* files """ results = dict() results['create_hosts_dir'] = api.file( name=f"/etc/tinc/{config['tinc_network_name']}/hosts", state='directory', mode="0755", owner='root', group='root' ) results['connect_to_hosts'] = dict() for node, node_hostfile in config['connect_to_hosts'].items(): results['connect_to_hosts'][node] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/hosts/{node}", content=node_hostfile, owner='root', group='root', mode="0644", ) return dict({'deploy_host_files': results})
[docs]def deploy_tinc_key_files( api: suitable.api.Api, config: dict, ) -> dict: """ deploys tinc id_rsa files """ results = dict() results['deploy_public_key'] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/rsa_key.pub", content=config['public_key'], owner='root', group='root', mode="0640", ) results['deploy_private_key'] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/rsa_key.priv", content=config['private_key'], owner='root', group='root', mode="0600", ) return dict({'deploy_tinc_key_files': results})
[docs]def deploy_interface_files( api: suitable.api.Api, config: dict, ) -> dict: """ deploys tinc interface files """ results = dict() results['tinc_up'] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/tinc-up", owner='root', group='root', mode="0750", content=config['tinc_up_file'], ) results['tinc_down'] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/tinc-down", owner='root', group='root', mode="0750", content=config['tinc_down_file'], ) results['fix_route'] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/fix-route", owner='root', group='root', mode="0750", content=config['fix_route_file'], ) results['dhclient_conf'] = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/dhclient.conf", content=config['dhclient_conf'], owner='root', group='root', mode="0640", ) return dict({'deploy_interface_files': results})
[docs]def deploy_tinc_conf( api: suitable.api.Api, config: dict, ) -> dict: """ deploys tinc.conf """ result = api.copy( dest=f"/etc/tinc/{config['tinc_network_name']}/tinc.conf", content=config['tinc_conf'], owner='root', group='root', mode="0640", ) return dict({'deploy_tinc_conf': result})
[docs]def deploy_configuration( api: suitable.api.Api, config: dict, quiet: bool = False ) -> dict: """ deploys tinc configuration """ results = dict() results['deploy_tinc_key_files'] = deploy_tinc_key_files( api, config=config ) results['deploy_interface_files'] = deploy_interface_files( api, config=config ) results['deploy_host_files'] = deploy_hosts_files(api, config=config) results['deploy_tinc_conf'] = deploy_tinc_conf(api, config=config) if not quiet: print(results) return dict({'deploy_configuration': results})
[docs]def enable_service( api: suitable.api.Api, config: dict, quiet: bool = False ) -> dict: """ enables tinc services """ results = dict() results['tinc_service'] = api.service( name='tinc', enabled=True, state='started') results[f'tinc_service_{config["tinc_network_name"]}'] = api.service( name=f"tinc@{config['tinc_network_name']}", enabled=True, state='started' ) if not quiet: print(results) return dict({'enable_service': results})