diff options
author | UnicronNL <kim.sidney@gmail.com> | 2018-07-01 22:16:03 +0200 |
---|---|---|
committer | UnicronNL <kim.sidney@gmail.com> | 2018-07-01 22:16:03 +0200 |
commit | cf4738ddbff6858975ff5f2bb0d656453e563848 (patch) | |
tree | c32ad6cc9f1d0bff7aa52000e7e0ae22271466c8 | |
download | vyos-salt-minion-cf4738ddbff6858975ff5f2bb0d656453e563848.tar.gz vyos-salt-minion-cf4738ddbff6858975ff5f2bb0d656453e563848.zip |
initial commit
-rw-r--r-- | interface-definitions/salt-minion.xml | 33 | ||||
-rw-r--r-- | src/conf_mode/salt-minion.py | 112 |
2 files changed, 145 insertions, 0 deletions
diff --git a/interface-definitions/salt-minion.xml b/interface-definitions/salt-minion.xml new file mode 100644 index 0000000..3510590 --- /dev/null +++ b/interface-definitions/salt-minion.xml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> + +<!--Salt-minion configuration --> + +<interfaceDefinition> + <node name="service"> + <children> + <node name="salt-minion" owner="${vyos_conf_scripts_dir}/salt-minion.py"> + <properties> + <help>Salt Minion</help> + </properties> + <children> + <leafNode name="master"> + <properties> + <help>The hostname or IP address of the master.</help> + <multi/> + </properties> + </leafNode> + <leafNode name="ID"> + <properties> + <help>Explicitly declare the id for this minion to use.</help> + </properties> + </leafNode> + <leafNode name="user"> + <properties> + <help>The user to run the Salt processes.</help> + </properties> + </leafNode> + </children> + </node> + </children> + </node> +</interfaceDefinition> diff --git a/src/conf_mode/salt-minion.py b/src/conf_mode/salt-minion.py new file mode 100644 index 0000000..762a7ee --- /dev/null +++ b/src/conf_mode/salt-minion.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2018 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 +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# + +import sys +import os +import socket + +import jinja2 + +from vyos.config import Config +from vyos import ConfigError + +config_file = r'/etc/salt/minion' + +# Please be careful if you edit the template. +config_tmpl = """ + +### Autogenerated by salt-minion.py ### + +##### Primary configuration settings ##### +########################################## + +# Set the location of the salt master server, if the master server cannot be +# resolved, then the minion will fail to start. +master: {{ master }} + +# The user to run salt +user: {{ user }} + +# The directory to store the pki information in +pki_dir: /config/salt/pki/minion + +# Explicitly declare the id for this minion to use, if left commented the id +# will be the hostname as returned by the python call: socket.getfqdn() +# Since salt uses detached ids it is possible to run multiple minions on the +# same machine but with different ids, this can be useful for salt compute +# clusters. +id: {{ id }} +""" + +default_config_data = { + 'master' : 'salt' + 'user': 'vyos', + 'id': socket.gethostname() +} + +def get_config(): + salt = default_config_data + conf = Config() + if not conf.exists('service salt-minion'): + return None + else: + conf.set_level('service salt-minion') + + if conf.exists('master'): + master = conf.return_values('master') + salt['master'] = master + + if conf.exists('ID'): + id = conf.return_values('ID') + salt['id'] = id + + if conf.exists('user'): + user = conf.return_values('user') + salt['user'] = user + + return salt + +def generate(salt): + if salt is None: + return None + + tmpl = jinja2.Template(config_tmpl) + config_text = tmpl.render(salt) + with open(config_file, 'w') as f: + f.write(config_text) + return None + +def apply(salt): + if salt is not None: + os.system("sudo systemctl restart salt-minion") + else: + # Salt access is removed in the commit + os.system("sudo systemctl stop salt-minion") + os.unlink(config_file) + + return None + +if __name__ == '__main__': + try: + c = get_config() + verify(c) + generate(c) + apply(c) + except ConfigError as e: + print(e) + sys.exit(1) |