/// <summary> /// Returns metrics definitions for a given iscsiserver /// </summary> /// <param name="iscsiServer"></param> /// <param name="deviceName"></param> /// <returns></returns> public static IEnumerable <MetricDefinition> GetMetricsDefinition( this ISCSIServer iscsiServer, string deviceName) { return(iscsiServer.Client.IscsiServers.ListMetricDefinition( deviceName, iscsiServer.Name, iscsiServer.ResourceGroupName, iscsiServer.ManagerName)); }
public void TestCreateOrUpdateIscsiServer() { try { //Check if atleast a device is registered to the manager. var devices = Helpers.CheckAndGetDevicesByStatus(this, DeviceStatus.ReadyToSetup, 1); Assert.True(devices != null && devices.FirstOrDefault() != null, "No devices were found to be registered in the manger:" + this.ManagerName); // Get the first device Device device = devices.FirstOrDefault(); var sacCreated = TestUtilities.GetStorageAccountCredential( this.Client, TestConstants.DefaultSacName, this.ResourceGroupName, this.ManagerName); var storageDomain = TestUtilities.GetStorageDomain( TestConstants.DefaultStorageDomainIscsiServerNamePrefix + device.Name, sacCreated.Id, this.Client, this.ResourceGroupName, this.ManagerName); Assert.True( storageDomain != null, $"StorageDomain not found: {storageDomain.Name}"); // Create BackupScheduleGroup var bsg = TestUtilities.GetBackupScheduleGroup( device.Name, TestConstants.DefaultBackupSchGroupName, this.Client, this.ResourceGroupName, this.ManagerName); // Create IscsiServer var iscsiServer = new ISCSIServer( this.Client, this.ResourceGroupName, this.ManagerName, device.Name); iscsiServer.Initialize(storageDomain.Id, bsg.Id); var iscsiServerCreated = iscsiServer.CreateOrUpdate(device.Name); iscsiServerCreated.Description = "Updated desc of the iscsiServer"; iscsiServerCreated.CreateOrUpdate(iscsiServer.Name); } catch (Exception e) { Assert.Null(e); } }
public static void StartCommand(string[] args) { if (m_server == null) { if (m_targets.Count > 0) { KeyValuePairList <string, string> parameters = ParseParameters(args, 1); if (!VerifyParameters(parameters, "port", "log")) { Console.WriteLine(); Console.WriteLine("Invalid parameter"); HelpStart(); return; } int port = DefaultISCSIPort; if (parameters.ContainsKey("port")) { port = Conversion.ToInt32(parameters.ValueOf("port"), DefaultISCSIPort); } string logFile = String.Empty; if (parameters.ContainsKey("log")) { logFile = parameters.ValueOf("log"); } m_server = new ISCSIServer(m_targets, port, logFile); try { ISCSIServer.Log("Starting Server"); } catch (IOException) { Console.WriteLine("Could not append to log file"); return; } try { m_server.Start(); Console.WriteLine("Server started, listening on port {0}", port); } catch (SocketException) { Console.WriteLine("Could not start iSCSI server"); m_server.Stop(); m_server = null; } } else { Console.WriteLine("No disks have been attached"); } } }
/// <summary> /// Returns chap settings for the given device /// </summary> /// <param name="iscsiServer"></param> /// <param name="deviceName"></param> /// <returns></returns> public static IEnumerable <ChapSettings> GetChapSettings( this ISCSIServer iscsiServer, string deviceName) { var chapSettings = iscsiServer.Client.ChapSettings.ListByDevice( deviceName, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); return(chapSettings); }
/// <summary> /// Returns metrics for a given iscsiserver /// </summary> /// <param name="iscsiServer"></param> /// <param name="deviceName"></param> /// <param name="odataQuery"></param> /// <returns></returns> public static IEnumerable <Metrics> GetMetrics( this ISCSIServer iscsiServer, string deviceName, ODataQuery <MetricFilter> odataQuery) { return(iscsiServer.Client.IscsiServers.ListMetrics( deviceName, iscsiServer.Name, iscsiServer.ResourceGroupName, iscsiServer.ManagerName, odataQuery)); }
public static void StopCommand(string[] args) { if (m_server != null) { m_server.Stop(); m_server = null; Console.WriteLine("iSCSI target is stopping"); } else { Console.WriteLine("iSCSI target has not been started"); } }
/// <summary> /// Triggers clone operation on a iscsiserver for given backupset /// </summary> /// <param name="backupSet"></param> /// <param name="deviceName"></param> /// <param name="isciServer"></param> /// <param name="backupElementName"></param> /// <param name="endPointName"></param> public static void Clone( this Backup backupSet, string deviceName, ISCSIServer isciServer, string backupElementName, string endPointName) { var device = backupSet.Client.Devices.Get( deviceName, backupSet.ResourceGroupName, backupSet.ManagerName); Assert.True( device != null, "no matching device found with name:" + deviceName); Assert.True( isciServer != null, "iscsiServer param is null"); var restoreIscsiDisk = new ISCSIDisk( backupSet.Client, backupSet.ResourceGroupName, backupSet.ManagerName, endPointName); restoreIscsiDisk.Initialize(DataPolicy.Tiered); restoreIscsiDisk.Description = "Restore Disk "; var cloneRequest = new CloneRequest() { NewEndpointName = endPointName, TargetAccessPointId = isciServer.Id, TargetDeviceId = device.Id, Disk = restoreIscsiDisk }; backupSet.Client.Backups.Clone( device.Name.GetDoubleEncoded(), backupSet.Name.GetDoubleEncoded(), backupElementName, cloneRequest, backupSet.ResourceGroupName, backupSet.ManagerName); }
/// <summary> /// Returns disks from a given iscsiserver on a device /// </summary> /// <param name="iscsiServer"></param> /// <param name="deviceName"></param> /// <returns></returns> public static IEnumerable <ISCSIDisk> GetIscsiDisks( this ISCSIServer iscsiServer, string deviceName) { var iscsiDisks = iscsiServer.Client.IscsiDisks.ListByIscsiServer( deviceName.GetDoubleEncoded(), iscsiServer.Name.GetDoubleEncoded(), iscsiServer.ResourceGroupName, iscsiServer.ManagerName); if (iscsiDisks == null || !iscsiDisks.Any()) { // Create a IscsiDisk with Tiered data policy var iscsiDisktoCreate = new ISCSIDisk( iscsiServer.Client, iscsiServer.ResourceGroupName, iscsiServer.ManagerName, TestConstants.DefaultTieredIscsiDiskName); iscsiDisktoCreate.Initialize(DataPolicy.Tiered); var iscsiDisk = iscsiDisktoCreate.CreateOrUpdate( iscsiServer.Name, iscsiServer.Name); } iscsiDisks = iscsiServer.Client.IscsiDisks.ListByIscsiServer( deviceName.GetDoubleEncoded(), iscsiServer.Name.GetDoubleEncoded(), iscsiServer.ResourceGroupName, iscsiServer.ManagerName); foreach (var iscsiDisk in iscsiDisks) { iscsiDisk.SetBaseResourceValues( iscsiServer.Client, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); } return(iscsiDisks); }
/// <summary> /// /// </summary> /// <param name="iscsiServer"></param> /// <returns></returns> public static Backup BackupNow(this ISCSIServer iscsiServer) { var startTime = DateTime.UtcNow; string deviceName = iscsiServer.Name; iscsiServer.Client.IscsiServers.BackupNow( deviceName.GetDoubleEncoded(), iscsiServer.Name.GetDoubleEncoded(), iscsiServer.ResourceGroupName, iscsiServer.ManagerName); var endTime = DateTime.UtcNow; // Query for a backup Expression <Func <BackupFilter, bool> > filter = backupFilter => backupFilter.InitiatedBy == InitiatedBy.Manual; var backupSets = iscsiServer.Client.Backups.ListByDevice( deviceName, iscsiServer.ResourceGroupName, iscsiServer.ManagerName, new ODataQuery <BackupFilter>(filter)); Assert.True(backupSets != null && backupSets.Count() > 0, "No backups found for iscsiserver:" + iscsiServer.Name); var backupElements = backupSets.First().Elements; Assert.True(backupElements != null && backupElements.Count() > 0, "Backups found, however no backup elements were found."); foreach (var bs in backupSets) { bs.SetBaseResourceValues( iscsiServer.Client, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); } return(backupSets.FirstOrDefault()); }
/// <summary> /// Initlaizes a given iscsi server instance /// </summary> /// <param name="iscsiServer"></param> /// <param name="storageDomainId"></param> /// <param name="backupSchGroupId"></param> public static void Initialize( this ISCSIServer iscsiServer, string storageDomainId, string backupSchGroupId) { iscsiServer.StorageDomainId = storageDomainId; iscsiServer.BackupScheduleGroupId = backupSchGroupId; iscsiServer.Description = "Demo ISCSIServer for SDK Test"; iscsiServer.ChapId = ""; iscsiServer.ReverseChapId = ""; var chaps = iscsiServer.Client.ChapSettings.ListByDevice( iscsiServer.Name, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); if (chaps != null && chaps.Any()) { iscsiServer.ChapId = chaps.First().Id; iscsiServer.ReverseChapId = chaps.First().Id; } }
/// <summary> /// Creates or updates a given iscsiserver /// </summary> /// <param name="iscsiServer"></param> /// <param name="deviceName"></param> /// <returns></returns> public static ISCSIServer CreateOrUpdate( this ISCSIServer iscsiServer, string deviceName) { iscsiServer.Client.IscsiServers.CreateOrUpdate( deviceName.GetDoubleEncoded(), iscsiServer.Name.GetDoubleEncoded(), iscsiServer, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); var iscsiServerCreated = iscsiServer.Client.IscsiServers.Get( deviceName, iscsiServer.Name, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); iscsiServerCreated.SetBaseResourceValues( iscsiServer.Client, iscsiServer.ResourceGroupName, iscsiServer.ManagerName); return(iscsiServerCreated); }
private static void ReadConfig() { if (!File.Exists(CONFIG_FILE)) { Console.WriteLine($"{CONFIG_FILE} not found, starting in interactive mode"); return; } var config = JsonConvert.DeserializeObject <Config>(File.ReadAllText(CONFIG_FILE)); if (config.Targets == null || config.Targets.Length == 0) { Console.WriteLine($"No targets configured, starting in interactive mode"); return; } var targets = new List <ISCSITarget>(); foreach (var targetConfig in config.Targets) { Console.WriteLine("Adding target '{0}'", targetConfig.Name); var disks = new List <Disk>(); foreach (var diskConfig in targetConfig.Disks) { Disk disk; var parameters = diskConfig.Parameters as JObject; switch (diskConfig.Kind) { case DiskKind.Raw: Console.WriteLine(" Adding Raw disk image '{0}'. Filename: '{1}'", diskConfig.Name, parameters["File"].Value <string>()); disk = DiskImage.GetDiskImage(parameters["File"].Value <string>()); break; case DiskKind.External: Console.WriteLine(" Adding External disk '{0}'", diskConfig.Name); var type = Type.GetType(parameters["Type"].Value <string>()); var extDisk = Activator.CreateInstance(type) as ExternalDisk; extDisk.SetParameters(parameters); disk = extDisk; break; default: throw new NotImplementedException(); } if (disk is DiskImage) { bool isLocked = ((DiskImage)disk).ExclusiveLock(); if (!isLocked) { Console.WriteLine("Error: Cannot lock the disk image for exclusive access"); return; } } disks.Add(disk); } targets.Add(new ISCSITarget(targetConfig.Name, disks)); } m_server = new ISCSIServer(targets, config.Port, config.Logging?.File); ISCSIServer.LogLevel = config.Logging.Level; ISCSIServer.LogToConsole = config.Logging.LogToConsole; m_server.Start(); Console.WriteLine("Server started, listening on port {0}", config.Port); }
/// <summary> /// Creates or updates the iscsi server. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='deviceName'> /// The device name. /// </param> /// <param name='iscsiServerName'> /// The iscsi server name. /// </param> /// <param name='iscsiServer'> /// The iscsi server. /// </param> /// <param name='resourceGroupName'> /// The resource group name /// </param> /// <param name='managerName'> /// The manager name /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <ISCSIServer> BeginCreateOrUpdateAsync(this IIscsiServersOperations operations, string deviceName, string iscsiServerName, ISCSIServer iscsiServer, string resourceGroupName, string managerName, CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(deviceName, iscsiServerName, iscsiServer, resourceGroupName, managerName, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Creates or updates the iscsi server. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='deviceName'> /// The device name. /// </param> /// <param name='iscsiServerName'> /// The iscsi server name. /// </param> /// <param name='iscsiServer'> /// The iscsi server. /// </param> /// <param name='resourceGroupName'> /// The resource group name /// </param> /// <param name='managerName'> /// The manager name /// </param> public static ISCSIServer BeginCreateOrUpdate(this IIscsiServersOperations operations, string deviceName, string iscsiServerName, ISCSIServer iscsiServer, string resourceGroupName, string managerName) { return(operations.BeginCreateOrUpdateAsync(deviceName, iscsiServerName, iscsiServer, resourceGroupName, managerName).GetAwaiter().GetResult()); }