public static void ClassInit(TestContext context) { Directory.CreateDirectory(tempAppPath); client = TestUtil.GetClient(); CloudCredentials credentials = new CloudCredentials(); credentials.User = TestUtil.User; credentials.Password = TestUtil.Password; try { client.Login(credentials).Wait(); } catch (Exception ex) { Assert.Fail("Error while logging in" + ex.ToString()); } PagedResponseCollection <ListAllSpacesResponse> spaces = client.Spaces.ListAllSpaces().Result; Guid spaceGuid = Guid.Empty; foreach (ListAllSpacesResponse space in spaces) { spaceGuid = space.EntityMetadata.Guid; break; } if (spaceGuid == Guid.Empty) { throw new Exception("No spaces found"); } PagedResponseCollection <ListAllAppsResponse> apps = client.Apps.ListAllApps().Result; foreach (ListAllAppsResponse app in apps) { if (app.Name.StartsWith("logTest")) { client.Apps.DeleteApp(app.EntityMetadata.Guid).Wait(); break; } } apprequest = new CreateAppRequest(); apprequest.Name = "logTest" + Guid.NewGuid().ToString(); apprequest.Memory = 64; apprequest.Instances = 1; apprequest.SpaceGuid = spaceGuid; apprequest.Buildpack = "https://github.com/ryandotsmith/null-buildpack.git"; apprequest.EnvironmentJson = new Dictionary <string, string>() { { "env-test-1234", "env-test-value-1234" } }; apprequest.Command = "export; cat content.txt; sleep 5000;"; client.Apps.PushProgress += Apps_PushProgress; File.WriteAllText(Path.Combine(tempAppPath, "content.txt"), "dummy content"); }
/// <summary> /// Create an App /// <para>Creates an app in v3 of the Cloud Controller API.</para> /// <para>Apps must have a valid space guid for creation, which is namespaced under {"relationships": {"space": "your-space-guid"} }.</para> /// <para>See the example below for more information.</para> /// <para>For detailed information, see online documentation at: "http://apidocs.cloudfoundry.org/238/apps__experimental_/create_an_app.html"</para> /// </summary> public async Task <CreateAppResponse> CreateApp(CreateAppRequest value) { UriBuilder uriBuilder = new UriBuilder(this.Client.CloudTarget); uriBuilder.Path = "/v3/apps"; var client = this.GetHttpClient(); client.Uri = uriBuilder.Uri; client.Method = HttpMethod.Post; var authHeader = await BuildAuthenticationHeader(); if (!string.IsNullOrWhiteSpace(authHeader.Key)) { if (client.Headers.ContainsKey(authHeader.Key)) { client.Headers[authHeader.Key] = authHeader.Value; } else { client.Headers.Add(authHeader); } } client.ContentType = "application/x-www-form-urlencoded"; client.Content = ((string)JsonConvert.SerializeObject(value)).ConvertToStream(); var expectedReturnStatus = 201; var response = await this.SendAsync(client, expectedReturnStatus); return(Utilities.DeserializeJson <CreateAppResponse>(await response.ReadContentAsStringAsync())); }
internal virtual CreateAppResponse CreateApp(CreateAppRequest request) { var marshaller = CreateAppRequestMarshaller.Instance; var unmarshaller = CreateAppResponseUnmarshaller.Instance; return(Invoke <CreateAppRequest, CreateAppResponse>(request, marshaller, unmarshaller)); }
// https://alanfeekery.com/2015/04/13/posting-json-data-using-httpclient/ public void PostJSON() { using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { CreateAppRequest request = new CreateAppRequest() { userAgent = "myAgent", endpointId = "1234", culture = "en-US" }; System.Net.Http.HttpResponseMessage response = client.PostAsync("https://domain.com/CreateApp", new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request).ToString(), System.Text.Encoding.UTF8, "application/json") ).Result; if (response.IsSuccessStatusCode) { dynamic content = Newtonsoft.Json.JsonConvert.DeserializeObject( response.Content.ReadAsStringAsync().Result ); // Access variables from the returned JSON object // var appHref = content.links.applications.href; } } }
/// <summary> /// Initiates the asynchronous execution of the CreateApp operation. /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the CreateApp operation.</param> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> /// <returns>The task object representing the asynchronous operation.</returns> /// <seealso href="http://docs.aws.amazon.com/goto/WebAPI/amplify-2017-07-25/CreateApp">REST API Reference for CreateApp Operation</seealso> public virtual Task <CreateAppResponse> CreateAppAsync(CreateAppRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = CreateAppRequestMarshaller.Instance; var unmarshaller = CreateAppResponseUnmarshaller.Instance; return(InvokeAsync <CreateAppRequest, CreateAppResponse>(request, marshaller, unmarshaller, cancellationToken)); }
public void Application_test() { CreateAppResponse newApp = null; GetAppSummaryResponse readApp = null; UpdateAppResponse updateApp = null; CreateAppRequest app = new CreateAppRequest(); app.Name = Guid.NewGuid().ToString(); app.SpaceGuid = spaceGuid; app.Instances = 1; app.Memory = 256; app.StackGuid = stackGuid; try { newApp = client.Apps.CreateApp(app).Result; } catch (Exception ex) { Assert.Fail("Error creating app: {0}", ex.ToString()); } Assert.IsNotNull(newApp); try { readApp = client.Apps.GetAppSummary(newApp.EntityMetadata.Guid).Result; } catch (Exception ex) { Assert.Fail("Error reading app: {0}", ex.ToString()); } Assert.IsNotNull(readApp); Assert.AreEqual(app.Name, readApp.Name); UpdateAppRequest updateAppRequest = new UpdateAppRequest(); updateAppRequest.Memory = 512; try { updateApp = client.Apps.UpdateApp(newApp.EntityMetadata.Guid, updateAppRequest).Result; } catch (Exception ex) { Assert.Fail("Error updating app: {0}", ex.ToString()); } Assert.IsNotNull(updateApp); Assert.AreEqual(updateAppRequest.Memory, updateApp.Memory); try { client.Apps.DeleteApp(newApp.EntityMetadata.Guid).Wait(); } catch (Exception ex) { Assert.Fail("Error deleting app: {0}", ex.ToString()); } }
/// <summary> /// Initiates the asynchronous execution of the CreateApp operation. /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the CreateApp operation.</param> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> /// <returns>The task object representing the asynchronous operation.</returns> /// <seealso href="http://docs.aws.amazon.com/goto/WebAPI/amplify-2017-07-25/CreateApp">REST API Reference for CreateApp Operation</seealso> public virtual Task <CreateAppResponse> CreateAppAsync(CreateAppRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken)) { var options = new InvokeOptions(); options.RequestMarshaller = CreateAppRequestMarshaller.Instance; options.ResponseUnmarshaller = CreateAppResponseUnmarshaller.Instance; return(InvokeAsync <CreateAppResponse>(request, options, cancellationToken)); }
internal virtual CreateAppResponse CreateApp(CreateAppRequest request) { var options = new InvokeOptions(); options.RequestMarshaller = CreateAppRequestMarshaller.Instance; options.ResponseUnmarshaller = CreateAppResponseUnmarshaller.Instance; return(Invoke <CreateAppResponse>(request, options)); }
public void TestInit() { Directory.CreateDirectory(tempAppPath); client = TestUtil.GetClient(); CloudCredentials credentials = new CloudCredentials(); credentials.User = TestUtil.User; credentials.Password = TestUtil.Password; try { client.Login(credentials).Wait(); } catch (Exception ex) { Assert.Fail("Error while logging in" + ex.ToString()); } PagedResponseCollection <ListAllSpacesResponse> spaces = client.Spaces.ListAllSpaces().Result; Guid spaceGuid = Guid.Empty; foreach (ListAllSpacesResponse space in spaces) { spaceGuid = space.EntityMetadata.Guid; break; } if (spaceGuid == Guid.Empty) { throw new Exception("No spaces found"); } PagedResponseCollection <ListAllAppsResponse> apps = client.Apps.ListAllApps().Result; foreach (ListAllAppsResponse app in apps) { if (app.Name.StartsWith("uploadTest")) { client.Apps.DeleteApp(app.EntityMetadata.Guid).Wait(); break; } } apprequest = new CreateAppRequest(); apprequest.Name = "uploadTest" + Guid.NewGuid().ToString(); apprequest.SpaceGuid = spaceGuid; client.Apps.PushProgress += Apps_PushProgress; }
public void TestCreateAppRequest() { string json = @"{ ""name"": ""my_super_app"", ""space_guid"": ""f2376cf9-c65c-46af-9639-2badf511dad7"" }"; CreateAppRequest request = new CreateAppRequest(); request.Name = "my_super_app"; request.SpaceGuid = new Guid("f2376cf9-c65c-46af-9639-2badf511dad7"); string result = JsonConvert.SerializeObject(request, Formatting.None); Assert.AreEqual(TestUtil.ToUnformatedJsonString(json), result); }
public void TestCreateAppRequest() { string json = @"{ ""name"": ""my_super_app"", ""space_guid"": ""8815b8e4-1934-4ae8-931c-990d6db4d1f2"" }"; CreateAppRequest request = new CreateAppRequest(); request.Name = "my_super_app"; request.SpaceGuid = new Guid("8815b8e4-1934-4ae8-931c-990d6db4d1f2"); string result = JsonConvert.SerializeObject(request, Formatting.None); Assert.AreEqual(TestUtil.ToUnformatedJsonString(json), result); }
public void CreateApp_Success() { CreateAppRequest request = new CreateAppRequest() { Name = "AppFromApiTest_" + DateTime.Now.Ticks.ToString() }; ApiResponse <App> response = _appService.CreateApp(request); Assert.IsNotNull(response.Content); App createdApp = response.Content; Assert.AreEqual(request.Name, createdApp.Name); }
/// <summary> /// 本接口(CreateApp)用于创建一个GME应用。 /// </summary> /// <param name="req"><see cref="CreateAppRequest"/></param> /// <returns><see cref="CreateAppResponse"/></returns> public CreateAppResponse CreateAppSync(CreateAppRequest req) { JsonResponseModel <CreateAppResponse> rsp = null; try { var strResp = this.InternalRequestSync(req, "CreateApp"); rsp = JsonConvert.DeserializeObject <JsonResponseModel <CreateAppResponse> >(strResp); } catch (JsonSerializationException e) { throw new TencentCloudSDKException(e.Message); } return(rsp.Response); }
/// <summary> /// Creating an App /// <para>For detailed information, see online documentation at: "http://apidocs.cloudfoundry.org/195/apps/creating_an_app.html"</para> /// </summary> public async Task <CreateAppResponse> CreateApp(CreateAppRequest value) { UriBuilder uriBuilder = new UriBuilder(this.Client.CloudTarget); uriBuilder.Path = "/v2/apps"; var client = this.GetHttpClient(); client.Uri = uriBuilder.Uri; client.Method = HttpMethod.Post; client.Headers.Add(await BuildAuthenticationHeader()); client.ContentType = "application/x-www-form-urlencoded"; client.Content = JsonConvert.SerializeObject(value).ConvertToStream(); var expectedReturnStatus = 201; var response = await this.SendAsync(client, expectedReturnStatus); return(Utilities.DeserializeJson <CreateAppResponse>(await response.ReadContentAsStringAsync())); }
/// <summary> /// Creating an App /// <para>For detailed information, see online documentation at: "http://apidocs.cloudfoundry.org/250/apps/creating_an_app.html"</para> /// </summary> public async Task <CreateAppResponse> CreateApp(CreateAppRequest value) { UriBuilder uriBuilder = new UriBuilder(this.Client.CloudTarget); uriBuilder.Path = "/v2/apps"; var client = this.GetHttpClient(); client.Uri = uriBuilder.Uri; client.Method = HttpMethod.Post; client.Content = ((string)JsonConvert.SerializeObject(value)).ConvertToStream(); var expectedReturnStatus = 201; var response = await this.SendAsync(client, expectedReturnStatus); return(Utilities.DeserializeJson <CreateAppResponse>(await response.Content.ReadAsStringAsync())); }
public void TestCreateAppRequest() { string json = @"{""name"":""my_app"",""environment_variables"":{""open"":""source""},""lifecycle"":{""type"":""buildpack"",""data"":{""stack"":null,""buildpack"":""name-1215""}},""relationships"":{""space"":{""guid"":""ab8ed42d-82bd-492b-ba08-bb77b96b41b2""}}}"; CreateAppRequest request = new CreateAppRequest(); request.Name = "my_app"; request.EnvironmentVariables = TestUtil.GetJsonDictonary(@"{""open"":""source""}"); request.Lifecycle = TestUtil.GetJsonDictonary(@"{""type"":""buildpack"",""data"":{""stack"":null,""buildpack"":""name-1215""}}"); request.Relationships = TestUtil.GetJsonDictonary(@"{""space"":{""guid"":""ab8ed42d-82bd-492b-ba08-bb77b96b41b2""}}"); string result = JsonConvert.SerializeObject(request, Formatting.None); Assert.AreEqual(TestUtil.ToUnformatedJsonString(json), result); }
private IActionResult?Validate(CreateAppRequest request) { if (request is null) { return(BadRequest()); } if (string.IsNullOrEmpty(request.AppName)) { ModelState.AddModelError(nameof(request.AppName), "App name is missing"); } else if (request.AppName.Length < 1 || request.AppName.Length > 50) { ModelState.AddModelError(nameof(request.AppName), "Name can only be between 1 and 50 characters"); } return(!ModelState.IsValid ? this.CreateValidationError(ModelState) : null); }
public void TestCreateAppRequest() { string json = @"{ ""name"": ""my_app"", ""space_guid"": ""7f257247-1447-47cd-8791-5066b6574499"", ""environment_variables"": { ""open"": ""source"" } }"; CreateAppRequest request = new CreateAppRequest(); request.Name = "my_app"; request.SpaceGuid = new Guid("7f257247-1447-47cd-8791-5066b6574499"); request.EnvironmentVariables = TestUtil.GetJsonDictonary(@"{""open"":""source""}"); string result = JsonConvert.SerializeObject(request, Formatting.None); Assert.AreEqual(TestUtil.ToUnformatedJsonString(json), result); }
public void TestCreateAppRequest() { string json = @"{ ""name"": ""my_super_app"", ""space_guid"": ""48d1b9a9-eab6-4dbe-9436-9425c248e153"", ""diego"": true, ""ports"": [ 1024, 2000 ] }"; CreateAppRequest request = new CreateAppRequest(); request.Name = "my_super_app"; request.SpaceGuid = new Guid("48d1b9a9-eab6-4dbe-9436-9425c248e153"); request.Diego = true; request.Ports = Array.ConvertAll(TestUtil.GetJsonArray(@"[1024,2000]"), (p => (int?)Convert.ToInt32(p))); string result = JsonConvert.SerializeObject(request, Formatting.None); Assert.AreEqual(TestUtil.ToUnformatedJsonString(json), result); }
public IActionResult Create([FromForm] CreateAppRequest createRequest) { if (string.IsNullOrEmpty(Request.Headers[SecurityToken.X_CSRF_TOKEN])) { return(Unauthorized()); } CreateAppResponse response = new CreateAppResponse() { Header = new Header { Status = new Status { Code = Status.SUCCESS } }, Body = new CreateAppResponseBody { App = new App { AppId = Guid.NewGuid().ToString(), ApplicationName = "EditAreaTextParagraph", ApplicationOI = "3", ApplicationPath = string.Empty, DatabaseId = Guid.NewGuid().ToString(), EditorVersion = createRequest.EditorVersion ?? "1.1.0.7948", EngineVersion = "900101", PackageCreationDate = DateTime.Now, PackageFile = "ExstreamPackage.pub", PackageVersion = "900122", PreviewPubFile = createRequest.PreviewPubFile, RoleNames = createRequest.RoleName ?? new List <string>() } } }; return(new OkObjectResult(response)); }
/// <summary> /// 创建应用 /// </summary> /// <param name="request">请求参数信息</param> /// <returns>请求结果信息</returns> public CreateAppResponse CreateApp(CreateAppRequest request) { return(new CreateAppExecutor().Client(this).Execute <CreateAppResponse, CreateAppResult, CreateAppRequest>(request)); }
/// <summary> /// 创建应用 /// </summary> /// <param name="request">请求参数信息</param> /// <returns>请求结果信息</returns> public async Task <CreateAppResponse> CreateApp(CreateAppRequest request) { return(await new CreateAppExecutor().Client(this).Execute <CreateAppResponse, CreateAppResult, CreateAppRequest>(request).ConfigureAwait(false)); }
public override bool Execute() { this.CFOrganization = this.CFOrganization.Trim(); this.CFSpace = this.CFSpace.Trim(); var app = LoadAppFromManifest(); this.Logger = new TaskLogger(this); CloudFoundryClient client = InitClient(); Guid?spaceGuid = null; Guid?stackGuid = null; try { if ((!string.IsNullOrWhiteSpace(this.CFSpace)) && (!string.IsNullOrWhiteSpace(this.CFOrganization))) { spaceGuid = Utils.GetSpaceGuid(client, this.Logger, this.CFOrganization, this.CFSpace); if (spaceGuid == null) { return(false); } } if (!string.IsNullOrWhiteSpace(app.StackName)) { PagedResponseCollection <ListAllStacksResponse> stackList = client.Stacks.ListAllStacks().Result; var stackInfo = stackList.Where(o => o.Name == app.StackName).FirstOrDefault(); if (stackInfo == null) { Logger.LogError("Stack {0} not found", app.StackName); return(false); } stackGuid = new Guid(stackInfo.EntityMetadata.Guid); } if (stackGuid.HasValue && spaceGuid.HasValue) { PagedResponseCollection <ListAllAppsForSpaceResponse> apps = client.Spaces.ListAllAppsForSpace(spaceGuid, new RequestOptions() { Query = "name:" + app.Name }).Result; if (apps.Count() > 0) { this.CFAppGuid = apps.FirstOrDefault().EntityMetadata.Guid; UpdateAppRequest request = new UpdateAppRequest(); request.SpaceGuid = spaceGuid; request.StackGuid = stackGuid; request.EnvironmentJson = app.EnvironmentVariables; request.Memory = (int)app.Memory; request.Instances = app.InstanceCount; request.Buildpack = app.BuildpackUrl; request.Command = app.Command; if (app.DiskQuota.HasValue) { request.DiskQuota = app.DiskQuota.Value.ToString(System.Globalization.CultureInfo.InvariantCulture); } UpdateAppResponse response = client.Apps.UpdateApp(new Guid(this.CFAppGuid), request).Result; Logger.LogMessage("Updated app {0} with guid {1}", response.Name, response.EntityMetadata.Guid); } else { CreateAppRequest request = new CreateAppRequest(); request.Name = app.Name; request.SpaceGuid = spaceGuid; request.StackGuid = stackGuid; request.EnvironmentJson = app.EnvironmentVariables; request.Memory = (int)app.Memory; request.Instances = app.InstanceCount; request.Buildpack = app.BuildpackUrl; request.Command = app.Command; if (app.DiskQuota.HasValue) { request.DiskQuota = Convert.ToInt32(app.DiskQuota.Value, System.Globalization.CultureInfo.InvariantCulture); } CreateAppResponse response = client.Apps.CreateApp(request).Result; this.CFAppGuid = response.EntityMetadata.Guid; Logger.LogMessage("Created app {0} with guid {1}", app.Name, this.CFAppGuid); } } } catch (Exception exception) { this.Logger.LogError("Create App failed", exception); return(false); } return(true); }
public void Push(PushArgs pushArgs) { if (!Directory.Exists(pushArgs.Dir)) { throw new DirectoryNotFoundException(string.Format("Directory '{0}' not found", pushArgs.Dir)); } CloudFoundryClient client = SetTargetInfoFromFile(); // ======= GRAB FIRST SPACE AVAILABLE ======= new ConsoleString("Looking up spaces ...", ConsoleColor.Cyan).WriteLine(); PagedResponseCollection <ListAllSpacesResponse> spaces = client.Spaces.ListAllSpaces().Result; if (spaces.Count() == 0) { throw new InvalidOperationException("Couldn't find any spaces"); } ListAllSpacesResponse space = spaces.First(); new ConsoleString(string.Format("Will be using space {0}", space.Name), ConsoleColor.Green).WriteLine(); // ======= CREATE AN APPLICATION ======= new ConsoleString("Creating app ...", ConsoleColor.Cyan).WriteLine(); PagedResponseCollection <ListAllStacksResponse> stacks = client.Stacks.ListAllStacks(new RequestOptions() { Query = string.Format("name:{0}", pushArgs.Stack) }).Result; if (stacks.Count() == 0) { throw new InvalidOperationException(string.Format("Couldn't find the stack {0}", pushArgs.Stack)); } CreateAppRequest createAppRequest = new CreateAppRequest() { Name = pushArgs.Name, Memory = pushArgs.Memory, StackGuid = new Guid(stacks.First().EntityMetadata.Guid), SpaceGuid = new Guid(space.EntityMetadata.Guid) }; CreateAppResponse appCreateResponse = client.Apps.CreateApp(createAppRequest).Result; new ConsoleString(string.Format("Created app with guid '{0}'", appCreateResponse.EntityMetadata.Guid), ConsoleColor.Green).WriteLine(); // ======= CREATE A ROUTE ======= new ConsoleString("Creating a route ...", ConsoleColor.Cyan).WriteLine(); PagedResponseCollection <ListAllSharedDomainsResponse> allDomains = client.SharedDomains.ListAllSharedDomains().Result; if (allDomains.Count() == 0) { throw new InvalidOperationException("Could not find any shared domains"); } string url = string.Format("{0}.{1}", pushArgs.Name, allDomains.First().Name); CreateRouteResponse createRouteResponse = client.Routes.CreateRoute(new CreateRouteRequest() { DomainGuid = new Guid(allDomains.First().EntityMetadata.Guid), Host = pushArgs.Name, SpaceGuid = new Guid(space.EntityMetadata.Guid) }).Result; new ConsoleString(string.Format("Created route '{0}.{1}'", pushArgs.Name, allDomains.First().Name), ConsoleColor.Green).WriteLine(); // ======= BIND THE ROUTE ======= new ConsoleString("Associating the route ...", ConsoleColor.Cyan).WriteLine(); client.Routes.AssociateAppWithRoute( new Guid(createRouteResponse.EntityMetadata.Guid), new Guid(appCreateResponse.EntityMetadata.Guid)).Wait(); // ======= HOOKUP LOGGING ======= // TODO: detect logyard vs loggregator GetV1InfoResponse v1Info = client.Info.GetV1Info().Result; LogyardLog logyard = new LogyardLog(new Uri(v1Info.AppLogEndpoint), string.Format("bearer {0}", client.AuthorizationToken)); logyard.ErrorReceived += (sender, error) => { Program.PrintExceptionMessage(error.Error); }; logyard.StreamOpened += (sender, args) => { new ConsoleString("Log stream opened.", ConsoleColor.Cyan).WriteLine(); }; logyard.StreamClosed += (sender, args) => { new ConsoleString("Log stream closed.", ConsoleColor.Cyan).WriteLine(); }; logyard.MessageReceived += (sender, message) => { new ConsoleString( string.Format("[{0}] - {1}: {2}", message.Message.Value.Source, message.Message.Value.HumanTime, message.Message.Value.Text), ConsoleColor.White).WriteLine(); }; logyard.StartLogStream(appCreateResponse.EntityMetadata.Guid, 0, true); // ======= PUSH THE APP ======= new ConsoleString("Pushing the app ...", ConsoleColor.Cyan).WriteLine(); client.Apps.PushProgress += (sender, progress) => { new ConsoleString(string.Format("Push at {0}%", progress.Percent), ConsoleColor.Yellow).WriteLine(); new ConsoleString(string.Format("{0}", progress.Message), ConsoleColor.DarkYellow).WriteLine(); }; client.Apps.Push(new Guid(appCreateResponse.EntityMetadata.Guid), pushArgs.Dir, true).Wait(); // ======= WAIT FOR APP TO COME ONLINE ======= bool done = false; while (true) { GetAppSummaryResponse appSummary = client.Apps.GetAppSummary(new Guid(appCreateResponse.EntityMetadata.Guid)).Result; if (appSummary.RunningInstances > 0) { break; } if (appSummary.PackageState == "FAILED") { throw new Exception("App staging failed."); } else if (appSummary.PackageState == "PENDING") { new ConsoleString("[cfcmd] - App is staging ...", ConsoleColor.DarkCyan).WriteLine(); } else if (appSummary.PackageState == "STAGED") { new ConsoleString("[cfcmd] - App staged, waiting for it to come online ...", ConsoleColor.DarkCyan).WriteLine(); } Thread.Sleep(2000); } logyard.StopLogStream(); new ConsoleString(string.Format("App is running, done. You can browse it here: http://{0}.{1}", pushArgs.Name, allDomains.First().Name), ConsoleColor.Green).WriteLine(); }
public ApiResponse <App> CreateApp(CreateAppRequest request) { return(SendApiRequest <CreateAppRequest, App>(request)); }
public override bool Execute() { logger = new Microsoft.Build.Utilities.TaskLoggingHelper(this); try { CloudFoundryClient client = InitClient(); Guid?spaceGuid = null; Guid?stackGuid = null; if (CFSpace.Length > 0 && CFOrganization.Length > 0) { spaceGuid = Utils.GetSpaceGuid(client, logger, CFOrganization, CFSpace); if (spaceGuid == null) { return(false); } } if (CFStack.Length > 0) { PagedResponseCollection <ListAllStacksResponse> stackList = client.Stacks.ListAllStacks().Result; var stackInfo = stackList.Where(o => o.Name == CFStack).FirstOrDefault(); if (stackInfo == null) { logger.LogError("Stack {0} not found", CFStack); return(false); } stackGuid = new Guid(stackInfo.EntityMetadata.Guid); } if (stackGuid.HasValue && spaceGuid.HasValue) { PagedResponseCollection <ListAllAppsForSpaceResponse> apps = client.Spaces.ListAllAppsForSpace(spaceGuid, new RequestOptions() { Query = "name:" + CFAppName }).Result; if (apps.Count() > 0) { CFAppGuid = apps.FirstOrDefault().EntityMetadata.Guid; UpdateAppRequest request = new UpdateAppRequest(); request.SpaceGuid = spaceGuid; request.StackGuid = stackGuid; if (CFEnvironmentJson != null) { request.EnvironmentJson = JsonConvert.DeserializeObject <Dictionary <string, string> >(CFEnvironmentJson); } if (CFAppMemory > 0) { request.Memory = CFAppMemory; } if (CFAppInstances > 0) { request.Instances = CFAppInstances; } if (CFAppBuildpack != null) { request.Buildpack = CFAppBuildpack; } UpdateAppResponse response = client.Apps.UpdateApp(new Guid(CFAppGuid), request).Result; logger.LogMessage("Updated app {0} with guid {1}", response.Name, response.EntityMetadata.Guid); } else { CreateAppRequest request = new CreateAppRequest(); request.Name = CFAppName; request.SpaceGuid = spaceGuid; request.StackGuid = stackGuid; if (CFEnvironmentJson != null) { request.EnvironmentJson = JsonConvert.DeserializeObject <Dictionary <string, string> >(CFEnvironmentJson); } if (CFAppMemory > 0) { request.Memory = CFAppMemory; } if (CFAppInstances > 0) { request.Instances = CFAppInstances; } if (CFAppBuildpack != null) { request.Buildpack = CFAppBuildpack; } CreateAppResponse response = client.Apps.CreateApp(request).Result; CFAppGuid = response.EntityMetadata.Guid; logger.LogMessage("Created app {0} with guid {1}", CFAppName, CFAppGuid); } } } catch (AggregateException exception) { List <string> messages = new List <string>(); ErrorFormatter.FormatExceptionMessage(exception, messages); this.logger.LogError(string.Join(Environment.NewLine, messages)); return(false); } return(true); }
internal static Task <CreateAppResponse> CustomCreateApp(CloudController.V2.Client.Base.AbstractAppsEndpoint arg1, CreateAppRequest arg2) { return(Task.Factory.StartNew <CreateAppResponse>(() => { return new CreateAppResponse() { EntityMetadata = new Metadata(), Name = "testApp" }; })); }
public void CreateAppTest() { using (ShimsContext.Create()) { MockClients clients = new MockClients(); string json = @"{ ""guid"": ""f025e5a3-1542-43f1-b289-c5b716d4ba0f"", ""name"": ""my_app"", ""desired_state"": ""STOPPED"", ""total_desired_instances"": 0, ""created_at"": ""2016-07-07T09:16:55Z"", ""updated_at"": null, ""lifecycle"": { ""type"": ""buildpack"", ""data"": { ""buildpack"": ""name-1215"", ""stack"": ""default-stack-name"" } }, ""environment_variables"": { ""open"": ""source"" }, ""links"": { ""self"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d"" }, ""space"": { ""href"": ""/v2/spaces/ab8ed42d-82bd-492b-ba08-bb77b96b41b2"" }, ""processes"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/processes"" }, ""routes"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/routes"" }, ""packages"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/packages"" }, ""droplets"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/droplets"" }, ""start"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/start"", ""method"": ""PUT"" }, ""stop"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/stop"", ""method"": ""PUT"" }, ""assign_current_droplet"": { ""href"": ""/v3/apps/810d3052-ebb7-47d0-a7bd-f1f81c80ea6d/current_droplet"", ""method"": ""PUT"" } } }"; clients.JsonResponse = json; clients.ExpectedStatusCode = (HttpStatusCode)201; var cfClient = clients.CreateCloudFoundryClient(); CreateAppRequest value = new CreateAppRequest(); var obj = cfClient.AppsExperimental.CreateApp(value).Result; Assert.AreEqual("f025e5a3-1542-43f1-b289-c5b716d4ba0f", TestUtil.ToTestableString(obj.Guid), true); Assert.AreEqual("my_app", TestUtil.ToTestableString(obj.Name), true); Assert.AreEqual("STOPPED", TestUtil.ToTestableString(obj.DesiredState), true); Assert.AreEqual("0", TestUtil.ToTestableString(obj.TotalDesiredInstances), true); Assert.AreEqual("2016-07-07T09:16:55Z", TestUtil.ToTestableString(obj.CreatedAt), true); Assert.AreEqual("", TestUtil.ToTestableString(obj.UpdatedAt), true); } }
public void Push(PushArgs pushArgs) { this.useV3 = pushArgs.V3; List <Application> manifestApps = new List <Application>(); List <Application> apps = new List <Application>(); if (!pushArgs.NoManifest) { string path; if (!string.IsNullOrWhiteSpace(pushArgs.Manifest)) { path = pushArgs.Manifest; } else { path = Directory.GetCurrentDirectory(); } try { Manifest manifest = ManifestDiskRepository.ReadManifest(path); manifestApps.AddRange(manifest.Applications().ToList()); } catch { if (!string.IsNullOrWhiteSpace(pushArgs.Manifest)) { throw new FileNotFoundException("Error reading manifest file."); } } } if (manifestApps.Count == 0) { var app = new Application() { Name = pushArgs.Name, Memory = pushArgs.Memory, Path = pushArgs.Dir, StackName = pushArgs.Stack }; app.Hosts.Add(pushArgs.Name); apps.Add(app); } else if (manifestApps.Count == 1) { Application app = manifestApps[0]; if (!string.IsNullOrWhiteSpace(pushArgs.Name)) { app.Name = pushArgs.Name; } if (pushArgs.Memory != 0) { app.Memory = pushArgs.Memory; } if (!string.IsNullOrWhiteSpace(pushArgs.Stack)) { app.StackName = pushArgs.Stack; } if (!string.IsNullOrWhiteSpace(pushArgs.Dir)) { app.Path = pushArgs.Dir; } if (!app.NoHostName && app.Hosts.Count == 0) { app.Hosts.Add(pushArgs.Name); } apps.Add(app); } else { if (!string.IsNullOrWhiteSpace(pushArgs.Name)) { Application app = manifestApps.FirstOrDefault(a => a.Name == pushArgs.Name); if (app == null) { throw new ArgumentException(string.Format("Could not find app named '{0}' in manifest", pushArgs.Name)); } if (!string.IsNullOrWhiteSpace(pushArgs.Name)) { app.Name = pushArgs.Name; } if (pushArgs.Memory != 0) { app.Memory = pushArgs.Memory; } if (!string.IsNullOrWhiteSpace(pushArgs.Stack)) { app.StackName = pushArgs.Stack; } if (!string.IsNullOrWhiteSpace(pushArgs.Dir)) { app.Path = pushArgs.Dir; } apps.Add(app); } else { apps.AddRange(manifestApps); } } CloudFoundryClient client = SetTargetInfoFromFile(); foreach (Application app in apps) { if (!Directory.Exists(app.Path)) { throw new DirectoryNotFoundException(string.Format("Directory '{0}' not found", app.Path)); } // ======= GRAB FIRST SPACE AVAILABLE ======= new ConsoleString("Looking up spaces ...", ConsoleColor.Cyan).WriteLine(); var spaces = client.V2.Spaces.ListAllSpaces().Result; if (spaces.Count() == 0) { throw new InvalidOperationException("Couldn't find any spaces"); } CCV2.Data.ListAllSpacesResponse space = spaces.First(); new ConsoleString(string.Format("Will be using space {0}", space.Name), ConsoleColor.Green).WriteLine(); // ======= CREATE AN APPLICATION ======= new ConsoleString("Creating app ...", ConsoleColor.Cyan).WriteLine(); var stacks = client.V2.Stacks.ListAllStacks(new CCV2.RequestOptions() { Query = string.Format("name:{0}", app.StackName) }).Result; if (stacks.Count() == 0) { throw new InvalidOperationException(string.Format("Couldn't find the stack {0}", app.StackName)); } Guid appGuid = Guid.Empty; if (pushArgs.V3) { CreateAppRequest createAppRequest = new CreateAppRequest() { Name = app.Name, SpaceGuid = new Guid(space.EntityMetadata.Guid) }; CreateAppResponse appCreateResponse = client.Apps.CreateApp(createAppRequest).Result; appGuid = new Guid(appCreateResponse.Guid.ToString()); new ConsoleString(string.Format("Created app with guid '{0}'", appCreateResponse.Guid), ConsoleColor.Green).WriteLine(); } else { CCV2.Data.CreateAppRequest createAppRequest = new CCV2.Data.CreateAppRequest() { Name = app.Name, Memory = (int)app.Memory, StackGuid = new Guid(stacks.First().EntityMetadata.Guid), SpaceGuid = new Guid(space.EntityMetadata.Guid) }; CCV2.Data.CreateAppResponse appCreateResponse = client.V2.Apps.CreateApp(createAppRequest).Result; appGuid = appCreateResponse.EntityMetadata.Guid; new ConsoleString(string.Format("Created app with guid '{0}'", appCreateResponse.EntityMetadata.Guid), ConsoleColor.Green).WriteLine(); } // ======= PUSH THE APP ======= new ConsoleString("Pushing the app ...", ConsoleColor.Cyan).WriteLine(); if (pushArgs.V3) { client.Apps.PushProgress += (sender, progress) => { new ConsoleString(string.Format("Push at {0}%", progress.Percent), ConsoleColor.Yellow).WriteLine(); new ConsoleString(string.Format("{0}", progress.Message), ConsoleColor.DarkYellow).WriteLine(); }; client.Apps.Push(appGuid, app.Path, app.StackName, null, true).Wait(); } else { client.V2.Apps.PushProgress += (sender, progress) => { new ConsoleString(string.Format("Push at {0}%", progress.Percent), ConsoleColor.Yellow).WriteLine(); new ConsoleString(string.Format("{0}", progress.Message), ConsoleColor.DarkYellow).WriteLine(); }; client.V2.Apps.Push(appGuid, app.Path, true).Wait(); } // ======= HOOKUP LOGGING AND MONITOR APP ======= Guid appGuidV2 = Guid.Empty; if (this.useV3) { appGuidV2 = new Guid(client.Apps.ListAssociatedProcesses(appGuid).Result.First().Guid.ToString()); } CCV2.Data.GetV1InfoResponse v1Info = client.V2.Info.GetV1Info().Result; if (string.IsNullOrWhiteSpace(v1Info.AppLogEndpoint) == false) { this.GetLogsUsingLogyard(client, appGuidV2, v1Info); } else { CCV2.Data.GetInfoResponse detailedInfo = client.V2.Info.GetInfo().Result; if (string.IsNullOrWhiteSpace(detailedInfo.LoggingEndpoint) == false) { this.GetLogsUsingLoggregator(client, appGuidV2, detailedInfo); } else { throw new Exception("Could not retrieve application logs"); } } // ======= BIND SERVICES var allServices = client.V2.ServiceInstances.ListAllServiceInstances().Result; foreach (string service in app.Services) { new ConsoleString(string.Format("Binding service {0} to app {1} ...", service, app.Name), ConsoleColor.Cyan).WriteLine(); var currentService = allServices.FirstOrDefault(s => s.Name.ToUpperInvariant() == service.ToUpperInvariant()); if (currentService == null) { throw new InvalidOperationException(string.Format("Could not find service {0}", service)); } CCV2.Data.CreateServiceBindingRequest request = new CCV2.Data.CreateServiceBindingRequest() { AppGuid = appGuidV2, ServiceInstanceGuid = currentService.EntityMetadata.Guid }; client.V2.ServiceBindings.CreateServiceBinding(request).Wait(); } // ======= CREATE ROUTES ======= var allDomains = client.V2.SharedDomains.ListAllSharedDomains().Result; ArrayList domains = app.Domains; if (domains.Count == 0) { domains.AddRange(allDomains.Select(d => d.Name).ToList()); } foreach (string domain in domains) { new ConsoleString("Creating a route ...", ConsoleColor.Cyan).WriteLine(); if (allDomains.Count() == 0) { throw new InvalidOperationException("Could not find any shared domains"); } var currentDomain = allDomains.FirstOrDefault(d => d.Name.ToUpperInvariant() == domain.ToUpperInvariant()); if (currentDomain == null) { throw new InvalidOperationException(string.Format("Could not find domain {0}", domain)); } foreach (string host in app.Hosts) { string url = string.Format("{0}.{1}", host, domain); CCV2.Data.CreateRouteResponse createRouteResponse = client.V2.Routes.CreateRoute(new CCV2.Data.CreateRouteRequest() { DomainGuid = new Guid(currentDomain.EntityMetadata.Guid), Host = host, SpaceGuid = new Guid(space.EntityMetadata.Guid) }).Result; new ConsoleString(string.Format("Created route '{0}.{1}'", host, domain), ConsoleColor.Green).WriteLine(); // ======= BIND THE ROUTE ======= new ConsoleString("Associating the route ...", ConsoleColor.Cyan).WriteLine(); client.V2.Routes.AssociateAppWithRoute( new Guid(createRouteResponse.EntityMetadata.Guid), appGuidV2).Wait(); } } client.Apps.StoppingApp(appGuid, new StoppingAppRequest() { }).Wait(); client.Apps.StartingApp(appGuid, new StartingAppRequest() { }).Wait(); new ConsoleString(string.Format("App is running, done."), ConsoleColor.Green).WriteLine(); } }
public static void ClassInit(TestContext context) { client = TestUtil.GetClient(); CloudCredentials credentials = new CloudCredentials(); credentials.User = TestUtil.User; credentials.Password = TestUtil.Password; try { client.Login(credentials).Wait(); } catch (Exception ex) { Assert.Fail("Error while loging in" + ex.ToString()); } PagedResponseCollection <ListAllSpacesResponse> spaces = client.Spaces.ListAllSpaces().Result; Guid spaceGuid = Guid.Empty; foreach (ListAllSpacesResponse space in spaces) { spaceGuid = space.EntityMetadata.Guid; break; } if (spaceGuid == Guid.Empty) { throw new Exception("No spaces found"); } PagedResponseCollection <ListAllStacksResponse> stacks = client.Stacks.ListAllStacks().Result; var winStack = Guid.Empty; foreach (ListAllStacksResponse stack in stacks) { if (stack.Name == "win2012r2" || stack.Name == "win2012") { winStack = stack.EntityMetadata.Guid; break; } } if (winStack == Guid.Empty) { throw new Exception("Could not test on a deployment without a windows 2012 stack"); } PagedResponseCollection <ListAllAppsResponse> apps = client.Apps.ListAllApps().Result; foreach (ListAllAppsResponse app in apps) { if (app.Name == "simplePushTest") { client.Apps.DeleteApp(app.EntityMetadata.Guid).Wait(); break; } } apprequest = new CreateAppRequest(); apprequest.Name = "simplePushTest"; apprequest.Memory = 512; apprequest.Instances = 1; apprequest.SpaceGuid = spaceGuid; apprequest.StackGuid = winStack; client.Apps.PushProgress += Apps_PushProgress; }