コード例 #1
0
        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");
        }
コード例 #2
0
        /// <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()));
        }
コード例 #3
0
        internal virtual CreateAppResponse CreateApp(CreateAppRequest request)
        {
            var marshaller   = CreateAppRequestMarshaller.Instance;
            var unmarshaller = CreateAppResponseUnmarshaller.Instance;

            return(Invoke <CreateAppRequest, CreateAppResponse>(request, marshaller, unmarshaller));
        }
コード例 #4
0
        // 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;
                }
            }
        }
コード例 #5
0
        /// <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));
        }
コード例 #6
0
        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());
            }
        }
コード例 #7
0
        /// <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));
        }
コード例 #8
0
        internal virtual CreateAppResponse CreateApp(CreateAppRequest request)
        {
            var options = new InvokeOptions();

            options.RequestMarshaller    = CreateAppRequestMarshaller.Instance;
            options.ResponseUnmarshaller = CreateAppResponseUnmarshaller.Instance;

            return(Invoke <CreateAppResponse>(request, options));
        }
コード例 #9
0
        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;
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
ファイル: AppServiceTests.cs プロジェクト: mrlund/Paylike.NET
        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);
        }
コード例 #13
0
        /// <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);
        }
コード例 #14
0
        /// <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()));
        }
コード例 #15
0
        /// <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()));
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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));
        }
コード例 #21
0
 /// <summary>
 ///  创建应用
 /// </summary>
 /// <param name="request">请求参数信息</param>
 /// <returns>请求结果信息</returns>
 public CreateAppResponse CreateApp(CreateAppRequest request)
 {
     return(new CreateAppExecutor().Client(this).Execute <CreateAppResponse, CreateAppResult, CreateAppRequest>(request));
 }
コード例 #22
0
 /// <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));
 }
コード例 #23
0
        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);
        }
コード例 #24
0
        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();
        }
コード例 #25
0
 public ApiResponse <App> CreateApp(CreateAppRequest request)
 {
     return(SendApiRequest <CreateAppRequest, App>(request));
 }
コード例 #26
0
        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);
        }
コード例 #27
0
 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"
         };
     }));
 }
コード例 #28
0
        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);
            }
        }
コード例 #29
0
        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();
            }
        }
コード例 #30
0
        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;
        }