]> granicus.if.org Git - icinga2/commitdiff
Make "agent setup" ask the user for the endpoint names
authorGunnar Beutner <gunnar@beutner.name>
Thu, 23 Oct 2014 02:23:22 +0000 (04:23 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Thu, 23 Oct 2014 02:23:22 +0000 (04:23 +0200)
refs #7423

agent/windows-setup-agent/AgentWizard.Designer.cs
agent/windows-setup-agent/AgentWizard.cs
agent/windows-setup-agent/EndpointInputBox.Designer.cs
agent/windows-setup-agent/EndpointInputBox.cs
agent/windows-setup-agent/EndpointInputBox.resx
lib/cli/agentsetupcommand.cpp
lib/cli/agentutility.cpp

index 2216b4384d98a33c6b822c63d84df00aeaebcdb3..d558541248158a8dcdb8cf59fcd55bee499511e4 100644 (file)
@@ -74,6 +74,7 @@
                        this.txtError = new System.Windows.Forms.TextBox();
                        this.lblError = new System.Windows.Forms.Label();
                        this.picBanner = new System.Windows.Forms.PictureBox();
+                       this.colInstanceName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
                        this.tabFinish.SuspendLayout();
                        this.tabConfigure.SuspendLayout();
                        this.tabParameters.SuspendLayout();
                        // lvwEndpoints
                        // 
                        this.lvwEndpoints.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.colInstanceName,
             this.colHost,
             this.colPort});
+                       this.lvwEndpoints.FullRowSelect = true;
                        this.lvwEndpoints.Location = new System.Drawing.Point(11, 83);
                        this.lvwEndpoints.Name = "lvwEndpoints";
                        this.lvwEndpoints.Size = new System.Drawing.Size(500, 176);
                        // colHost
                        // 
                        this.colHost.Text = "Host";
-                       this.colHost.Width = 300;
+                       this.colHost.Width = 200;
                        // 
                        // colPort
                        // 
                        this.colPort.Text = "Port";
-                       this.colPort.Width = 120;
+                       this.colPort.Width = 80;
                        // 
                        // rdoNoMaster
                        // 
                        this.picBanner.TabIndex = 1;
                        this.picBanner.TabStop = false;
                        // 
+                       // colInstanceName
+                       // 
+                       this.colInstanceName.Text = "Instance Name";
+                       this.colInstanceName.Width = 200;
+                       // 
                        // AgentWizard
                        // 
                        this.AcceptButton = this.btnNext;
                private System.Windows.Forms.Label lblError;
                private System.Windows.Forms.TextBox txtTicket;
                private System.Windows.Forms.Label lblTicket;
+               private System.Windows.Forms.ColumnHeader colInstanceName;
        }
 }
 
index 3ff7a8d740d03bc47fa714edb738388dcbdca119..ec992aad98a8c0bc550633ca5d32ff1459119112 100644 (file)
@@ -66,6 +66,21 @@ namespace Icinga
                        }
                }
 
