Exemplo n.º 1
0
        public async Task CreateWorkspaceWithVCS()
        {
            var organizationName = configuration["organizationName"];

            var httpClient = new HttpClient();
            var config     = new TfeConfig(configuration["organizationToken"], httpClient);

            var client = new TfeClient(config);

            var request       = new WorkspacesRequest();
            var workspaceName = $"test-{Guid.NewGuid().ToString()}";

            request.Data.Attributes.Name                  = workspaceName;
            request.Data.Attributes.VcsRepo               = new RequestVcsRepo();
            request.Data.Attributes.VcsRepo.Identifier    = configuration["repo"];
            request.Data.Attributes.VcsRepo.OauthTokenId  = IntegrationContext.OAuthTokenId;
            request.Data.Attributes.VcsRepo.Branch        = "";
            request.Data.Attributes.VcsRepo.DefaultBranch = true;

            var result = await client.Workspace.CreateAsync(organizationName, request);

            Assert.NotNull(result);
            Assert.Equal(workspaceName, result.Data.Attributes.Name);
            IntegrationContext.WorkspaceId = result.Data.Id;
        }
Exemplo n.º 2
0
        public async Task GetWorkspaceById()
        {
            var organizationName = configuration["organizationName"];

            var httpClient = new HttpClient();
            var config     = new TfeConfig(configuration["organizationToken"], httpClient);

            var client = new TfeClient(config);

            var request       = new WorkspacesRequest();
            var workspaceName = $"test-{Guid.NewGuid().ToString()}";

            request.Data.Attributes.Name = workspaceName;

            var createResult = await client.Workspace.CreateAsync(organizationName, request);

            Assert.NotNull(createResult);
            Assert.Equal(workspaceName, createResult.Data.Attributes.Name);

            var showResult = await client.Workspace.GetAsync(createResult.Data.Id);

            Assert.NotNull(showResult);
            Assert.Equal(workspaceName, showResult.Data.Attributes.Name);
            Assert.Equal(createResult.Data.Id, showResult.Data.Id);
            Assert.Equal("workspaces", showResult.Data.Type);
        }
Exemplo n.º 3
0
        public async Task Update_Workspace()
        {
            var workspaceName = "workspace-2";

            var httpClient = new TestHttpClient()
            {
                Handler = (entry) =>
                {
                    TestHttpClient.SendResponse("Workspace/UpdateWorkspace", entry);
                }
            };

            var config = new TfeConfig("faketoken", httpClient);

            var client = new TfeClient(config);

            var request = new WorkspacesRequest();

            request.Data.Attributes.Name = workspaceName;

            var result = await client.Workspace.UpdateAsync("organizationName", request);

            Assert.NotNull(result);
            Assert.Equal(workspaceName, result.Data.Attributes.Name);
            Assert.Equal("skierkowski/terraform-test-proj", result.Data.Attributes.VcsRepo.Identifier);
            Assert.Equal("ot-hmAyP66qk2AMVdbJ", result.Data.Attributes.VcsRepo.OauthTokenId);
        }
Exemplo n.º 4
0
        public async Task Create_Workspace_Without_VCS()
        {
            var workspaceName = "workspace-1";

            var httpClient = new TestHttpClient()
            {
                Handler = (entry) =>
                {
                    TestHttpClient.SendResponse("Workspace/CreateWorkspaceWithoutVCS", entry);
                }
            };

            var config = new TfeConfig("faketoken", httpClient);

            var client = new TfeClient(config);

            var request = new WorkspacesRequest();

            request.Data.Attributes.Name = workspaceName;

            var result = await client.Workspace.CreateAsync("organizationName", request);

            Assert.NotNull(result);
            Assert.Equal(workspaceName, result.Data.Attributes.Name);
        }
Exemplo n.º 5
0
        /// <summary>
        /// SetupTestWorkspace
        /// </summary>
        /// <returns></returns>
        private async Task <(TfeClient, WorkspaceResponse)> SetupTestWorkspace()
        {
            var httpClient = new HttpClient();
            var config     = new TfeConfig(configuration["organizationToken"], httpClient);
            var client     = new TfeClient(config);

            var organizationName = configuration["organizationName"];

            var workspaceRequest = new WorkspacesRequest();
            var workspaceName    = $"test-{Guid.NewGuid().ToString()}";

            workspaceRequest.Data.Attributes.Name = workspaceName;

            var workspace = await client.Workspace.CreateAsync(organizationName, workspaceRequest);

            return(client, workspace);
        }
