public static IOfferRemoteOperations Restart(this IOfferRemoteOperations remote, int delayInSeconds = 10) { var restartOperation = new RestartComputerOperation(delayInSeconds); OperationExecutor.Execute((RemoteBuilder)remote, restartOperation); return(remote); }
/// <summary> /// Creates a directory, if it not already exists. /// </summary> /// <param name="remote"></param> /// <param name="path">Directory path</param> /// <returns></returns> public static IOfferRemoteOperations CreateDirectory(this IOfferRemoteOperations remote, string path) { var operation = new CreateDirectoryOperation(path); OperationExecutor.Execute((RemoteBuilder)remote, operation); return(remote); }
/// <summary> /// Adds user to group /// </summary> /// <param name="configuration"></param> /// <param name="userName">Username</param> /// <param name="groupName">Group name</param> /// <returns></returns> public static IOfferRemoteOperations AddUserToLocalGroup(this IOfferRemoteOperations configuration, string userName, string groupName) { var operation = new AddUserToLocalGroupOperation(userName, groupName); OperationExecutor.Execute((RemoteBuilder)configuration, operation); return(configuration); }
public void ConfigureRemoteScripts(IOfferRemoteOperations server, IEnumerable <string> scripts) { foreach (var script in scripts) { server.Deploy.File(script, @"%temp%\ConDepPSScripts\" + Path.GetFileName(script)); } }
private void DeployPsCmdLet(IOfferRemoteOperations server) { //var condition = WebDeployExecuteCondition<ProvideForInfrastructure>.IsFailure(p => p.PowerShell("import-module ApplicationRequestRouting")); var dir = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "ArrLoadBalancer"); server.Deploy.Directory(dir, @"%temp%\ApplicationRequestRouting"); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var result = Result.SuccessChanged(); result.Data.HasPrivateKey = false; result.Data.PrivateKeyPermissionsSet = false; var path = Path.GetFullPath(_path); var cert = string.IsNullOrWhiteSpace(_password) ? new X509Certificate2(path) : new X509Certificate2(path, _password); if (cert.HasPrivateKey) { result.Data.HasPrivateKey = true; string psUserArray = "@()"; if (_certOptions != null && _certOptions.Values.PrivateKeyPermissions.Count > 0) { var formattedUserArray = _certOptions.Values.PrivateKeyPermissions.Select(user => "'" + user + "'").ToList(); var users = string.Join(",", formattedUserArray); psUserArray = $"@({users})"; result.Data.PrivateKeyPermissionsSet = true; } var destPath = $@"{"%windir%"}\temp\{Guid.NewGuid()}.pfx"; remote.Deploy.File(path, destPath); remote.Execute.PowerShell("$path=\"" + destPath + "\"; $password='******'; $privateKeyUsers = " + psUserArray + "; [ConDep.Dsl.Remote.Helpers.CertificateInstaller]::InstallPfx($path, $password, $privateKeyUsers);", opt => opt.RequireRemoteLib()); } else { var base64Cert = Convert.ToBase64String(cert.RawData); remote.Execute.PowerShell($"[ConDep.Dsl.Remote.Helpers.CertificateInstaller]::InstallCertFromBase64('{base64Cert}');", opt => opt.RequireRemoteLib()); } return(result); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var installParams = string.Format("/install /serviceName:\"{0}\" /displayName:\"{0}\" {1}", _serviceName, _profile); return(remote.Deploy.WindowsServiceWithInstaller(_serviceName, _serviceName, _sourcePath, _destPath, _serviceInstallerName, installParams, _options).Result); }
public void ConfigureRemoteScripts(IOfferRemoteOperations server, IEnumerable<string> scripts) { foreach (var script in scripts) { server.Deploy.File(script, @"%temp%\ConDepPSScripts\" + Path.GetFileName(script)); } }
public static IOfferRemoteOperations StartConDepNode(this IOfferRemoteOperations remote) { var op = new StartConDepNodeOperation(); Configure.Operation(remote, op); return(remote); }
public static IOfferRemoteOperations StartConDepNode(this IOfferRemoteOperations remote) { var op = new StartConDepNodeOperation(); OperationExecutor.Execute((RemoteBuilder)remote, op); return(remote); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var bindings = _options.Values.HttpBindings.Select(httpBinding => $"@{{protocol='http';bindingInformation='{httpBinding.Ip}:{httpBinding.Port}:{httpBinding.HostName}'}}").ToList(); foreach (var httpsBinding in _options.Values.HttpsBindings) { if (httpsBinding.FindType == X509FindType.FindByThumbprint) { httpsBinding.FindName = httpsBinding.FindName.Replace(" ", ""); } var type = httpsBinding.FindType.GetType(); bindings.Add($"@{{protocol='https';bindingInformation='{httpsBinding.BindingOptions.Ip}:{httpsBinding.BindingOptions.Port}:{httpsBinding.BindingOptions.HostName}';findType=[{type.FullName}]::{httpsBinding.FindType};findValue='{httpsBinding.FindName}'}}"); } remote.Execute.PowerShell($@"New-ConDepIisWebSite '{_webSiteName}' {_id} {"@(" + string.Join(",", bindings) + ")"} { (string.IsNullOrWhiteSpace(_options.Values.PhysicalPath) ? "$null" : "'" + _options.Values.PhysicalPath + "'")} '{_options.Values.AppPool}' '{ _options.Values.LogDirectory}';"); foreach (var webApp in _options.Values.WebApps) { remote.Configure.IISWebApp(webApp.Item1, _webSiteName, webApp.Item2); } return(Result.SuccessChanged()); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var removeFeatures = _featuresToRemove.Count > 0 ? string.Join(",", _featuresToRemove) : "$null"; var addFeatures = string.Join(",", _featuresToAdd); return(remote.Execute.PowerShell(string.Format("Set-ConDepWindowsFeatures {0} {1}", addFeatures, removeFeatures)).Result); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { _api = new Api(new ConDepNodeUrl(server), server.DeploymentUser.UserName, server.DeploymentUser.Password, server.Node.TimeoutInSeconds.Value * 1000); var result = _api.SyncDir(_srcDir, _dstDir); if (result == null) { return(Result.SuccessUnChanged()); } if (result.Log.Count > 0) { foreach (var entry in result.Log) { Logger.Info(entry); } } else { Logger.Info("Nothing to deploy. Everything is in sync."); return(Result.SuccessUnChanged()); } return(Result.SuccessChanged()); }
/// <summary> /// Creates a directory, if it not already exists. /// </summary> /// <param name="remote"></param> /// <param name="path">Directory path</param> /// <returns></returns> public static IOfferRemoteOperations CreateDirectory(this IOfferRemoteOperations remote, string path) { var operation = new CreateDirectoryOperation(path); Configure.Operation(remote, operation); return(remote); }
private void ConfigureCertInstall(IOfferRemoteOperations server, X509Certificate2 cert) { var certScript = string.Format("[byte[]]$byteArray = {0}; $myCert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2(,$byteArray); ", string.Join(",", cert.GetRawCertData())); certScript += string.Format("$store = new-object System.Security.Cryptography.X509Certificates.X509Store('{0}', '{1}'); $store.open(“MaxAllowed”); $store.add($myCert); $store.close();", StoreName.My, StoreLocation.LocalMachine); server.Execute.PowerShell(certScript); }
/// <summary> /// Adds user to group /// </summary> /// <param name="configuration"></param> /// <param name="userName">Username</param> /// <param name="groupName">Group name</param> /// <returns></returns> public static IOfferRemoteOperations AddUserToLocalGroup(this IOfferRemoteOperations configuration, string userName, string groupName) { var operation = new AddUserToLocalGroupOperation(userName, groupName); Configure.Operation(configuration, operation); return(configuration); }
public static IOfferRemoteOperations Restart(this IOfferRemoteOperations remote, int delayInSeconds = 10) { var restartOperation = new RestartComputerOperation(delayInSeconds); Configure.Operation(remote, restartOperation); return(remote); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var dest = "$env:temp"; if (_values != null && !string.IsNullOrWhiteSpace(_values.TargetDir)) { dest = _values.TargetDir; } var uri = new Uri(_url); var fileName = Path.GetFileName(uri.AbsolutePath); var destFile = Path.Combine(dest, fileName); string basicAuth = ""; if (_values.BasicAuth != null) { basicAuth = string.Format(@" $client.Credentials = new-object system.net.networkcredential(""{0}"", ""{1}"")", _values.BasicAuth.Username, _values.BasicAuth.Password); } return(remote.Execute.PowerShell(string.Format(@" $path = $ExecutionContext.InvokeCommand.ExpandString(""{1}"") if((Test-Path $path)) {{ write-host 'File allready exist. Skipping.' }} else {{ $client = new-object System.Net.WebClient {2} $client.DownloadFile(""{0}"", $path ) }}", _url, destFile, basicAuth)).Result); }
protected void ExecuteRemoveService(IOfferRemoteOperations remote) { var remove = $"Remove-ConDepWinService '{_serviceName}' {_values.TimeOutInSeconds} {"$" + _values.IgnoreFailureOnServiceStartStop}"; remote.Execute.PowerShell(remove, o => o.ContinueOnError(_values.IgnoreFailureOnServiceStartStop)); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var builder = new StringBuilder(); CreateKeyCmd(builder, _root.ToString(), new WindowsRegistrySubKey(_key, _defaultValue, _values, _keys)); return(remote.Execute.PowerShell(builder.ToString()).Result); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { return(remote.Execute.PowerShell(string.Format(@"New-ConDepWebApp '{0}' '{1}' {2} {3};" , _webAppName , _webSiteName , (_options == null || string.IsNullOrWhiteSpace(_options.PhysicalPath)) ? "$null" : "'" + _options.PhysicalPath + "'" , (_options == null || string.IsNullOrWhiteSpace(_options.AppPool)) ? "$null" : "'" + _options.AppPool + "'")).Result); }
protected void ExecuteServiceFailure(IOfferRemoteOperations remote) { var serviceFailureCommand = _values.GetServiceFailureCommand(_serviceName); if (!string.IsNullOrWhiteSpace(serviceFailureCommand)) { remote.Execute.DosCommand(serviceFailureCommand); } }
protected void ExecuteUserRights(IOfferRemoteOperations remote) { if (string.IsNullOrWhiteSpace(_values.UserName)) { return; } remote.Execute.PowerShell("$userName=\"" + _values.UserName + "\"; [ConDep.Dsl.Remote.Helpers.LsaWrapperCaller]::AddLogonAsAServiceRights($userName)", opt => opt.RequireRemoteLib()); }
private void Execute(LoadBalanceState state, IOfferRemoteOperations server, string serverNameToChangeStateOn) { server.ExecuteRemote.PowerShell(string.Format(@"import-module $env:temp\ApplicationRequestRouting; Set-WebFarmServerState -State {0} -Name {1} -UseDnsLookup;", state.ToString(), serverNameToChangeStateOn), o => { o.WaitIntervalInSeconds(10); o.RetryAttempts(20); }); }
protected void ExecuteServiceStart(IOfferRemoteOperations remote) { if (!_values.DoNotStart) { var start = $"Start-ConDepWinService '{_serviceName}' {_values.TimeOutInSeconds} {"$" + _values.IgnoreFailureOnServiceStartStop}"; remote.Execute.PowerShell(start, o => o.ContinueOnError( _values.IgnoreFailureOnServiceStartStop)); } }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { _executor.Execute(server, "Start-ConDepNode", mod => { mod.LoadConDepNodeModule = true; mod.LoadConDepModule = false; }, logOutput: false); return(Result.SuccessChanged()); }
private Result InstallMsiFromUrl(IOfferRemoteOperations remote, ServerInfo serverInfo, Uri url) { var dstPath = $@"$env:temp\{Guid.NewGuid() + ".msi"}"; if (InstallCondtion(serverInfo)) { remote.Execute.PowerShell($"Install-ConDepMsiFromUri \"{url}\" \"{dstPath}\"", SetPowerShellOptions); return(Result.SuccessChanged()); } return(Result.SuccessUnChanged()); }
private Result InstallMsiFromFile(IOfferRemoteOperations remote, ServerInfo serverInfo, string src) { var dstPath = Path.Combine(@"%temp%\", Path.GetFileName(src)); if (InstallCondtion(serverInfo)) { remote.Deploy.File(src, dstPath); remote.Execute.PowerShell($"Install-ConDepMsiFromFile \"{dstPath}\"", SetPowerShellOptions); return(Result.SuccessChanged()); } return(Result.SuccessUnChanged()); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { ExecuteRemoveService(remote); ExecuteDeployment(remote); ExecuteInstallService(remote); ExecuteUserRights(remote); ExecuteServiceFailure(remote); ExecuteServiceConfig(remote); ExecuteServiceStart(remote); return(Result.SuccessChanged()); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { return(remote.Execute.PowerShell(string.Format(@" $inherit = [system.security.accesscontrol.InheritanceFlags]""{0}"" $propagation = [system.security.accesscontrol.PropagationFlags]""{1}"" $directory = ""{2}"" $acl = Get-Acl $directory $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(""{3}"", ""{4}"", $inherit, $propagation, ""{5}"") $acl.AddAccessRule($accessRule) Set-Acl -aclobject $acl $directory ", _options.Inheritance, _options.Propagation, _fileOrFolder, _user, _accessRights, _options.Type)).Result); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { var result = Result.SuccessUnChanged(); result.Data.CausedRestart = false; string uacEnabled = $@" $regKey = Get-ItemProperty -Path hklm:software\microsoft\windows\currentversion\policies\system -Name ""EnableLUA"" return $regKey.EnableLUA -eq ${!_enabled}"; const string restartNeeded = @" $restartEnvVar = [Environment]::GetEnvironmentVariable(""CONDEP_RESTART_NEEDED"",""Machine"") return $restartEnvVar -eq 'true' "; //Assume restart is not necessary. remote.Configure.EnvironmentVariable("CONDEP_RESTART_NEEDED", "false", EnvironmentVariableTarget.Machine); //Set uac if not set. Set env variable for restarting server necessary. var uacExecutionResult = ((Collection <PSObject>)remote.Execute.PowerShell(uacEnabled).Result.Data.PsResult).First().ToString().ToLowerInvariant(); var uacResult = Convert.ToBoolean(uacExecutionResult); if (uacResult == true) { result.Changed = true; remote.Configure .WindowsRegistry(reg => reg.SetValue( WindowsRegistryRoot.HKEY_LOCAL_MACHINE, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", "EnableLUA", _enabled ? "1" : "0", RegistryValueKind.DWord ) ) .EnvironmentVariable("CONDEP_RESTART_NEEDED", "true", EnvironmentVariableTarget.Machine); } //Restart server and set env variable for restart NOT necessary, since the machine rebooted. var restartExecutionResult = ((Collection <PSObject>)remote.Execute.PowerShell(restartNeeded).Result.Data.PsResult).First().ToString().ToLowerInvariant(); var restartResult = Convert.ToBoolean(restartExecutionResult); if (restartResult == true) { result.Data.CausedRestart = true; remote .Restart() .Configure.EnvironmentVariable("CONDEP_RESTART_NEEDED", "false", EnvironmentVariableTarget.Machine); } return(result); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { token.ThrowIfCancellationRequested(); Logger.WithLogSection(string.Format("Stopping ConDepNode on server {0}", server.Name), () => { var executor = new PowerShellExecutor(); executor.Execute(server, "Stop-ConDepNode", mod => { mod.LoadConDepModule = false; mod.LoadConDepNodeModule = true; }, logOutput: false); }); return Result.SuccessUnChanged(); }
public static void Operation(IOfferRemoteOperations remote, IExecuteRemotely operation) { if (remote is RemoteOperationsBuilder) { var seqContainer = remote as RemoteOperationsBuilder; seqContainer.AddOperation(operation); return; } if (remote is RemoteCompositeBuilder) { var seqContainer = remote as RemoteCompositeBuilder; seqContainer.CompositeSequence.Add(operation); return; } throw new Exception(string.Format("Type {0} not currently supported.", remote.GetType().Name)); }
public override Result Execute(IOfferRemoteOperations remote, ServerConfig server, ConDepSettings settings, CancellationToken token) { token.ThrowIfCancellationRequested(); Logger.WithLogSection("Pre-Operations", () => { server.GetServerInfo().TempFolderDos = string.Format(TMP_FOLDER, "%windir%"); Logger.Info(string.Format("Dos temp folder is {0}", server.GetServerInfo().TempFolderDos)); server.GetServerInfo().TempFolderPowerShell = string.Format(TMP_FOLDER, "$env:windir"); Logger.Info(string.Format("PowerShell temp folder is {0}", server.GetServerInfo().TempFolderPowerShell)); PublishConDepNode(server, settings); var scriptPublisher = new PowerShellScriptPublisher(settings, server); Logger.WithLogSection("Copying external scripts", () => scriptPublisher.PublishScripts()); Logger.WithLogSection("Copying remote helper assembly", () => scriptPublisher.PublishRemoteHelperAssembly()); InstallChocolatey(server, settings); }); return Result.SuccessUnChanged(); }
public abstract void Configure(IOfferRemoteOperations server, ConDepSettings settings);
private void ConfigureCertInstall(IOfferRemoteOperations server, X509Certificate2 cert) { var certScript = string.Format("[byte[]]$byteArray = {0}; $myCert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2(,$byteArray); ", string.Join(",", cert.GetRawCertData())); certScript += string.Format("$store = new-object System.Security.Cryptography.X509Certificates.X509Store('{0}', '{1}'); $store.open(“MaxAllowed”); $store.add($myCert); $store.close();", StoreName.My, StoreLocation.LocalMachine); server.ExecuteRemote.PowerShell(certScript, o => o.WaitIntervalInSeconds(15).RetryAttempts(3)); }
public static void Operation(IOfferRemoteOperations remote, RemoteCompositeOperation operation) { var seqContainer = remote as RemoteCompositeBuilder; seqContainer.CompositeSequence.NewCompositeSequence(operation); }