summaryrefslogtreecommitdiffstats
path: root/library/Director/DirectorObject/Automation/ImportExport.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/Director/DirectorObject/Automation/ImportExport.php149
1 files changed, 149 insertions, 0 deletions
diff --git a/library/Director/DirectorObject/Automation/ImportExport.php b/library/Director/DirectorObject/Automation/ImportExport.php
new file mode 100644
index 0000000..a5e72fa
--- /dev/null
+++ b/library/Director/DirectorObject/Automation/ImportExport.php
@@ -0,0 +1,149 @@
+<?php
+
+namespace Icinga\Module\Director\DirectorObject\Automation;
+
+use Icinga\Module\Director\Data\Exporter;
+use Icinga\Module\Director\Db;
+use Icinga\Module\Director\Objects\DirectorDatafield;
+use Icinga\Module\Director\Objects\DirectorDatalist;
+use Icinga\Module\Director\Objects\DirectorJob;
+use Icinga\Module\Director\Objects\IcingaHostGroup;
+use Icinga\Module\Director\Objects\IcingaServiceGroup;
+use Icinga\Module\Director\Objects\IcingaServiceSet;
+use Icinga\Module\Director\Objects\IcingaTemplateChoiceHost;
+use Icinga\Module\Director\Objects\ImportSource;
+use Icinga\Module\Director\Objects\SyncRule;
+
+class ImportExport
+{
+ /** @var Db */
+ protected $connection;
+
+ /** @var Exporter */
+ protected $exporter;
+
+ public function __construct(Db $connection)
+ {
+ $this->connection = $connection;
+ $this->exporter = new Exporter($connection);
+ }
+
+ public function serializeAllServiceSets()
+ {
+ $res = [];
+ foreach (IcingaServiceSet::loadAll($this->connection) as $object) {
+ if ($object->get('host_id')) {
+ continue;
+ }
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function serializeAllHostTemplateChoices()
+ {
+ $res = [];
+ foreach (IcingaTemplateChoiceHost::loadAll($this->connection) as $object) {
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function serializeAllHostGroups()
+ {
+ $res = [];
+ foreach (IcingaHostGroup::loadAll($this->connection) as $object) {
+ $res[] = $object->toPlainObject();
+ }
+
+ return $res;
+ }
+
+ public function serializeAllServiceGroups()
+ {
+ $res = [];
+ foreach (IcingaServiceGroup::loadAll($this->connection) as $object) {
+ $res[] = $object->toPlainObject();
+ }
+
+ return $res;
+ }
+
+ public function serializeAllDataFields()
+ {
+ $res = [];
+ foreach (DirectorDatafield::loadAll($this->connection) as $object) {
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function serializeAllDataLists()
+ {
+ $res = [];
+ foreach (DirectorDatalist::loadAll($this->connection) as $object) {
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function serializeAllJobs()
+ {
+ $res = [];
+ foreach (DirectorJob::loadAll($this->connection) as $object) {
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function serializeAllImportSources()
+ {
+ $res = [];
+ foreach (ImportSource::loadAll($this->connection) as $object) {
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function serializeAllSyncRules()
+ {
+ $res = [];
+ foreach (SyncRule::loadAll($this->connection) as $object) {
+ $res[] = $this->exporter->export($object);
+ }
+
+ return $res;
+ }
+
+ public function unserializeImportSources($objects)
+ {
+ $count = 0;
+ $this->connection->runFailSafeTransaction(function () use ($objects, &$count) {
+ foreach ($objects as $object) {
+ ImportSource::import($object, $this->connection)->store();
+ $count++;
+ }
+ });
+
+ return $count;
+ }
+
+ public function unserializeSyncRules($objects)
+ {
+ $count = 0;
+ $this->connection->runFailSafeTransaction(function () use ($objects, &$count) {
+ foreach ($objects as $object) {
+ SyncRule::import($object, $this->connection)->store();
+ }
+ $count++;
+ });
+
+ return $count;
+ }
+}