diff options
Diffstat (limited to 'src/conf_mode')
-rwxr-xr-x | src/conf_mode/salt-minion.py | 63 |
1 files changed, 24 insertions, 39 deletions
diff --git a/src/conf_mode/salt-minion.py b/src/conf_mode/salt-minion.py index d939db9a2..89df3b48a 100755 --- a/src/conf_mode/salt-minion.py +++ b/src/conf_mode/salt-minion.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (C) 2018-2020 VyOS maintainers and contributors +# Copyright (C) 2018-2022 VyOS maintainers and contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or later as @@ -16,14 +16,16 @@ import os -from copy import deepcopy from socket import gethostname from sys import exit from urllib3 import PoolManager from vyos.config import Config +from vyos.configdict import dict_merge from vyos.template import render -from vyos.util import call, chown +from vyos.util import call +from vyos.util import chown +from vyos.xml import defaults from vyos import ConfigError from vyos import airbag @@ -32,20 +34,10 @@ airbag.enable() config_file = r'/etc/salt/minion' master_keyfile = r'/opt/vyatta/etc/config/salt/pki/minion/master_sign.pub' -default_config_data = { - 'hash': 'sha256', - 'log_level': 'warning', - 'master' : 'salt', - 'user': 'minion', - 'group': 'vyattacfg', - 'salt_id': gethostname(), - 'interval': '60', - 'verify_master_pubkey_sign': 'false', - 'master_key': '' -} +user='minion' +group='vyattacfg' def get_config(config=None): - salt = deepcopy(default_config_data) if config: conf = config else: @@ -54,28 +46,23 @@ def get_config(config=None): if not conf.exists(base): return None - else: - conf.set_level(base) - - if conf.exists(['hash']): - salt['hash'] = conf.return_value(['hash']) - - if conf.exists(['master']): - salt['master'] = conf.return_values(['master']) - - if conf.exists(['id']): - salt['salt_id'] = conf.return_value(['id']) - - if conf.exists(['user']): - salt['user'] = conf.return_value(['user']) - if conf.exists(['interval']): - salt['interval'] = conf.return_value(['interval']) + salt = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True) + # ID default is dynamic thus we can not use defaults() + if 'id' not in salt: + salt['id'] = gethostname() + # We have gathered the dict representation of the CLI, but there are default + # options which we need to update into the dictionary retrived. + default_values = defaults(base) + salt = dict_merge(default_values, salt) - if conf.exists(['master-key']): - salt['master_key'] = conf.return_value(['master-key']) - salt['verify_master_pubkey_sign'] = 'true' + if not conf.exists(base): + return None + else: + conf.set_level(base) + import pprint + pprint.pprint(salt) return salt def verify(salt): @@ -85,13 +72,11 @@ def generate(salt): if not salt: return None - render(config_file, 'salt-minion/minion.j2', salt, - user=salt['user'], group=salt['group']) + render(config_file, 'salt-minion/minion.j2', salt, user=user, group=group) if not os.path.exists(master_keyfile): - if salt['master_key']: + if 'master_key' in salt: req = PoolManager().request('GET', salt['master_key'], preload_content=False) - with open(master_keyfile, 'wb') as f: while True: data = req.read(1024) @@ -100,7 +85,7 @@ def generate(salt): f.write(data) req.release_conn() - chown(master_keyfile, salt['user'], salt['group']) + chown(master_keyfile, user, group) return None |