+               private bool GetMasterHostPort(out string host, out string port)
+               {
+                       foreach (ListViewItem lvi in lvwEndpoints.Items) {
+                               if (lvi.SubItems.Count > 1) {
+                                       host = lvi.SubItems[1].Text;
+                                       port = lvi.SubItems[2].Text;
+                                       return true;
+                               }
+                       }
+
+                       host = null;
+                       port = null;
+                       return false;
+               }
+
                private void EnableFeature(string feature)
                {
                        using (FileStream fp = File.Open(Icinga2InstallDir + String.Format("\\etc\\icinga2\\features-enabled\\{0}.conf", feature), FileMode.Create)) {
@@ -185,10 +200,16 @@ namespace Icinga
                                args += " --master";
 
                        Invoke((MethodInvoker)delegate {
-                               args += " --master_host " + lvwEndpoints.Items[0].SubItems[0].Text + "," + lvwEndpoints.Items[0].SubItems[1].Text;
+                               string master_host, master_port;
+                               GetMasterHostPort(out master_host, out master_port);
+
+                               args += " --master_host " + master_host + "," + master_port;
 
                                foreach (ListViewItem lvi in lvwEndpoints.Items) {
-                                       args += " --endpoint " + lvi.SubItems[0].Text + "," + lvi.SubItems[1].Text;
+                                       args += " --endpoint " + lvi.SubItems[0].Text;
+                                       
+                                       if (lvi.SubItems.Count > 1)
+                                               args += "," + lvi.SubItems[1].Text + "," + lvi.SubItems[2].Text;
                                }
                        });
 
@@ -221,6 +242,13 @@ namespace Icinga
                            "--scm-uninstall",
                            out output);
 
+                       if (!RunProcess(Icinga2InstallDir + "\\sbin\\icinga2.exe",
+                           "daemon --validate",
+                           out output)) {
+                               ShowErrorText(output);
+                               return;
+                       }
+
                        if (!RunProcess(Icinga2InstallDir + "\\sbin\\icinga2.exe",
                            "--scm-install daemon",
                            out output)) {
@@ -291,9 +319,17 @@ namespace Icinga
                                        return;
                                }
 
-                               if (rdoNoMaster.Checked && lvwEndpoints.Items.Count == 0) {
-                                       Warning("You need to add at least one master endpoint.");
-                                       return;
+                               if (rdoNoMaster.Checked) {
+                                       if (lvwEndpoints.Items.Count == 0) {
+                                               Warning("You need to add at least one master endpoint.");
+                                               return;
+                                       }
+
+                                       string host, port;
+                                       if (!GetMasterHostPort(out host, out port)) {
+                                               Warning("Please enter a remote host and port for at least one of your endpoints.");
+                                               return;
+                                       }
                                }
 
                                if (rdoListener.Checked && (txtListenerPort.Text == "")) {
@@ -328,7 +364,10 @@ namespace Icinga
                        if (tbcPages.SelectedTab == tabRetrieveCertificate) {
                                ListViewItem lvi = lvwEndpoints.Items[0];
 
-                               Thread thread = new Thread((ThreadStart)delegate { VerifyCertificate(lvi.SubItems[0].Text, lvi.SubItems[1].Text); });
+                               string master_host, master_port;
+                               GetMasterHostPort(out master_host, out master_port);
+
+                               Thread thread = new Thread((ThreadStart)delegate { VerifyCertificate(master_host, master_port); });
                                thread.Start();
                        }
 
@@ -399,6 +438,8 @@ namespace Icinga
                        txtX509Issuer.Text = certificate.Issuer;
                        txtX509Subject.Text = certificate.Subject;
 
+                       lvwX509Fields.Items.Clear();
+
                        AddCertificateField("Version", "V" + certificate.Version.ToString());
                        AddCertificateField("Serial number", certificate.SerialNumber);
                        AddCertificateField("Signature algorithm", certificate.SignatureAlgorithm.FriendlyName);
@@ -422,8 +463,12 @@ namespace Icinga
                                return;
 
                        ListViewItem lvi = new ListViewItem();
-                       lvi.Text = eib.txtHost.Text;
-                       lvi.SubItems.Add(eib.txtPort.Text);
+                       lvi.Text = eib.txtInstanceName.Text;
+
+                       if (eib.chkConnect.Checked) {
+                               lvi.SubItems.Add(eib.txtHost.Text);
+                               lvi.SubItems.Add(eib.txtPort.Text);
+                       }
 
                        lvwEndpoints.Items.Add(lvi);
                }
index 27236f75810b050f21dd33dc37dcc8bce0640253..c06ec16d0b2ec41ebf10ee0272ce405013995c4f 100644 (file)
@@ -27,7 +27,6 @@
                /// </summary>
                private void InitializeComponent()
                {
-                       this.components = new System.ComponentModel.Container();
                        this.btnOK = new System.Windows.Forms.Button();
                        this.btnCancel = new System.Windows.Forms.Button();
                        this.txtHost = new System.Windows.Forms.TextBox();
                        this.label1 = new System.Windows.Forms.Label();
                        this.lblHost = new System.Windows.Forms.Label();
                        this.lblPort = new System.Windows.Forms.Label();
-                       this.errErrorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-                       ((System.ComponentModel.ISupportInitialize)(this.errErrorProvider)).BeginInit();
+                       this.lblInstanceName = new System.Windows.Forms.Label();
+                       this.txtInstanceName = new System.Windows.Forms.TextBox();
+                       this.chkConnect = new System.Windows.Forms.CheckBox();
                        this.SuspendLayout();
                        // 
                        // btnOK
                        // 
-                       this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
-                       this.btnOK.Location = new System.Drawing.Point(150, 120);
+                       this.btnOK.Location = new System.Drawing.Point(196, 171);
                        this.btnOK.Name = "btnOK";
                        this.btnOK.Size = new System.Drawing.Size(75, 23);
-                       this.btnOK.TabIndex = 2;
+                       this.btnOK.TabIndex = 4;
                        this.btnOK.Text = "OK";
                        this.btnOK.UseVisualStyleBackColor = true;
+                       this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
                        // 
                        // btnCancel
                        // 
                        this.btnCancel.CausesValidation = false;
                        this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-                       this.btnCancel.Location = new System.Drawing.Point(231, 120);
+                       this.btnCancel.Location = new System.Drawing.Point(277, 171);
                        this.btnCancel.Name = "btnCancel";
                        this.btnCancel.Size = new System.Drawing.Size(75, 23);
-                       this.btnCancel.TabIndex = 3;
+                       this.btnCancel.TabIndex = 5;
                        this.btnCancel.Text = "Cancel";
                        this.btnCancel.UseVisualStyleBackColor = true;
                        // 
                        // txtHost
                        // 
-                       this.txtHost.Location = new System.Drawing.Point(55, 49);
+                       this.txtHost.Enabled = false;
+                       this.txtHost.Location = new System.Drawing.Point(101, 103);
                        this.txtHost.Name = "txtHost";
                        this.txtHost.Size = new System.Drawing.Size(251, 20);
-                       this.txtHost.TabIndex = 0;
-                       this.txtHost.Validating += new System.ComponentModel.CancelEventHandler(this.txtHost_Validating);
+                       this.txtHost.TabIndex = 2;
                        // 
                        // txtPort
                        // 
-                       this.txtPort.Location = new System.Drawing.Point(55, 80);
+                       this.txtPort.Enabled = false;
+                       this.txtPort.Location = new System.Drawing.Point(101, 134);
                        this.txtPort.Name = "txtPort";
                        this.txtPort.Size = new System.Drawing.Size(100, 20);
-                       this.txtPort.TabIndex = 1;
+                       this.txtPort.TabIndex = 3;
                        this.txtPort.Text = "5665";
-                       this.txtPort.Validating += new System.ComponentModel.CancelEventHandler(this.txtPort_Validating);
                        // 
                        // label1
                        // 
                        this.label1.AutoSize = true;
-                       this.label1.Location = new System.Drawing.Point(17, 16);
+                       this.label1.Location = new System.Drawing.Point(12, 9);
                        this.label1.Name = "label1";
                        this.label1.Size = new System.Drawing.Size(276, 13);
                        this.label1.TabIndex = 4;
@@ -89,7 +89,7 @@
                        // lblHost
                        // 
                        this.lblHost.AutoSize = true;
-                       this.lblHost.Location = new System.Drawing.Point(17, 52);
+                       this.lblHost.Location = new System.Drawing.Point(15, 106);
                        this.lblHost.Name = "lblHost";
                        this.lblHost.Size = new System.Drawing.Size(32, 13);
                        this.lblHost.TabIndex = 5;
                        // lblPort
                        // 
                        this.lblPort.AutoSize = true;
-                       this.lblPort.Location = new System.Drawing.Point(20, 83);
+                       this.lblPort.Location = new System.Drawing.Point(15, 137);
                        this.lblPort.Name = "lblPort";
                        this.lblPort.Size = new System.Drawing.Size(29, 13);
                        this.lblPort.TabIndex = 6;
                        this.lblPort.Text = "Port:";
                        // 
-                       // errErrorProvider
+                       // lblInstanceName
                        // 
-                       this.errErrorProvider.ContainerControl = this;
+                       this.lblInstanceName.AutoSize = true;
+                       this.lblInstanceName.Location = new System.Drawing.Point(15, 41);
+                       this.lblInstanceName.Name = "lblInstanceName";
+                       this.lblInstanceName.Size = new System.Drawing.Size(82, 13);
+                       this.lblInstanceName.TabIndex = 7;
+                       this.lblInstanceName.Text = "Instance Name:";
+                       // 
+                       // txtInstanceName
+                       // 
+                       this.txtInstanceName.Location = new System.Drawing.Point(101, 37);
+                       this.txtInstanceName.Name = "txtInstanceName";
+                       this.txtInstanceName.Size = new System.Drawing.Size(251, 20);
+                       this.txtInstanceName.TabIndex = 0;
+                       // 
+                       // chkConnect
+                       // 
+                       this.chkConnect.AutoSize = true;
+                       this.chkConnect.Location = new System.Drawing.Point(18, 73);
+                       this.chkConnect.Name = "chkConnect";
+                       this.chkConnect.Size = new System.Drawing.Size(141, 17);
+                       this.chkConnect.TabIndex = 1;
+                       this.chkConnect.Text = "Connect to this endpoint";
+                       this.chkConnect.UseVisualStyleBackColor = true;
+                       this.chkConnect.CheckedChanged += new System.EventHandler(this.chkConnect_CheckedChanged);
                        // 
                        // EndpointInputBox
                        // 
                        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                        this.CancelButton = this.btnCancel;
-                       this.ClientSize = new System.Drawing.Size(326, 159);
+                       this.ClientSize = new System.Drawing.Size(360, 202);
+                       this.Controls.Add(this.chkConnect);
+                       this.Controls.Add(this.txtInstanceName);
+                       this.Controls.Add(this.lblInstanceName);
                        this.Controls.Add(this.lblPort);
                        this.Controls.Add(this.lblHost);
                        this.Controls.Add(this.label1);
                        this.ShowInTaskbar = false;
                        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
                        this.Text = "Add Endpoint";
-                       ((System.ComponentModel.ISupportInitialize)(this.errErrorProvider)).EndInit();
                        this.ResumeLayout(false);
                        this.PerformLayout();
 
                private System.Windows.Forms.Label lblPort;
                public System.Windows.Forms.TextBox txtHost;
                public System.Windows.Forms.TextBox txtPort;
-               private System.Windows.Forms.ErrorProvider errErrorProvider;
+               public System.Windows.Forms.TextBox txtInstanceName;
+               private System.Windows.Forms.Label lblInstanceName;
+               public System.Windows.Forms.CheckBox chkConnect;
        }
 }
\ No newline at end of file
index b5469276686e8446dfa53fc7bd88a01d4007fead..62ef8a2751e6fae4f465a5b8ebbc53f4099db2e6 100644 (file)
@@ -15,20 +15,38 @@ namespace Icinga
                        InitializeComponent();
                }
 
