From b2a556f05718defea7dcece39eb7847083d15b38 Mon Sep 17 00:00:00 2001 From: jan-win1993 <47572976+jan-win1993@users.noreply.github.com> Date: Wed, 19 May 2021 12:32:51 +0200 Subject: [PATCH] Add puppet-agent plugin (#2358) --- sysutils/puppet-agent/Makefile | 8 ++ sysutils/puppet-agent/pkg-descr | 7 ++ .../src/etc/inc/plugins.inc.d/puppetagent.inc | 61 ++++++++++++ .../PuppetAgent/Api/ServiceController.php | 75 +++++++++++++++ .../PuppetAgent/Api/SettingsController.php | 93 +++++++++++++++++++ .../OPNsense/PuppetAgent/IndexController.php | 47 ++++++++++ .../OPNsense/PuppetAgent/forms/general.xml | 20 ++++ .../models/OPNsense/PuppetAgent/ACL/ACL.xml | 9 ++ .../models/OPNsense/PuppetAgent/Menu/Menu.xml | 5 + .../OPNsense/PuppetAgent/PuppetAgent.php | 38 ++++++++ .../OPNsense/PuppetAgent/PuppetAgent.xml | 24 +++++ .../app/views/OPNsense/PuppetAgent/index.volt | 62 +++++++++++++ .../conf/actions.d/actions_puppetagent.conf | 23 +++++ .../templates/OPNsense/PuppetAgent/+TARGETS | 2 + .../OPNsense/PuppetAgent/puppetagent.conf | 10 ++ .../templates/OPNsense/PuppetAgent/rc.conf.d | 5 + 16 files changed, 489 insertions(+) create mode 100644 sysutils/puppet-agent/Makefile create mode 100644 sysutils/puppet-agent/pkg-descr create mode 100644 sysutils/puppet-agent/src/etc/inc/plugins.inc.d/puppetagent.inc create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/ServiceController.php create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/SettingsController.php create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/IndexController.php create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/forms/general.xml create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/ACL/ACL.xml create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/Menu/Menu.xml create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/PuppetAgent.php create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/PuppetAgent.xml create mode 100644 sysutils/puppet-agent/src/opnsense/mvc/app/views/OPNsense/PuppetAgent/index.volt create mode 100644 sysutils/puppet-agent/src/opnsense/service/conf/actions.d/actions_puppetagent.conf create mode 100644 sysutils/puppet-agent/src/opnsense/service/templates/OPNsense/PuppetAgent/+TARGETS create mode 100644 sysutils/puppet-agent/src/opnsense/service/templates/OPNsense/PuppetAgent/puppetagent.conf create mode 100644 sysutils/puppet-agent/src/opnsense/service/templates/OPNsense/PuppetAgent/rc.conf.d diff --git a/sysutils/puppet-agent/Makefile b/sysutils/puppet-agent/Makefile new file mode 100644 index 000000000..af7209fe7 --- /dev/null +++ b/sysutils/puppet-agent/Makefile @@ -0,0 +1,8 @@ +PLUGIN_NAME= puppet-agent +PLUGIN_VERSION= 0.1 +PLUGIN_DEVEL= yes +PLUGIN_COMMENT= Manage Puppet Agent +PLUGIN_DEPENDS= puppet7 +PLUGIN_MAINTAINER= jan.wink93@gmail.com + +.include "../../Mk/plugins.mk" diff --git a/sysutils/puppet-agent/pkg-descr b/sysutils/puppet-agent/pkg-descr new file mode 100644 index 000000000..ed7736616 --- /dev/null +++ b/sysutils/puppet-agent/pkg-descr @@ -0,0 +1,7 @@ +Puppet lets you centrally manage every important aspect of your system using +a cross-platform specification language that manages all the separate +elements normally aggregated in different files, like users, cron jobs, and +hosts, along with obviously discrete elements like packages, services, and +files. + +WWW: https://puppet.com/docs/puppet/latest/man/agent.html diff --git a/sysutils/puppet-agent/src/etc/inc/plugins.inc.d/puppetagent.inc b/sysutils/puppet-agent/src/etc/inc/plugins.inc.d/puppetagent.inc new file mode 100644 index 000000000..bbeb217b0 --- /dev/null +++ b/sysutils/puppet-agent/src/etc/inc/plugins.inc.d/puppetagent.inc @@ -0,0 +1,61 @@ + gettext('Puppet Agent Service'), + 'pidfile' => '/var/run/puppet/agent.pid', + 'configd' => array( + 'restart' => array('puppetagent restart'), + 'start' => array('puppetagent start'), + 'stop' => array('puppetagent stop'), + ), + 'name' => 'puppet-agent', + ); + + return $services; +} diff --git a/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/ServiceController.php b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/ServiceController.php new file mode 100644 index 000000000..58c60f552 --- /dev/null +++ b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/ServiceController.php @@ -0,0 +1,75 @@ +request->isPost()) { + // close session for long running action + $this->sessionClose(); + + $backend = new Backend(); + // generate template + $backend->configdRun('template reload OPNsense/PuppetAgent'); + + $mdlPuppetAgent = new PuppetAgent(); + + // (res)start daemon + if ($mdlPuppetAgent->general->Enabled->__toString() == 1) { + $this->startAction(); + } + // stop Puppet Agent when disabled + else { + $this->stopAction(); + } + return array("status" => "ok"); + } + else { + return array("status" => "failed"); + } + } +} diff --git a/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/SettingsController.php b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/SettingsController.php new file mode 100644 index 000000000..fcd5e8861 --- /dev/null +++ b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/Api/SettingsController.php @@ -0,0 +1,93 @@ +request->isGet()) { + $mdlPuppetAgent = new PuppetAgent(); + $result['puppetagent'] = $mdlPuppetAgent->getNodes(); + } + return $result; + } + + /** + * update PupppetAgent settings + * @return array status + * @throws \OPNsense\Base\ModelException + * @throws \ReflectionException + */ + public function setAction() + { + $result = array("result" => "failed"); + if ($this->request->isPost()) { + // load model and update with provided data + $mdlPuppetAgent = new PuppetAgent(); + $mdlPuppetAgent->setNodes($this->request->getPost("puppetagent")); + + // perform validation + $valMsgs = $mdlPuppetAgent->performValidation(); + foreach ($valMsgs as $field => $msg) { + if (!array_key_exists("validations", $result)) { + $result["validations"] = array(); + } + $result["validations"]["puppetagent." . $msg->getField()] = $msg->getMessage(); + } + + // serialize model to config and save + if ($valMsgs->count() == 0) { + $mdlPuppetAgent->serializeToConfig(); + Config::getInstance()->save(); + $result["result"] = "saved"; + } + } + return $result; + } +} diff --git a/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/IndexController.php b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/IndexController.php new file mode 100644 index 000000000..d5398024d --- /dev/null +++ b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/IndexController.php @@ -0,0 +1,47 @@ +view->pick('OPNsense/PuppetAgent/index'); + // fetch form data "general" in + $this->view->generalForm = $this->getForm("general"); + } +} diff --git a/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/forms/general.xml b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/forms/general.xml new file mode 100644 index 000000000..6713c5ec4 --- /dev/null +++ b/sysutils/puppet-agent/src/opnsense/mvc/app/controllers/OPNsense/PuppetAgent/forms/general.xml @@ -0,0 +1,20 @@ +
diff --git a/sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/ACL/ACL.xml b/sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/ACL/ACL.xml new file mode 100644 index 000000000..b65ad7e65 --- /dev/null +++ b/sysutils/puppet-agent/src/opnsense/mvc/app/models/OPNsense/PuppetAgent/ACL/ACL.xml @@ -0,0 +1,9 @@ +