]> granicus.if.org Git - icinga2/commitdiff
Cli: Fix setup agent --master and use Utility::FileCopy()
authorMichael Friedrich <michael.friedrich@netways.de>
Wed, 22 Oct 2014 17:27:21 +0000 (19:27 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Wed, 22 Oct 2014 17:27:21 +0000 (19:27 +0200)
refs #7423

lib/cli/agentsetupcommand.cpp
lib/cli/agentutility.cpp
lib/cli/agentutility.hpp
lib/cli/pkiutility.cpp
lib/cli/pkiutility.hpp

index a55937209b6c39be43f56a8a7d7fff430b0fa40e..a83e16e532e058f8adde4616f6742f038f2d5fb4 100644 (file)
@@ -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<std::string>& 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
         */
index 7306281f269281368a86a96bd12dcd9016405d71..13a9cd4d970b4e88fcb4e71d8ffbbfdfdec93683 100644 (file)
@@ -325,6 +325,37 @@ int AgentUtility::GenerateAgentIcingaConfig(const std::vector<std::string>& endp
        return 0;
 }
 
+int AgentUtility::GenerateAgentMasterIcingaConfig(const String& nodename)
+{
+       Array::Ptr my_config = make_shared<Array>();
+
+       /* store the local generated agent master configuration */
+       Dictionary::Ptr my_master_endpoint = make_shared<Dictionary>();
+       Dictionary::Ptr my_master_zone = make_shared<Dictionary>();
+       Array::Ptr my_master_zone_members = make_shared<Array>();
+
+       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.
index 7823a2a10880f650e377da3a57d626b7ebd4e4d9..649ad6a0da7e4351198ef1a8aefa40c845c18539 100644 (file)
@@ -58,8 +58,10 @@ public:
 
        static bool WriteAgentConfigObjects(const String& filename, const Array::Ptr& objects);
 
+
        /* agent setup helpers */
        static int GenerateAgentIcingaConfig(const std::vector<std::string>& endpoints, const String& nodename);
+       static int GenerateAgentMasterIcingaConfig(const String& nodename);
 
 private:
        AgentUtility(void);
index 76f5cb4418e22f1650271d67a73deb39473d0b21..7cdc87977a5007d1ea4f37c40420c5ac82dc76bd 100644 (file)
@@ -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;
-}
index 0e965ab6ff05c56265b5c6d1d9554351c40f0f43..baaba7e6f22986ffdb2448bab0a36a1c23916b72 100644 (file)
@@ -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);