-               private void txtHost_Validating(object sender, CancelEventArgs e)
+               private void Warning(string message)
                {
-                       if (txtHost.Text.Length == 0) {
-                               e.Cancel = true;
-                               errErrorProvider.SetError(txtHost, "Please enter a host name.");
-                       }
+                       MessageBox.Show(this, message, Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
+               }
+               
+               private void chkConnect_CheckedChanged(object sender, EventArgs e)
+               {
+                       txtHost.Enabled = chkConnect.Checked;
+                       txtPort.Enabled = chkConnect.Checked;
                }
 
-               private void txtPort_Validating(object sender, CancelEventArgs e)
+               private void btnOK_Click(object sender, EventArgs e)
                {
-                       if (txtPort.Text.Length == 0) {
-                               e.Cancel = true;
-                               errErrorProvider.SetError(txtPort, "Please enter a port.");
+                       if (txtInstanceName.Text.Length == 0) {
+                               Warning("Please enter an instance name.");
+                               return;
                        }
+
+                       if (chkConnect.Checked) {
+                               if (txtHost.Text.Length == 0) {
+                                       Warning("Please enter a host name.");
+                                       return;
+                               }
+
+                               if (txtPort.Text.Length == 0) {
+                                       Warning("Please enter a port.");
+                                       return;
+                               }
+                       }
+
+                       DialogResult = DialogResult.OK;
+                       Close();
                }
        }
 }
