diff --git a/lib/cli/agentsetupcommand.cpp b/lib/cli/agentsetupcommand.cpp index a55937209..a83e16e53 100644 --- a/lib/cli/agentsetupcommand.cpp +++ b/lib/cli/agentsetupcommand.cpp @@ -103,6 +103,16 @@ int AgentSetupCommand::Run(const boost::program_options::variables_map& vm, cons int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map& vm, const std::vector& ap) { + /* + * 0. Ignore not required parameters + */ + if (vm.count("ticket")) + Log(LogWarning, "cli", "Master for Agent setup: Ignoring --ticket"); + if (vm.count("endpoint")) + Log(LogWarning, "cli", "Master for Agent setup: Ignoring --endpoint"); + if (vm.count("trustedcert")) + Log(LogWarning, "cli", "Master for Agent setup: Ignoring --trustedcert"); + /* * 1. Generate a new CA, if not already existing */ @@ -111,7 +121,7 @@ int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map& << "Generating new CA."; if (PkiUtility::NewCa() > 0) { - Log(LogWarning, "cli", "Found CA, skipping and using the existing one.\n"); + Log(LogWarning, "cli", "Found CA, skipping and using the existing one."); } /* @@ -148,18 +158,16 @@ int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map& String pki_path = PkiUtility::GetPkiPath(); Log(LogInformation, "cli") - << "Moving certificates to " << pki_path << "."; + << "Copying generated certificates to " << pki_path << "."; String target_key = pki_path + "/" + cn + ".key"; String target_cert = pki_path + "/" + cn + ".crt"; String target_ca = pki_path + "/ca.crt"; - //TODO - PkiUtility::CopyCertFile(key, target_key); - PkiUtility::CopyCertFile(cert, target_cert); - PkiUtility::CopyCertFile(ca, target_ca); - - std::cout << ConsoleColorTag(Console_ForegroundRed | Console_Bold) << "PLACEHOLDER" << ConsoleColorTag(Console_Normal) << std::endl; + /* does not overwrite existing files! */ + Utility::CopyFile(key, target_key); + Utility::CopyFile(cert, target_cert); + Utility::CopyFile(ca, target_ca); /* * 4. read zones.conf and update with zone + endpoint information @@ -167,7 +175,7 @@ int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map& Log(LogInformation, "cli", "Generating zone and object configuration."); - std::cout << ConsoleColorTag(Console_ForegroundRed | Console_Bold) << "PLACEHOLDER" << ConsoleColorTag(Console_Normal) << std::endl; + AgentUtility::GenerateAgentMasterIcingaConfig(cn); /* * 5. enable the ApiListener config (verifiy its data) @@ -183,6 +191,8 @@ int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map& enable.push_back("api"); FeatureUtility::EnableFeatures(enable); + //TODO read --listen and set that as bind_host,port on ApiListener + /* * 6. tell the user to set a safe salt in api.conf */ @@ -345,6 +355,8 @@ int AgentSetupCommand::SetupAgent(const boost::program_options::variables_map& v }*/ + //TODO read --listen and set that as bind_host,port on ApiListener + /* * 7. generate local zones.conf with zone+endpoint */ diff --git a/lib/cli/agentutility.cpp b/lib/cli/agentutility.cpp index 7306281f2..13a9cd4d9 100644 --- a/lib/cli/agentutility.cpp +++ b/lib/cli/agentutility.cpp @@ -325,6 +325,37 @@ int AgentUtility::GenerateAgentIcingaConfig(const std::vector& endp return 0; } +int AgentUtility::GenerateAgentMasterIcingaConfig(const String& nodename) +{ + Array::Ptr my_config = make_shared(); + + /* store the local generated agent master configuration */ + Dictionary::Ptr my_master_endpoint = make_shared(); + Dictionary::Ptr my_master_zone = make_shared(); + Array::Ptr my_master_zone_members = make_shared(); + + my_master_endpoint->Set("__name", nodename); + my_master_endpoint->Set("__type", "Endpoint"); + + my_master_zone_members->Add(nodename); + + my_master_zone->Set("__name", "master"); + my_master_zone->Set("__type", "Zone"); + my_master_zone->Set("//this is the local agent master named ", "master"); + my_master_zone->Set("endpoints", my_master_zone_members); + + /* store the local config */ + my_config->Add(my_master_endpoint); + my_config->Add(my_master_zone); + + /* write the newly generated configuration */ + String zones_path = Application::GetSysconfDir() + "/icinga2/zones.conf"; + + AgentUtility::WriteAgentConfigObjects(zones_path, my_config); + + return 0; +} + /* * This is ugly and requires refactoring into a generic config writer class. * TODO. diff --git a/lib/cli/agentutility.hpp b/lib/cli/agentutility.hpp index 7823a2a10..649ad6a0d 100644 --- a/lib/cli/agentutility.hpp +++ b/lib/cli/agentutility.hpp @@ -58,8 +58,10 @@ public: static bool WriteAgentConfigObjects(const String& filename, const Array::Ptr& objects); + /* agent setup helpers */ static int GenerateAgentIcingaConfig(const std::vector& endpoints, const String& nodename); + static int GenerateAgentMasterIcingaConfig(const String& nodename); private: AgentUtility(void); diff --git a/lib/cli/pkiutility.cpp b/lib/cli/pkiutility.cpp index 76f5cb441..7cdc87977 100644 --- a/lib/cli/pkiutility.cpp +++ b/lib/cli/pkiutility.cpp @@ -257,22 +257,3 @@ int PkiUtility::RequestCertificate(const String& host, const String& port, const return 0; } - - -bool PkiUtility::CopyCertFile(const String& source, const String& target) -{ - /* - if (PathExists(target)) { - Log(LogWarning, "Utility") - << "Target file '" << target << "' already exists."; - return false; - } - - std::ifstream ifs(source, std::ios::binary); - std::ofstream ofs(target, std::ios::binary); - - ofs << ifs.rdbuf(); - */ - - return true; -} diff --git a/lib/cli/pkiutility.hpp b/lib/cli/pkiutility.hpp index 0e965ab6f..baaba7e6f 100644 --- a/lib/cli/pkiutility.hpp +++ b/lib/cli/pkiutility.hpp @@ -45,8 +45,6 @@ public: static int RequestCertificate(const String& host, const String& port, const String& keyfile, const String& certfile, const String& cafile, const String& trustedfile, const String& ticket); - static bool CopyCertFile(const String& source, const String& target); - private: PkiUtility(void);