/// <summary> /// Open terminal connection to target currently selected /// </summary> /// <param name="TargetID"></param> private void ConnectToTarget() { if (lvTargets.SelectedItems.Count == 1) { int TargetID = (int)lvTargets.SelectedItems[0].Tag; TerminalWindow term; string host = string.Empty; try { ConfigDS.ConfigTargetsRow[] targets = configDS.ConfigTargets.Select(string.Format("ConfigTargetID = {0}", TargetID)) as ConfigDS.ConfigTargetsRow[]; if (targets.Length > 0) { ConfigDS.ConfigTargetsRow selectedTarget = targets[0]; host = selectedTarget.TargetIP; SNGDataSet.ScriptSettingRow _localScriptSettings = Scriptngo.Common.SettingsManager.GetCurrentScriptSettings(this.SNGDataSet); ConnectionParameters CP = new ConnectionParameters { DeviceIP = selectedTarget.TargetIP, Protocol = (ConnectionProtocol)Enum.Parse(typeof(ConnectionProtocol), selectedTarget.Protocol, true), Port = selectedTarget.IsPortNull() ? 0 : selectedTarget.Port, DeviceVendor = selectedTarget.DeviceVendor, JumpServer = selectedTarget.JumpServerIP.Trim(), LogonUserName = _localScriptSettings.ScriptingUserName, EnablePassword = _localScriptSettings.DeviceEnablePassword, LogonPassword = _localScriptSettings.ScriptingPassword, AuthType = (SNGTermAuthType)Enum.Parse(typeof(SNGTermAuthType), _localScriptSettings.TerminalAuthType), LineFeedRule = (LineFeedRule)Enum.Parse(typeof(LineFeedRule), _localScriptSettings.TerminalLineFeedRule), EncodingType = (EncodingType)Enum.Parse(typeof(EncodingType), _localScriptSettings.TerminalEncoding), TerminalType = (TerminalType)Enum.Parse(typeof(TerminalType), _localScriptSettings.TerminalType), NewLine = (NewLine)Enum.Parse(typeof(NewLine), _localScriptSettings.TerminalTransmitNL) }; var t = from Form form in Application.OpenForms where form is TerminalWindow select form; if (t.Count() > 0) { term = (TerminalWindow)t.ElementAt(0); } else { term = new TerminalWindow(); } term.MdiParent = this.MdiParent; term.Show(); term.BringToFront(); term.ConnectDisconnectTask(ConnectionTaskAction.Connect, true, CP); } else { MessageBox.Show("Unable to open a terminal because the script target was not found.", "Cannot open terminal", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } catch (Exception Ex) { MessageBox.Show(string.Format("An error occurred while opening connection to {0}. The error was : {1}", host, Ex.Message), "Connection error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
private void PullConfig() { _workInProgressCaption = "Please wait..."; _workInProgressText = "Generating script..."; _workInProgress.Run(); DisableControls(); try { if (cbCreateNewSet.Checked) { DateTime d = DateTime.Now; object o = qTA.CloneConfigSet(_configurationSetID, string.Format("{0}_{1}{2}{3}{4}{5}{6}", tbSelConfigSetName.Text, d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second)); _configurationSetID = Convert.ToInt32(o); } SNGDataSet.ScriptSettingRow _scriptSettings = Scriptngo.Common.SettingsManager.GetCurrentScriptSettings(this.SNGDataSet); string sepChar = _scriptSettings.CSVSeparator; string sExtendedHeader = string.Join(sepChar, Enum.GetNames(typeof(InputFileHeader))); sExtendedHeader += "SetTargetID"; Scriptngo.SNGScriptManager _ScriptManager = ScriptingFormManager.OpenNewScriptingForm(); if (_ScriptManager != null) { ScriptManagers.Add(_ScriptManager); _ScriptManager.UpdateHeader(sExtendedHeader.Split(sepChar.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); _ScriptManager.OnScriptAborted += _ScriptManager_OnScriptAborted; _ScriptManager.OnScriptFinished += _ScriptManager_OnScriptFinished; string thisLine = string.Empty; _ScriptManager.BeginAddingEntries(); try { int lastConfigTargetID = -1; int targetCount = clbTargets.CheckedItems.Count; int targetNum = 1; foreach (var target in configDS.SetTargets) { if (IsTargetSelected(target.ConfigTargetID)) { if (lastConfigTargetID == -1) { lastConfigTargetID = target.ConfigTargetID; } // Open a new ScriptinForm if script needs to be generated per configuration target if (target.ConfigTargetID != lastConfigTargetID && cbScriptPerHost.Checked && (targetNum % (numHostPerForm.Value + 1) == 0)) { if (_ScriptManager != null) { _ScriptManager.EndAddingEntries(); _ScriptManager.ExecuteScript(null, false); } _ScriptManager = ScriptingFormManager.OpenNewScriptingForm(); if (_ScriptManager == null) { break; } _ScriptManager.OnScriptAborted += _ScriptManager_OnScriptAborted; _ScriptManager.OnScriptFinished += _ScriptManager_OnScriptFinished; ScriptManagers.Add(_ScriptManager); _ScriptManager.UpdateHeader(sExtendedHeader.Split(sepChar.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); _ScriptManager.BeginAddingEntries(); lastConfigTargetID = target.ConfigTargetID; } int configSetTargetID = cbCreateNewSet.Checked ? (int)qTA.GetConfigSetTargetID(_configurationSetID, target.ConfigTargetID) : target.ConfigSetTargetID; thisLine = "1," + string.Concat(target.IsJumpServerIPNull() ? "" : target.JumpServerIP.Trim()) + "," + target.DeviceVendor + "," + target.TargetIP + string.Concat(target.IsPortNull() ? "," : string.Format(":{0},", target.Port)) + "" + "," + target.Protocol + "," + "sh run" + ",yes,,," + ",,," + configSetTargetID; if (!string.IsNullOrEmpty(thisLine)) { bool added = _ScriptManager.AddEntry(thisLine, false); if (!added) { if (MessageBox.Show("There was an error adding a script line. Do you want to continue ?", "Script generation error", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == System.Windows.Forms.DialogResult.No) { break; } } } targetNum++; } } } finally { if (_ScriptManager != null) { _ScriptManager.EndAddingEntries(); _ScriptManager.ExecuteScript(null, false); } } } } finally { _workInProgress.Cancel(); _workInProgressSupportCancellation = false; btnPullConfig.Enabled = ScriptManagers.Count == 0; lblOperationInProgress.Text = "Pulling configuration..."; pbPullProgress.Value = 0; pbPullProgress.Maximum = ScriptManagers.Count; pbPullProgress.Visible = ScriptManagers.Count > 1; btnCancelPull.Visible = !btnPullConfig.Enabled; } }
/// <summary> /// Import targets from CSV file /// </summary> private void ImportTargets() { string imputFileName = string.Empty; SNGDataSet.ScriptSettingRow scriptSettings = SettingsManager.GetCurrentScriptSettings(this.SNGDataSet); OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "CSV files|*.csv|All files|*.*"; if (openFileDialog.ShowDialog() == DialogResult.OK) { _workInProgress.Caption = "Please wait"; _workInProgress.Text = "Importing targets..."; bool importOK = true; int dupCount = 0; // count of items marked ignored as duplicate ip detected int errCount = 0; // count of items not elegible for import due to some invalid data string[] allLines; try { try { imputFileName = openFileDialog.FileName; allLines = File.ReadAllLines(imputFileName); if (allLines.Length > 0) { string thisLine = allLines[0]; string[] sections = thisLine.Split(scriptSettings.CSVSeparator.ToCharArray()); string doNotImportColumnText = "< Do not import >"; CSVHeaderMapper mapper = new CSVHeaderMapper(sections, doNotImportColumnText); if (mapper.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (mapper.GetTargetIPColumnIndex != -1) { _workInProgress.Run(); bool wasError = false; for (int i = 1; i < allLines.Length; i++) { try { thisLine = allLines[i]; sections = thisLine.Split(scriptSettings.CSVSeparator.ToCharArray()); string targetName = ""; string targetGroup = "default"; string targetIP = ""; string deviceVendor = ""; string jumpServerIP = ""; string protocol = "SSH2"; int? port = null; string note = ""; // Target IP targetIP = sections[mapper.GetTargetIPColumnIndex].Trim().Truncate(50); if (targetIP.IndexOf(":") > 0) { string[] targetIPPort = targetIP.Split(':'); targetIP = targetIPPort[0]; int p = -1; if (int.TryParse(targetIPPort[1], out p)) { port = p; } } // Target name if (mapper.GetTargetNameColumnIndex >= 0) { targetName = sections[mapper.GetTargetNameColumnIndex].Trim().Truncate(100); } else if (mapper.GetTargetNameColumnIndex == -1) { targetName = mapper.GetTargetNameText.Truncate(300); } // Target group name if (mapper.GetTargetGroupNameColumnIndex >= 0) { targetGroup = sections[mapper.GetTargetGroupNameColumnIndex].Trim().Truncate(100); } else if (mapper.GetTargetGroupNameColumnIndex == -1) { targetGroup = mapper.GetTargeGroupNameText.Truncate(300); } // Jump server ip if (mapper.GetJumpServerIPColumnIndex != -2) { jumpServerIP = sections[mapper.GetJumpServerIPColumnIndex].Trim().Truncate(15); } // Note if (mapper.GetNoteColumnIndex >= 0) { note = sections[mapper.GetNoteColumnIndex].Trim().Truncate(500); } else if (mapper.GetNoteColumnIndex == -1) { note = mapper.GetNoteText; } // Protocol if (mapper.GetProtocolColumnIndex != -2) { protocol = sections[mapper.GetProtocolColumnIndex].Trim().Truncate(15); } // Vendor if (mapper.GetVendorColumnIndex > -1) { deviceVendor = sections[mapper.GetVendorColumnIndex].Trim().Truncate(50); } else { deviceVendor = mapper.GetVendorText; } if (!string.IsNullOrEmpty(targetIP) && targetIP.IsValidIP() && !string.IsNullOrEmpty(targetName)) { int?c = (int?)qTA.GetTargetCount(targetGroup, targetName, port); if (c > 0) { dupCount++; } else { this.configTargetsTA.Insert(targetName, targetIP, deviceVendor, jumpServerIP, protocol, port, note, targetGroup); } } else { errCount++; wasError = true; } _workInProgress.Text = string.Format("Importing items...{0}% done", i * 100 / allLines.Length); } catch { wasError = true; } } try { if (!wasError || MessageBox.Show("Not all input lines could be parsed. Do you want to submit partial import into database ?", "Input errors", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == System.Windows.Forms.DialogResult.Yes) { _workInProgress.Text = "Submitting items to database..."; configTargetsTA.Update(this.configDS); } else { importOK = false; } } catch (ConstraintException) { importOK = false; _workInProgress.Cancel(); string errorText = this.configDS.Tables["ConfigTargets"].Rows[0].RowError; MessageBox.Show(string.Format("There is a constraint problem here : {0}", errorText), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } catch (Exception Ex) { importOK = false; _workInProgress.Cancel(); MessageBox.Show(string.Format("An unexpected error occurred : {0}", Ex.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } _workInProgress.Cancel(); if (importOK) { if (!wasError) { if (dupCount == 0) { MessageBox.Show(string.Format("{0} items processed successfully.", allLines.Length), "Import success", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show(string.Format("{0} items processed successfully : #Duplicate IP :{1} ", allLines.Length, dupCount), "Success, but duplicate IPs detected", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show(string.Format("Some lines could not be imported due to invalid data. #Imported : {0}, #Duplicate IP :{1} #Skipped : {2}", allLines.Length, dupCount, errCount), "Success with errors", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show("The import failed, items were not added to Worklist", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("Device IP column must be specified for input. Cannot import items.", "Selection error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } } catch (Exception Ex) { _workInProgress.Cancel(); MessageBox.Show(string.Format("Unfortunately an error occurred while importing : {0}", Ex.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } finally { _workInProgress.Cancel(); UpdateConfigTargetList(); UpdateSetTargets(); UpdateTargetGroupFilterList(); } } }
private void Deploy() { _workInProgress.Caption = "Please wait..."; _workInProgress.Text = "Generating script..."; _workInProgress.Run(); try { SNGDataSet.ScriptSettingRow _scriptSettings = Scriptngo.Common.SettingsManager.GetCurrentScriptSettings(this.SNGDataSet); string sepChar = _scriptSettings.CSVSeparator; string sExtendedHeader = string.Join(sepChar, Enum.GetNames(typeof(InputFileHeader))); sExtendedHeader += "ConfigLineID"; Scriptngo.SNGScriptManager _ScriptManager = ScriptingFormManager.OpenNewScriptingForm(); if (_ScriptManager != null) { string thisLine = string.Empty; _ScriptManager.SetSavePrompt(false); _ScriptManager.BeginAddingEntries(); try { int lastConfigTargetID = (configDS.Deploy.Rows[0] as ConfigDS.DeployRow).ConfigTargetID; int targetCount = clbTargets.CheckedItems.Count; int targetNum = 0; foreach (var configLine in configDS.Deploy) { if (IsTargetSelected(configLine.ConfigTargetID)) { if (configLine.ConfigTargetID != lastConfigTargetID) { targetNum++; } // Open a new ScriptinForm if script needs to be generated per configuration target if (configLine.ConfigTargetID != lastConfigTargetID && cbScriptPerHost.Checked && (targetNum > 0 && targetNum % numHostPerForm.Value == 0)) { #region Open a new Scripting Form if (_ScriptManager != null) { _ScriptManager.EndAddingEntries(); if (cbStartScripts.Checked) { _ScriptManager.ExecuteScript(null, false); } } _ScriptManager = ScriptingFormManager.OpenNewScriptingForm(); if (_ScriptManager == null) { break; } _ScriptManager.SetSavePrompt(false); _ScriptManager.BeginAddingEntries(); lastConfigTargetID = configLine.ConfigTargetID; #endregion } thisLine = "1," + string.Concat(configLine.IsJumpServerIPNull() ? "" : configLine.JumpServerIP.Trim()) + "," + configLine.DeviceVendor + "," + configLine.TargetIP + string.Concat(configLine.IsPortNull() ? "," : string.Format(":{0},", configLine.Port)) + "" + "," + configLine.Protocol + "," + configLine.ConfigLine + ",yes,,," + ",,,," + configLine.ConfigLineID; if (!string.IsNullOrEmpty(thisLine)) { bool added = _ScriptManager.AddEntry(thisLine, false); if (!added) { if (MessageBox.Show("There was an error adding a script line. Do you want to continue ?", "Script generation error", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == System.Windows.Forms.DialogResult.No) { break; } } } } if (configLine.ConfigTargetID != lastConfigTargetID) { lastConfigTargetID = configLine.ConfigTargetID; } } } finally { if (_ScriptManager != null) { _ScriptManager.EndAddingEntries(); if (cbStartScripts.Checked) { _ScriptManager.ExecuteScript(null, false); } } } } } finally { _workInProgress.Cancel(); _workInProgressSupportCancellation = false; DialogResult = DialogResult.OK; } }