Exemplo n.º 6
0
        static async Task Main(string[] args)
        {
            var organizationName  = "<organizationName>";
            var organizationToken = "<organizationToken>";
            var teamToken         = "<teamToken>";
            var gitHubToken       = "<GitHub Personal Access Token>";
            var gitHubRepo        = "<github user or organization name>/<repo name>";

            // Create an HttpClient
            var httpClient = new HttpClient();

            // Create the Configiration used by the TFE client.
            // For management tasks you'll need to connect to Terraform Cloud using an Organization Token
            var config = new TfeConfig(organizationToken, httpClient);

            // Create the TFE client.
            var client = new TfeClient(config);

            // Connect Terraform Cloud and GitHub
            var oauthClientsRequest = new OAuthClientsRequest();

            oauthClientsRequest.Data.Attributes.ServiceProvider  = "github";
            oauthClientsRequest.Data.Attributes.HttpUrl          = new Uri("https://github.com");
            oauthClientsRequest.Data.Attributes.ApiUrl           = new Uri("https://api.github.com");
            oauthClientsRequest.Data.Attributes.OAuthTokenString = gitHubToken; // Use the GitHub Personal Access Token
            var oauthResult = await client.OAuthClient.CreateAsync(organizationName, oauthClientsRequest);

            // Get the OAuthToken
            var oauthTokenId = oauthResult.Data.Relationships.OAuthTokens.Data[0].Id;

            // Create a Workspace connected to a GitHub repo.
            var workspacesRequest = new WorkspacesRequest();

            workspacesRequest.Data.Attributes.Name                  = "my-workspace";
            workspacesRequest.Data.Attributes.VcsRepo               = new RequestVcsRepo();
            workspacesRequest.Data.Attributes.VcsRepo.Identifier    = gitHubRepo; // Use the GitHub Repo
            workspacesRequest.Data.Attributes.VcsRepo.OauthTokenId  = oauthTokenId;
            workspacesRequest.Data.Attributes.VcsRepo.Branch        = "";
            workspacesRequest.Data.Attributes.VcsRepo.DefaultBranch = true;
            var workspaceResult = await client.Workspace.CreateAsync(organizationName, workspacesRequest);

            // Get the Workspace Id so we can add variales or request a plan or apply.
            var workspaceId = workspaceResult.Data.Id;

            // Create a variable in the workspace.
            // You can make the values invible setting the Sensitive attribute to true.
            // If you want to se an environement variable change the Category attribute to "env"
            // You'll have to create as any variables your script needs.
            var workspaceVariablesRequest = new WorkspaceVariablesRequest();

            workspaceVariablesRequest.Data.Attributes.Key         = "variable_1";
            workspaceVariablesRequest.Data.Attributes.Value       = "variable_1_value";
            workspaceVariablesRequest.Data.Attributes.Description = "variable_1 description";
            workspaceVariablesRequest.Data.Attributes.Category    = "terraform";
            workspaceVariablesRequest.Data.Attributes.Hcl         = false;
            workspaceVariablesRequest.Data.Attributes.Sensitive   = false;
            var variableResult = await client.WorkspaceVariable.CreateAsync(workspaceId, workspaceVariablesRequest);

            // Get the workspace by name
            var workspace = client.Workspace.ShowAsync(organizationName, "my-workspace");

            // To create Runs and Apply thme you need to use a Team Token
            // So create a new TfeClient
            var runsClient = new TfeClient(new TfeConfig(teamToken, new HttpClient()));

            // Create the Run.
            // This is th equivalent to running: terraform plan.
            var runsRequest = new RunsRequest();

            runsRequest.Data.Attributes.IsDestroy = false;
            runsRequest.Data.Attributes.Message   = "Triggered by .NET Core";
            runsRequest.Data.Relationships.Workspace.Data.Type = "workspaces";
            runsRequest.Data.Relationships.Workspace.Data.Id   = workspace.Result.Data.Id;
            var runsResult = await runsClient.Run.CreateAsync(runsRequest);

            // Get the Run Id. You'll need it to check teh state of the run and Apply it if possible.
            var runId = runsResult.Data.Id;

            var ready = false;

            while (!ready)
            {
                // Wait for the Run to be planned
                await Task.Delay(5000);

                var run = await client.Run.ShowAsync(runId);

                ready = run.Data.Attributes.Status == "planned";

                // Throw an exception if the Run status is: errored
                if (run.Data.Attributes.Status == "errored")
                {
                    throw new Exception("Plan failed...");
                }
            }

            // If the Run is planned then Apply your configuration.
            if (ready)
            {
                await runsClient.Run.ApplyAsync(runId, null);
            }
        }