/// <summary> /// Configuration action to enable using dedicated caching on the client role. /// </summary> /// <param name="cloudServiceProject">The cloud service project instance</param> /// <param name="roleName">The role name</param> /// <param name="cacheWorkerRoleName">The dedicated cache worker role name</param> private static void CacheClientRole180( CloudServiceProject cloudServiceProject, string roleName, string cacheWorkerRoleName) { // Add MemcacheShim runtime installation. cloudServiceProject.AddRoleRuntime( cloudServiceProject.Paths, roleName, Resources.CacheRuntimeValue, CurrentVersion); // Fetch web role information. Startup startup = cloudServiceProject.Components.GetRoleStartup(roleName); // Assert that cache runtime is added to the runtime startup. Debug.Assert(Array.Exists <Variable>(CloudRuntime.GetRuntimeStartupTask(startup).Environment, v => v.name.Equals(Resources.RuntimeTypeKey) && v.value.Contains(Resources.CacheRuntimeValue))); if (cloudServiceProject.Components.IsWebRole(roleName)) { WebRole webRole = cloudServiceProject.Components.GetWebRole(roleName); webRole.LocalResources = GeneralUtilities.InitializeIfNull <LocalResources>(webRole.LocalResources); DefinitionConfigurationSetting[] configurationSettings = webRole.ConfigurationSettings; CacheClientCommonConfiguration( cloudServiceProject, roleName, true, cacheWorkerRoleName, webRole.Startup, webRole.Endpoints, webRole.LocalResources, ref configurationSettings); webRole.ConfigurationSettings = configurationSettings; } else { WorkerRole workerRole = cloudServiceProject.Components.GetWorkerRole(roleName); workerRole.LocalResources = GeneralUtilities.InitializeIfNull <LocalResources>(workerRole.LocalResources); DefinitionConfigurationSetting[] configurationSettings = workerRole.ConfigurationSettings; CacheClientCommonConfiguration( cloudServiceProject, roleName, false, cacheWorkerRoleName, workerRole.Startup, workerRole.Endpoints, workerRole.LocalResources, ref configurationSettings); workerRole.ConfigurationSettings = configurationSettings; } // Save changes cloudServiceProject.Components.Save(cloudServiceProject.Paths); }
/// <summary> /// Resolves the service runtimes into downloadable URLs. /// </summary> /// <param name="manifest">The custom manifest file</param> /// <returns>Warning text if any</returns> public string ResolveRuntimePackageUrls(string manifest = null) { ServiceSettings settings = ServiceSettings.Load(Paths.Settings); CloudRuntimeCollection availableRuntimePackages; if (!CloudRuntimeCollection.CreateCloudRuntimeCollection(out availableRuntimePackages, manifest)) { throw new ArgumentException( string.Format(Resources.ErrorRetrievingRuntimesForLocation, settings.Location)); } ServiceDefinition definition = this.Components.Definition; StringBuilder warningText = new StringBuilder(); List <CloudRuntimeApplicator> applicators = new List <CloudRuntimeApplicator>(); if (definition.WebRole != null) { foreach (WebRole role in definition.WebRole.Where(role => role.Startup != null && CloudRuntime.GetRuntimeStartupTask(role.Startup) != null)) { CloudRuntime.ClearRuntime(role); string rolePath = Path.Combine(this.Paths.RootPath, role.name); foreach (CloudRuntime runtime in CloudRuntime.CreateRuntime(role, rolePath)) { CloudRuntimePackage package; runtime.CloudServiceProject = this; if (!availableRuntimePackages.TryFindMatch(runtime, out package)) { string warning; if (!runtime.ValidateMatch(package, out warning)) { warningText.AppendFormat("{0}\r\n", warning); } } applicators.Add(CloudRuntimeApplicator.CreateCloudRuntimeApplicator( runtime, package, role)); } } } if (definition.WorkerRole != null) { foreach (WorkerRole role in definition.WorkerRole.Where(role => role.Startup != null && CloudRuntime.GetRuntimeStartupTask(role.Startup) != null)) { string rolePath = Path.Combine(this.Paths.RootPath, role.name); CloudRuntime.ClearRuntime(role); foreach (CloudRuntime runtime in CloudRuntime.CreateRuntime(role, rolePath)) { CloudRuntimePackage package; runtime.CloudServiceProject = this; if (!availableRuntimePackages.TryFindMatch(runtime, out package)) { string warning; if (!runtime.ValidateMatch(package, out warning)) { warningText.AppendFormat(warning + Environment.NewLine); } } applicators.Add(CloudRuntimeApplicator.CreateCloudRuntimeApplicator(runtime, package, role)); } } } applicators.ForEach <CloudRuntimeApplicator>(a => a.Apply()); this.Components.Save(this.Paths); return(warningText.ToString()); }