Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit 438f984

Browse files
committed
Regenerate docs
1 parent 4fbc958 commit 438f984

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

docs/guides/5-design-decisions.md

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,36 @@ page_title: "5. Design Decisions"
33
subcategory: "Guides"
44
---
55

6-
# 5. Creating multiple Octopus Deploy resources
6+
# 5. Design decisions
77

88
We want explain some of our design decisions to help understand our implementation choices.
99

1010
## "Configuration as Code" resources
11-
Configuration as Code (config-as-code) is Octopus Deploy feature which allows persist resources in a Git repository. For now, project, deployment process, runbook processes, deployment settings, and non-sensitive variables can be version-controlled.
1211

13-
Resources stored in Git will not be maintained by Terraform Provider and result in "no-op" operations when resource were managed by Provider before being converted to version-controlled
12+
### Overview
13+
The Octopus Deploy Terraform provider has been designed with careful consideration for how it interacts with Octopus Deploy's native "Configuration as Code" (Config as Code) feature. This section explains our approach to managing resources that can exist in both systems.
1414

15-
-> Project is an exception and still can be stored in a Git and managed by Terraform Provider
15+
### How Config as Code Works with Terraform
16+
Configuration as Code in Octopus Deploy allows specific resources to be stored in a Git repository rather than in the Octopus database. Currently, this includes projects, deployment and runbook processes, deployment settings, and non-sensitive variables.
1617

17-
### Why
18-
We think that Terraform and "Configuration as Code" feature serve same purpose of providing control over Octopus Deploy configuration by storing it as a text in version-controlled system.
19-
Managing same resource in different Git repositories introduces complex relationship between to sources of truth, which can lead in conflicting dependencies which is difficult to maintain.
18+
### When a resource is version-controlled via Config as Code
19+
* Terraform operations become "no-op" for that resource: If a resource was previously managed by Terraform and later converted to be version-controlled, Terraform operations on that resource will have no effect.
2020

21-
By disabling possibility to manage version-controlled resources in Terraform Provider we explicitly making Configuration as Code a single source of truth for the Octopus Deploy resource.
21+
* Projects are an exception: Projects can be both version-controlled and managed by Terraform simultaneously. This allows you to configure project settings via Terraform while keeping deployment processes in Git.
22+
23+
### Why This Approach?
24+
We've adopted this design pattern for several important reasons:
25+
26+
* Avoiding Conflicting Sources of Truth: Both Terraform and Config as Code serve the purpose of maintaining infrastructure in a version-controlled text format. Having the same resource managed in different Git repositories would create competing sources of truth.
27+
28+
* Simplified Mental Model: By clearly delineating which system controls which resources, we create a clearer mental model for practitioners using both systems.
29+
30+
* Preventing Configuration Drift: Attempting to manage the same resources in both systems would inevitably lead to drift and reconciliation challenges.
31+
32+
### Recommended Practices
33+
For the best experience using Terraform with Octopus Deploy:
34+
35+
* Use Terraform for infrastructure setup, project creation, and global configuration
36+
* Use Configuration as Code for deployment and runbook processes and variables
37+
* For projects that use Config as Code, use Terraform only for the project settings, not for the elements stored in Git
38+
* Be aware that converting a Terraform-managed resource to use Config as Code will make Terraform operations on that resource ineffective

0 commit comments

Comments
 (0)