index 2a910963868b7c8870f1fcd165158d0731509e3f..7080a7d118e8cd7ec668e9bb0d8e90767e0c7a3c 100644 (file)
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="errErrorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>22, 24</value>
-  </metadata>
 </root>
\ No newline at end of file
index b42886239bf152c61c85cce80185d275d59a3733..b56ffa2b0273023d996312ec781dd033b37a5619 100644 (file)
@@ -60,7 +60,7 @@ void AgentSetupCommand::InitParameters(boost::program_options::options_descripti
                ("zone", po::value<std::string>(), "The name of the local zone")
                ("master_zone", po::value<std::string>(), "The name of the master zone")
                ("master_host", po::value<std::string>(), "The name of the master host for auto-signing the csr")
-               ("endpoint", po::value<std::vector<std::string> >(), "Connect to remote endpoint on host,port")
+               ("endpoint", po::value<std::vector<std::string> >(), "Connect to remote endpoint; syntax: cn,host,port")
                ("listen", po::value<std::string>(), "Listen on host,port")
                ("ticket", po::value<std::string>(), "Generated ticket number for this request")
                ("trustedcert", po::value<std::string>(), "Trusted master certificate file")
@@ -92,13 +92,10 @@ int AgentSetupCommand::Run(const boost::program_options::variables_map& vm, cons
                    << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
        }
 
-       if (vm.count("master")) {
+       if (vm.count("master"))
                return SetupMaster(vm, ap);
-       } else {
+       else
                return SetupAgent(vm, ap);
-       }
-
-       return 0;
 }
 
 int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap)
