From abdc479d6a48daf87b4faf10c13acf3749b0a458 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Fri, 6 Apr 2018 17:29:37 +0200 Subject: [PATCH] Unify setting the master zone name for 'node wizard|setup` in master mode --- lib/cli/nodesetupcommand.cpp | 14 ++++++++++++-- lib/cli/nodeutility.cpp | 9 +++++---- lib/cli/nodeutility.hpp | 3 ++- lib/cli/nodewizardcommand.cpp | 18 +++++++++++++++++- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/cli/nodesetupcommand.cpp b/lib/cli/nodesetupcommand.cpp index bd7d7d409..dca96ff29 100644 --- a/lib/cli/nodesetupcommand.cpp +++ b/lib/cli/nodesetupcommand.cpp @@ -129,6 +129,15 @@ int NodeSetupCommand::SetupMaster(const boost::program_options::variables_map& v if (vm.count("cn")) cn = vm["cn"].as(); + /* Setup command hardcodes this as FQDN */ + String endpointName = cn; + + /* Allow to specify zone name. */ + String zoneName = "master"; + + if (vm.count("zone")) + zoneName = vm["zone"].as(); + /* check whether the user wants to generate a new certificate or not */ String existingPath = ApiListener::GetCertsDir() + "/" + cn + ".crt"; @@ -174,9 +183,10 @@ int NodeSetupCommand::SetupMaster(const boost::program_options::variables_map& v globalZones.insert(globalZones.end(), setupGlobalZones.begin(), setupGlobalZones.end()); - NodeUtility::GenerateNodeMasterIcingaConfig(globalZones); + /* Generate master configuration. */ + NodeUtility::GenerateNodeMasterIcingaConfig(endpointName, zoneName, globalZones); - /* update the ApiListener config - SetupMaster() will always enable it */ + /* Update the ApiListener config. */ Log(LogInformation, "cli", "Updating the APIListener feature."); String apipath = FeatureUtility::GetFeaturesAvailablePath() + "/api.conf"; diff --git a/lib/cli/nodeutility.cpp b/lib/cli/nodeutility.cpp index 82417d562..5d4c6c90a 100644 --- a/lib/cli/nodeutility.cpp +++ b/lib/cli/nodeutility.cpp @@ -124,20 +124,21 @@ int NodeUtility::GenerateNodeIcingaConfig(const std::vector& endpoi return 0; } -int NodeUtility::GenerateNodeMasterIcingaConfig(const std::vector& globalZones) +int NodeUtility::GenerateNodeMasterIcingaConfig(const String& endpointName, const String& zoneName, + const std::vector& globalZones) { Array::Ptr my_config = new Array(); /* store the local generated node master configuration */ my_config->Add(new Dictionary({ - { "__name", new ConfigIdentifier("NodeName") }, + { "__name", endpointName }, { "__type", "Endpoint" } })); my_config->Add(new Dictionary({ - { "__name", new ConfigIdentifier("ZoneName") }, + { "__name", zoneName }, { "__type", "Zone" }, - { "endpoints", new Array({ new ConfigIdentifier("NodeName") }) } + { "endpoints", new Array({ endpointName }) } })); for (const String& globalzone : globalZones) { diff --git a/lib/cli/nodeutility.hpp b/lib/cli/nodeutility.hpp index c9339bf1e..b9c66ff64 100644 --- a/lib/cli/nodeutility.hpp +++ b/lib/cli/nodeutility.hpp @@ -47,7 +47,8 @@ public: /* node setup helpers */ static int GenerateNodeIcingaConfig(const std::vector& endpoints, const std::vector& globalZones); - static int GenerateNodeMasterIcingaConfig(const std::vector& globalZones); + static int GenerateNodeMasterIcingaConfig(const String& endpointName, const String& zoneName, + const std::vector& globalZones); private: NodeUtility(); diff --git a/lib/cli/nodewizardcommand.cpp b/lib/cli/nodewizardcommand.cpp index 07a743c85..384d8e5f2 100644 --- a/lib/cli/nodewizardcommand.cpp +++ b/lib/cli/nodewizardcommand.cpp @@ -623,6 +623,7 @@ int NodeWizardCommand::MasterSetup() const std::cout << ConsoleColorTag(Console_Bold) << "Generating master configuration for Icinga 2.\n" << ConsoleColorTag(Console_Normal); + ApiSetupUtility::SetupMasterApiUser(); if (!FeatureUtility::CheckFeatureEnabled("api")) @@ -630,6 +631,20 @@ int NodeWizardCommand::MasterSetup() const else std::cout << "'api' feature already enabled.\n"; + /* Setup command hardcodes this as FQDN */ + String endpointName = cn; + + /* Different zone name. */ + std::cout << "\nMaster zone name [master]: "; + std::getline(std::cin, answer); + + if (answer.empty()) + answer = "master"; + + String zoneName = answer; + zoneName = zoneName.Trim(); + + /* Global zones. */ std::vector globalZones { "global-templates", "director-global" }; std::cout << "\nDo you want to specify additional global zones? [y/N]: "; @@ -671,7 +686,8 @@ wizard_global_zone_loop_start: } else Log(LogInformation, "cli", "No additional global Zones have been specified"); - NodeUtility::GenerateNodeMasterIcingaConfig(globalZones); + /* Generate master configuration. */ + NodeUtility::GenerateNodeMasterIcingaConfig(endpointName, zoneName, globalZones); /* apilistener config */ std::cout << ConsoleColorTag(Console_Bold)