private async Task ProcessKubernetes(string path, ProvisioningData provisioningData) { var outline = await LoadKubernetesOutline(path); await ProcessKubernetesProvisioningData(outline, provisioningData); await SaveKubernetesOutline(path, outline); }
private async Task ProcessDocker(string path, ProvisioningData provisioningData) { var dockerOutline = await LoadDockerOutline(path); await ProcessDockerProvisioningData(dockerOutline, provisioningData); await SaveDockerOutline(path, dockerOutline); }
private async Task ProcessDocker(string path, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { DockerOutline dockerOutline = await LoadDockerOutline(path); await ProcessExistingDockerOutline(dockerOutline, provisioningData, iotHubConnectionStrings); await SaveDockerOutline(path, dockerOutline); }
private async Task GenerateKubernetes(string path, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { var outline = new KubernetesOutline(); await GenerateKubernetesOutline(outline, provisioningData, iotHubConnectionStrings); await SaveKubernetesOutline(path, outline); }
private async Task ProcessKubernetes(string path, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { var outline = await LoadKubernetesOutline(path); await ProcessExistingKubernetesOutline(outline, provisioningData, iotHubConnectionStrings); await SaveKubernetesOutline(path, outline); }
private async Task GenerateDocker(string path, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { DockerOutline dockerOutline = new DockerOutline { version = "3.4", services = new Dictionary <string, ServiceDescription>() }; await GenerateDockerOutline(dockerOutline, provisioningData, iotHubConnectionStrings); await SaveDockerOutline(path, dockerOutline); }
private async Task GenerateDockerOutline(DockerOutline outline, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { await Task.Run(() => { int serviceCount = 0; foreach (KeyValuePair <string, List <DeviceDescription> > provisioningEntry in provisioningData) { iotHubConnectionStrings.TryGetValue(provisioningEntry.Key, out string iotHubConnectionString); foreach (DeviceDescription device in provisioningEntry.Value) { serviceCount++; string deviceType = device.name.ToLower(); string serviceKey = $"sh.d.{deviceType}.{provisioningEntry.Key.ToLower()}"; var service = new ServiceDescription { image = GetContainerImageName(deviceType), environment = new List <EnvironmentSetting>() }; service.environment.Add(new EnvironmentSetting { name = HardwareIdSetting, value = device.hardwareId }); service.environment.Add(new EnvironmentSetting { name = DigitalTwinsManagementApiSetting, value = DigitalTwinsApiEndpoint }); service.environment.Add(new EnvironmentSetting { name = MessageIntervalSetting, value = MessageInterval > 0 ? MessageInterval.ToString() : MessageIntervalDefault.ToString() }); service.environment.Add(new EnvironmentSetting { name = SasTokenSetting, value = device.SasToken }); service.environment.Add(new EnvironmentSetting { name = IoTHubConnectionStringSetting, value = iotHubConnectionString }); service.environment.Add(new EnvironmentSetting { name = StartupDelayInSecondsSetting, value = Math.Floor(serviceCount / DigitalTwinsApiCallLimiter).ToString() }); outline.services.Add(serviceKey, service); } } }); }
static void Main(string[] args) { // Update these accordingly for your environment string tenantName = ConfigurationManager.AppSettings["TenantName"]; string ownwerEmail = ConfigurationManager.AppSettings["SiteColTestOwnerEmail"]; //create site collection using the Tenant object. Notice that you will need to have valid app ID and secret for this one var tenantAdminUri = new Uri(String.Format("https://{0}-admin.sharepoint.com", tenantName)); string realm = TokenHelper.GetRealmFromTargetUrl(tenantAdminUri); var token = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, tenantAdminUri.Authority, realm).AccessToken; using (var adminContext = TokenHelper.GetClientContextWithAccessToken(tenantAdminUri.ToString(), token)) { // Let's randomize URL for your testing string webUrl = Guid.NewGuid().ToString().Replace("-", ""); var webFullUrl = String.Format("https://{0}.sharepoint.com/{1}/{2}", tenantName, "sites", webUrl); if (!new SiteRequestManager().SiteURLAlreadyInUse(adminContext, webFullUrl)) { // Call the creation. ProvisioningData data = new ProvisioningData(); data.TenantName = tenantName; // Add request data in data.RequestData = new SiteRequestData() { Title = "Test Provisioning", Template = "STS#0", Lcid = 1033, Owner = "*****@*****.**", StorageMaximumLevel = 100, TimeZoneId = 10, // US east coast Url = webUrl }; // Add branding data structure in data.BrandingData = new SiteBrandingData() { LogoImagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\garagelogo.png"), ThemeBackgrounImagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\garagebg.jpg"), ThemeColorFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\garagewhite.spcolor"), ThemeFontFilePath = "", ThemeName = "Garage", ThemeMasterPageName = "seattle.master" }; // Process request for new site new SiteRequestManager().ProcessSiteCreationRequest(adminContext, data); } } }
// This function will get triggered/executed when a new message is written // on an Azure Queue called queue. public static void ProcessQueueMessage([QueueTrigger(SiteRequestManager.StorageQueueName)] ProvisioningData provisioningData, TextWriter log) { log.WriteLine(string.Format("Received new site request with URL of {0}.", provisioningData.RequestData.Url)); try { //create site collection using the Tenant object. Notice that you will need to have valid app ID and secret for this one var tenantAdminUri = new Uri(String.Format("https://{0}-admin.sharepoint.com", provisioningData.TenantName)); string realm = TokenHelper.GetRealmFromTargetUrl(tenantAdminUri); var token = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, tenantAdminUri.Authority, realm).AccessToken; using (var adminContext = TokenHelper.GetClientContextWithAccessToken(tenantAdminUri.ToString(), token)) { // Resolve full URL var webFullUrl = String.Format("https://{0}.sharepoint.com/{1}/{2}", provisioningData.TenantName, "sites", provisioningData.RequestData.Url); // Ensure that we do not overlap with existing URL if (!new SiteRequestManager().SiteURLAlreadyInUse(adminContext, webFullUrl)) { // Add branding data structure in provisioningData.BrandingData = new SiteBrandingData() { LogoImagePath = Path.Combine(Environment.GetEnvironmentVariable("WEBROOT_PATH"), "Resources\\garagelogo.png"), ThemeBackgrounImagePath = Path.Combine(Environment.GetEnvironmentVariable("WEBROOT_PATH"), "Resources\\garagebg.jpg"), ThemeColorFilePath = Path.Combine(Environment.GetEnvironmentVariable("WEBROOT_PATH"), "Resources\\garagewhite.spcolor"), ThemeFontFilePath = "", ThemeName = "Garage", ThemeMasterPageName = "seattle.master" }; // Process request for new site new SiteRequestManager().ProcessSiteCreationRequest(adminContext, provisioningData); } log.WriteLine(string.Format("Successfully created site collection at {0}.", webFullUrl)); } } catch (Exception ex) { log.WriteLine(string.Format("Site collection creation to URL {0} failed with following details.", provisioningData.RequestData.Url)); log.WriteLine(ex.ToString()); throw; } }
private async Task OnExecuteAsync() { ProvisioningData provisioningData = await LoadProvisioningData(); IoTHubConnectionStrings iotHubConnectionStrings = await LoadIoTHubConnectionStrings(); Console.Write("Processing Provisioning Data, please wait "); Task baseTask = ProcessDocker(GetDockerBasePath(), provisioningData, iotHubConnectionStrings); Task overrideTask = ProcessDocker(GetDockerOverridePath(), provisioningData, iotHubConnectionStrings); Task demoTask = GenerateDocker(GetDockerDemoPath(), provisioningData, iotHubConnectionStrings); Task kubernetesTask = ProcessKubernetes(GetKubernetesPath(), provisioningData, iotHubConnectionStrings); Task kubernetesDemoTask = GenerateKubernetes(GetKubernetesDemoPath(), provisioningData, iotHubConnectionStrings); await Task.WhenAll(baseTask, demoTask, overrideTask, kubernetesTask, kubernetesDemoTask); Console.WriteLine(); Console.WriteLine(); }
private async Task OnExecuteAsync() { ConsoleSpinner spinner = new ConsoleSpinner(); ProvisioningData provisioningData = await LoadProvisioningData(); Console.Write("Processing Provisioning Data, please wait "); Task baseTask = ProcessDocker(GetDockerBasePath(), provisioningData); Task demoTask = ProcessDocker(GetDockerDemoPath(), provisioningData); Task overrideTask = ProcessDocker(GetDockerOverridePath(), provisioningData); Task kubernetesTask = ProcessKubernetes(GetKubernetesPath(), provisioningData); Task kubernetesDemoTask = ProcessKubernetes(GetKubernetesDemoPath(), provisioningData); await Task.WhenAll(new[] { baseTask, demoTask, overrideTask, kubernetesTask, kubernetesDemoTask }); Console.WriteLine(); Console.WriteLine(); }
public static UserEndpoint ConnectLyncServer(string userSipUri, string lyncServer, bool usingSso, string username, string password) { // Create the Lync Server UserEndpoint and attempt to connect to Lync Server Console.WriteLine("{0} Connecting to Lync Server... [{1}]", username, lyncServer); // Use the appropriate SipTransportType depending on current Lync Server deployment ClientPlatformSettings platformSettings = new ClientPlatformSettings("PersistentChat.Test", SipTransportType.Tls); CollaborationPlatform collabPlatform = new CollaborationPlatform(platformSettings); collabPlatform.AllowedAuthenticationProtocol = SipAuthenticationProtocols.Ntlm; // Initialize the platform collabPlatform.EndStartup(collabPlatform.BeginStartup(null, null)); // You can also pass in the server's port # here. UserEndpointSettings userEndpointSettings = new UserEndpointSettings(userSipUri, lyncServer); // When usingSso is true use the current users credentials, otherwise use username and password userEndpointSettings.Credential = usingSso ? SipCredentialCache.DefaultCredential : new NetworkCredential(username, password); UserEndpoint userEndpoint = new UserEndpoint(collabPlatform, userEndpointSettings); // Login to Lync Server. userEndpoint.EndEstablish(userEndpoint.BeginEstablish(null, null)); if (PersistentChatServerUri == null) { // Extract default Persistent Chat pool uri from inband ProvisioningData provisioningData = userEndpoint.EndGetProvisioningData(userEndpoint.BeginGetProvisioningData(null, null)); PersistentChatServerUri = new Uri(provisioningData.PersistentChatConfiguration.DefaultPersistentChatUri); Console.WriteLine("\t-- {0}PersistentChatServerUri:{1}", username, PersistentChatServerUri); } Console.WriteLine("\t{0} Connecting>>>>Success", username); return(userEndpoint); }
/// <summary> /// Can be used to test the storage queue message creation and to see the format what is created to the queue /// </summary> /// <param name="args"></param> static void Main(string[] args) { // Update parameters accordingly based on our environment from app.config // Update these accordingly for your environment string tenantName = ConfigurationManager.AppSettings["TenantName"]; string ownwerEmail = ConfigurationManager.AppSettings["SiteColTestOwnerEmail"]; // Create provisioning message objects for the storage queue ProvisioningData data = new ProvisioningData(); data.TenantName = tenantName; // Add request data in data.RequestData = new SiteRequestData() { Title = "Sample from queue", Template = "STS#0", Lcid = 1033, Owner = ownwerEmail, StorageMaximumLevel = 100, TimeZoneId = 16, Url = Guid.NewGuid().ToString().Replace("-", "") }; // Add branding data structure in data.BrandingData = new SiteBrandingData() { LogoImagePath = "", ThemeBackgrounImagePath = "", ThemeColorFilePath = "", ThemeFontFilePath = "", ThemeMasterPageName = "", ThemeName = "" }; new SiteRequestManager().AddConfigRequestToQueue(data, CloudConfigurationManager.GetSetting("StorageConnectionString")); }
private void AddRequestToQueue(string ownerEmail) { ProvisioningData data = new ProvisioningData(); // Add request data in data.RequestData = new SiteRequestData() { Title = txtTitle.Text, Template = listTemplates.SelectedValue, Lcid = uint.Parse(language.SelectedValue), Owner = ownerEmail, StorageMaximumLevel = int.Parse(txtStorage.Text), TimeZoneId = int.Parse(timeZone.SelectedValue), Url = txtUrl.Text }; // Resolve tenant name var tenantStr = Page.Request["SPHostUrl"].ToLower().Replace("-my", "").Substring(8); data.TenantName = tenantStr.Substring(0, tenantStr.IndexOf(".")); new SiteRequestManager().AddConfigRequestToQueue(data, CloudConfigurationManager.GetSetting("StorageConnectionString")); }
private async Task ProcessExistingKubernetesOutline(KubernetesOutline outline, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { await Task.Run(() => { foreach (var deployment in outline.Deployments) { try { var metadata = deployment.metadata; if (metadata != null) { var qualifiers = metadata.name.Split('.'); var room = qualifiers.Last().ToLower(); if (provisioningData.ContainsKey(room)) { foreach (var container in deployment.spec.template.spec.containers) { var apiUrlSetting = container.env.FirstOrDefault(e => e.name == DigitalTwinsManagementApiSetting); if (apiUrlSetting != null) { apiUrlSetting.value = DigitalTwinsApiEndpoint; } var messageIntervalSetting = container.env.FirstOrDefault(e => e.name == MessageIntervalSetting); if (messageIntervalSetting != null) { messageIntervalSetting.value = MessageInterval > 0 ? MessageInterval.ToString() : MessageIntervalDefault.ToString(); } var containerImage = FormatContainerImageName(container.image); container.image = containerImage; if (iotHubConnectionStrings.ContainsKey(room)) { string connectionString = iotHubConnectionStrings[room]; var iotSetting = container.env.FirstOrDefault(s => s.name == IoTHubConnectionStringSetting); if (iotSetting != null) { iotSetting.value = connectionString; } } DeviceDescription device = provisioningData[room].FirstOrDefault(); if (device != null) { var sasTokenSetting = container.env.FirstOrDefault(e => e.name == SasTokenSetting); if (sasTokenSetting != null) { sasTokenSetting.value = device.SasToken; } var hardwareIdSetting = container.env.FirstOrDefault(e => e.name == HardwareIdSetting); if (hardwareIdSetting != null) { hardwareIdSetting.value = device.hardwareId; } } } } } } catch (Exception e) { Console.WriteLine(e); } } }); }
private async Task ProcessDockerProvisioningData(DockerOutline outline, ProvisioningData provisioningData) { await Task.Run(async() => { string iotFile = await File.ReadAllTextAsync(IoTConnectionFile); Dictionary <string, Dictionary <string, string> > iotInfo = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(iotFile); foreach (var kvPair in outline.services) { var service = kvPair.Value; var containerImage = FormatContainerImageName(service.image); service.image = containerImage; if (service.environment != null) { var apiUrlSetting = service.environment.FirstOrDefault(e => e.name == DigitalTwinsManagementApiSetting); if (apiUrlSetting != null) { apiUrlSetting.value = DigitalTwinsApiEndpoint; } var messageIntervalSetting = service.environment.FirstOrDefault(e => e.name == MessageIntervalSetting); if (messageIntervalSetting != null) { messageIntervalSetting.value = MessageInterval > 0 ? MessageInterval.ToString() : MessageIntervalDefault.ToString(); } var qualifiers = kvPair.Key.Split('.'); var name = qualifiers.Last().ToLower(); if (provisioningData.ContainsKey(name)) { var serviceType = service.environment.FirstOrDefault(e => e.name == SensorTypeSetting); if (serviceType != null) { if (iotInfo.ContainsKey(name)) { Dictionary <string, string> iotConnectionStrings = iotInfo[name]; if (iotConnectionStrings.ContainsKey(serviceType.value.ToLower())) { var iotSetting = service.environment.FirstOrDefault(s => s.name == IoTHubConnectionStringSetting); if (iotSetting != null) { iotSetting.value = iotConnectionStrings[serviceType.value.ToLower()]; } } } DeviceDescription device = provisioningData[name].FirstOrDefault(d => d.sensors.Any(s => s.dataType.ToLower() == serviceType.value.ToLower())); if (device != null) { var sasTokenSetting = service.environment.FirstOrDefault(e => e.name == SasTokenSetting); if (sasTokenSetting != null) { sasTokenSetting.value = device.SasToken; } var hardwareIdSetting = service.environment.FirstOrDefault(e => e.name == HardwareIdSetting); if (hardwareIdSetting != null) { hardwareIdSetting.value = device.hardwareId; } } } } } } }); }
private async Task GenerateKubernetesOutline(KubernetesOutline outline, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { await Task.Run(() => { int deploymentCount = 0; foreach (KeyValuePair <string, List <DeviceDescription> > provisioningEntry in provisioningData) { iotHubConnectionStrings.TryGetValue(provisioningEntry.Key, out string iotHubConnectionString); foreach (DeviceDescription device in provisioningEntry.Value) { deploymentCount++; string deviceType = device.name.ToLower(); string serviceKey = $"sh.d.{deviceType}.{provisioningEntry.Key.ToLower()}"; var container = new KubernetesContainer { name = $"device-{deviceType}", image = GetContainerImageName(deviceType), imagePullPolicy = "Always", env = new List <KubernetesEnvironmentSetting>() }; container.env.Add(new KubernetesEnvironmentSetting { name = HardwareIdSetting, value = device.hardwareId }); container.env.Add(new KubernetesEnvironmentSetting { name = IoTHubConnectionStringSetting, value = iotHubConnectionString }); container.env.Add(new KubernetesEnvironmentSetting { name = DigitalTwinsManagementApiSetting, value = DigitalTwinsApiEndpoint }); container.env.Add(new KubernetesEnvironmentSetting { name = MessageIntervalSetting, value = MessageInterval > 0 ? MessageInterval.ToString() : MessageIntervalDefault.ToString() }); container.env.Add(new KubernetesEnvironmentSetting { name = SasTokenSetting, value = device.SasToken }); container.env.Add(new KubernetesEnvironmentSetting { name = StartupDelayInSecondsSetting, value = Math.Floor(deploymentCount / DigitalTwinsApiCallLimiter).ToString() }); var template = new KubernetesTemplate { metadata = new KubernetesMetadata { labels = new KubernetesLabels { app = serviceKey, component = serviceKey } }, spec = new KubernetesSpec { containers = new List <KubernetesContainer> { container } } }; var spec = new KubernetesSpec { template = template }; var deployment = new KubernetesDeployment { apiVersion = "extensions/v1beta1", kind = "Deployment", metadata = new KubernetesMetadata { name = serviceKey }, spec = spec }; outline.Deployments.Add(deployment); } } }); }
private async Task ProcessKubernetesProvisioningData(KubernetesOutline outline, ProvisioningData provisioningData) { await Task.Run(async() => { string iotFile = await File.ReadAllTextAsync(IoTConnectionFile); Dictionary <string, Dictionary <string, string> > iotInfo = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(iotFile); foreach (var deployment in outline.Deployments) { try { var metadata = deployment.metadata; if (metadata != null) { var qualifiers = metadata.name.Split('.'); var room = qualifiers.Last().ToLower(); if (provisioningData.ContainsKey(room)) { foreach (var container in deployment.spec.template.spec.containers) { var apiUrlSetting = container.env.FirstOrDefault(e => e.name == DigitalTwinsManagementApiSetting); if (apiUrlSetting != null) { apiUrlSetting.value = DigitalTwinsApiEndpoint; } var messageIntervalSetting = container.env.FirstOrDefault(e => e.name == MessageIntervalSetting); if (messageIntervalSetting != null) { messageIntervalSetting.value = MessageInterval > 0 ? MessageInterval.ToString() : MessageIntervalDefault.ToString(); } var containerImage = FormatContainerImageName(container.image); container.image = containerImage; var typeSetting = container.env.FirstOrDefault(s => s.name == SensorTypeSetting); if (typeSetting != null) { if (iotInfo.ContainsKey(room)) { Dictionary <string, string> iotConnectionStrings = iotInfo[room]; if (iotConnectionStrings.ContainsKey(typeSetting.value.ToLower())) { var iotSetting = container.env.FirstOrDefault(s => s.name == IoTHubConnectionStringSetting); if (iotSetting != null) { iotSetting.value = iotConnectionStrings[typeSetting.value.ToLower()]; } } } DeviceDescription device = provisioningData[room].FirstOrDefault(d => d.sensors.Any(s => s.dataType.ToLower() == typeSetting.value.ToLower())); if (device != null) { var sasTokenSetting = container.env.FirstOrDefault(e => e.name == SasTokenSetting); if (sasTokenSetting != null) { sasTokenSetting.value = device.SasToken; } var hardwareIdSetting = container.env.FirstOrDefault(e => e.name == HardwareIdSetting); if (hardwareIdSetting != null) { hardwareIdSetting.value = device.hardwareId; } } } } } } } catch (Exception e) { Console.WriteLine(e); } } }); }
private async Task ProcessExistingDockerOutline(DockerOutline outline, ProvisioningData provisioningData, IoTHubConnectionStrings iotHubConnectionStrings) { await Task.Run(() => { foreach (var kvPair in outline.services) { var service = kvPair.Value; var containerImage = FormatContainerImageName(service.image); service.image = containerImage; if (service.environment != null) { var apiUrlSetting = service.environment.FirstOrDefault(e => e.name == DigitalTwinsManagementApiSetting); if (apiUrlSetting != null) { apiUrlSetting.value = DigitalTwinsApiEndpoint; } var messageIntervalSetting = service.environment.FirstOrDefault(e => e.name == MessageIntervalSetting); if (messageIntervalSetting != null) { messageIntervalSetting.value = MessageInterval > 0 ? MessageInterval.ToString() : MessageIntervalDefault.ToString(); } var qualifiers = kvPair.Key.Split('.'); var name = qualifiers.Last().ToLower(); if (provisioningData.ContainsKey(name)) { if (iotHubConnectionStrings.ContainsKey(name)) { string iotConnectionString = iotHubConnectionStrings[name]; var iotSetting = service.environment.FirstOrDefault(s => s.name == IoTHubConnectionStringSetting); if (iotSetting != null) { iotSetting.value = iotConnectionString; } } DeviceDescription device = provisioningData[name].FirstOrDefault(); if (device != null) { var sasTokenSetting = service.environment.FirstOrDefault(e => e.name == SasTokenSetting); if (sasTokenSetting != null) { sasTokenSetting.value = device.SasToken; } var hardwareIdSetting = service.environment.FirstOrDefault(e => e.name == HardwareIdSetting); if (hardwareIdSetting != null) { hardwareIdSetting.value = device.hardwareId; } } } } } }); }