@@ -209,7 +206,7 @@ int AgentSetupCommand::SetupMaster(const boost::program_options::variables_map&
 
 int AgentSetupCommand::SetupAgent(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap)
 {
-       /* require ticket number (generated on master) */
+       /* require ticket number (generated on master) and at least one endpoint */
 
        if (!vm.count("ticket")) {
                Log(LogCritical, "cli")
@@ -218,6 +215,11 @@ int AgentSetupCommand::SetupAgent(const boost::program_options::variables_map& v
                return 1;
        }
 
+       if (!vm.count("endpoint")) {
+               Log(LogCritical, "cli", "You need to specify at least one endpoint (--endpoint).");
+               return 1;
+       }
+
        String ticket = vm["ticket"].as<std::string>();
 
        Log(LogInformation, "cli")
index 78b903a7f8e80faf000943275c4a56ec7c68218f..af49ff1ae8bfe82d9199192a42162cbba15b55c2 100644 (file)
@@ -280,17 +280,17 @@ int AgentUtility::GenerateAgentIcingaConfig(const std::vector<std::string>& endp
 
                Dictionary::Ptr my_master_endpoint = make_shared<Dictionary>();
 
-               if (tokens.size() == 1 || tokens.size() == 2)
-                       my_master_endpoint->Set("host", tokens[0]);
+               if (tokens.size() > 1)
+                       my_master_endpoint->Set("host", tokens[1]);
 
-               if (tokens.size() == 2)
-                       my_master_endpoint->Set("port", tokens[1]);
+               if (tokens.size() > 2)
+                       my_master_endpoint->Set("port", tokens[2]);
 
-               my_master_endpoint->Set("__name", String(endpoint));
+               my_master_endpoint->Set("__name", tokens[0]);
                my_master_endpoint->Set("__type", "Endpoint");
 
                /* save endpoint in master zone */
-               my_master_zone_members->Add(String(endpoint)); //find a better name
+               my_master_zone_members->Add(tokens[0]);
 
                my_config->Add(my_master_endpoint);
        }