@@ -26,6 +26,7 @@ import (
26
26
27
27
const octopusdeployProjectsDataType = "octopusdeploy_projects"
28
28
const octopusdeployProjectResourceType = "octopusdeploy_project"
29
+ const octopusdeployProjectVersioningStrategyResourceType = "octopusdeploy_project_versioning_strategy"
29
30
30
31
type ProjectConverter struct {
31
32
Client client.OctopusClient
@@ -486,6 +487,9 @@ func (c *ProjectConverter) toHcl(project octopus.Project, recursive bool, lookup
486
487
return "" , err
487
488
}
488
489
490
+ // We'll switch to the new versioning strategy once this bug is resolved:
491
+ // https://github.com/OctopusDeploy/terraform-provider-octopusdeploy/issues/55
492
+ //versioningStrategy, err := c.convertVersioningStrategyV2(project, projectName, dependencies)
489
493
versioningStrategy , err := c .convertVersioningStrategy (project )
490
494
491
495
if err != nil {
@@ -545,6 +549,11 @@ func (c *ProjectConverter) toHcl(project octopus.Project, recursive bool, lookup
545
549
if stateless {
546
550
c .writeData (file , "${var." + projectName + "_name}" , projectName )
547
551
terraformResource .Count = strutil .StrPointer (thisResource .Count )
552
+
553
+ // This is used by the new versioning strategy resource
554
+ //if versioningStrategy != nil {
555
+ // versioningStrategy.Count = strutil.StrPointer(thisResource.Count)
556
+ //}
548
557
}
549
558
550
559
block := gohcl .EncodeAsBlock (terraformResource , "resource" )
@@ -597,6 +606,13 @@ func (c *ProjectConverter) toHcl(project octopus.Project, recursive bool, lookup
597
606
}
598
607
599
608
file .Body ().AppendBlock (block )
609
+
610
+ // This is used by the new versioning strategy resource
611
+ //if versioningStrategy != nil {
612
+ // versioningStrategyBlock := gohcl.EncodeAsBlock(versioningStrategy, "resource")
613
+ // file.Body().AppendBlock(versioningStrategyBlock)
614
+ //}
615
+
600
616
return string (file .Bytes ()), nil
601
617
}
602
618
dependencies .AddResource (thisResource )
@@ -977,6 +993,85 @@ func (c *ProjectConverter) convertUsernamePasswordGitPersistence(project octopus
977
993
}
978
994
}
979
995
996
+ // getDeploymentProcessStepId finds the internal ID of the action. This is despite the fact that the API calls the
997
+ // parameter "DonorPackageStepId" - it is actually an Action ID, not a step ID.
998
+ func (c * ProjectConverter ) getDeploymentProcessStepId (project octopus.Project , dependencies * data.ResourceDetailsCollection ) * string {
999
+ // The first action in a step is combined with the step, so here we lookup the "DeploymentProcesses/Steps" resource type
1000
+ stepId := dependencies .GetResourceDependency ("DeploymentProcesses/Steps" ,
1001
+ project .Id + "/" +
1002
+ strutil .EmptyIfNil (project .DeploymentProcessId )+ "/" +
1003
+ strutil .EmptyIfNil (project .VersioningStrategy .DonorPackageStepId ))
1004
+
1005
+ // Second and subsequent actions are represented as "DeploymentProcesses/ChildSteps" resources, which we also need to check
1006
+ actionId := dependencies .GetResourceDependency ("DeploymentProcesses/ChildSteps" ,
1007
+ project .Id + "/" +
1008
+ strutil .EmptyIfNil (project .DeploymentProcessId )+ "/" +
1009
+ strutil .EmptyIfNil (project .VersioningStrategy .DonorPackageStepId ))
1010
+
1011
+ return strutil .NilIfEmpty (strutil .DefaultIfEmpty (stepId , actionId ))
1012
+ }
1013
+
1014
+ func (c * ProjectConverter ) convertDatabaseVersioningStrategyV2 (project octopus.Project , projectName string , dependencies * data.ResourceDetailsCollection ) (* terraform.TerraformProjectVersioningStrategy , error ) {
1015
+ versioningStrategyTerraformResource := terraform.TerraformProjectVersioningStrategy {
1016
+ Type : octopusdeployProjectVersioningStrategyResourceType ,
1017
+ Name : projectName ,
1018
+ Count : nil ,
1019
+ ProjectId : "${" + octopusdeployProjectResourceType + "." + projectName + ".id}" ,
1020
+ SpaceId : strutil .InputIfEnabled (c .IncludeSpaceInPopulation , dependencies .GetResourceDependency ("Spaces" , project .SpaceId )),
1021
+ DonorPackageStepId : c .getDeploymentProcessStepId (project , dependencies ),
1022
+ Template : strutil .NilIfEmpty (project .VersioningStrategy .Template ),
1023
+ }
1024
+
1025
+ if project .VersioningStrategy .DonorPackage != nil {
1026
+ versioningStrategyTerraformResource .DonorPackage = & terraform.TerraformProjectVersioningStrategyDonorPackage {
1027
+ DeploymentAction : strutil .EmptyIfNil (project .VersioningStrategy .DonorPackage .DeploymentAction ),
1028
+ PackageReference : strutil .EmptyIfNil (project .VersioningStrategy .DonorPackage .PackageReference ),
1029
+ }
1030
+ }
1031
+
1032
+ return & versioningStrategyTerraformResource , nil
1033
+ }
1034
+
1035
+ func (c * ProjectConverter ) convertCaCVersioningStrategyV2 (project octopus.Project , projectName string , dependencies * data.ResourceDetailsCollection ) (* terraform.TerraformProjectVersioningStrategy , error ) {
1036
+ deploymentSettings := octopus.ProjectCacDeploymentSettings {}
1037
+ if _ , err := c .Client .GetResource ("Projects/" + project .Id + "/" + project .PersistenceSettings .DefaultBranch + "/DeploymentSettings" , & deploymentSettings ); err != nil {
1038
+ return nil , err
1039
+ }
1040
+
1041
+ versioningStrategyTerraformResource := terraform.TerraformProjectVersioningStrategy {
1042
+ Type : octopusdeployProjectVersioningStrategyResourceType ,
1043
+ Name : projectName ,
1044
+ Count : nil ,
1045
+ ProjectId : "${" + octopusdeployProjectResourceType + "." + projectName + ".id}" ,
1046
+ SpaceId : strutil .InputIfEnabled (c .IncludeSpaceInPopulation , dependencies .GetResourceDependency ("Spaces" , project .SpaceId )),
1047
+ DonorPackageStepId : c .getDeploymentProcessStepId (project , dependencies ),
1048
+ Template : strutil .NilIfEmpty (deploymentSettings .VersioningStrategy .Template ),
1049
+ }
1050
+
1051
+ if deploymentSettings .VersioningStrategy .DonorPackage != nil {
1052
+ versioningStrategyTerraformResource .DonorPackage = & terraform.TerraformProjectVersioningStrategyDonorPackage {
1053
+ DeploymentAction : strutil .EmptyIfNil (deploymentSettings .VersioningStrategy .DonorPackage .DeploymentAction ),
1054
+ PackageReference : strutil .EmptyIfNil (deploymentSettings .VersioningStrategy .DonorPackage .PackageReference ),
1055
+ }
1056
+ }
1057
+
1058
+ return & versioningStrategyTerraformResource , nil
1059
+ }
1060
+
1061
+ func (c * ProjectConverter ) convertVersioningStrategy (project octopus.Project ) (* terraform.TerraformVersioningStrategy , error ) {
1062
+ if c .IgnoreCacManagedValues && project .HasCacConfigured () {
1063
+ return nil , nil
1064
+ }
1065
+
1066
+ // If CaC is enabled, the top level ProjectConnectivityPolicy settings are supplied by the API but ignored..
1067
+ // The actual values come from branch specific settings.
1068
+ if project .HasCacConfigured () {
1069
+ return c .convertCaCVersioningStrategy (project )
1070
+ }
1071
+
1072
+ return c .convertDatabaseVersioningStrategy (project )
1073
+ }
1074
+
980
1075
func (c * ProjectConverter ) convertDatabaseVersioningStrategy (project octopus.Project ) (* terraform.TerraformVersioningStrategy , error ) {
981
1076
// Don't define a versioning strategy if it is not set
982
1077
if project .VersioningStrategy .Template == "" {
@@ -1034,18 +1129,18 @@ func (c *ProjectConverter) convertCaCVersioningStrategy(project octopus.Project)
1034
1129
return & versioningStrategy , nil
1035
1130
}
1036
1131
1037
- func (c * ProjectConverter ) convertVersioningStrategy (project octopus.Project ) (* terraform.TerraformVersioningStrategy , error ) {
1132
+ func (c * ProjectConverter ) convertVersioningStrategyV2 (project octopus.Project , projectName string , dependencies * data. ResourceDetailsCollection ) (* terraform.TerraformProjectVersioningStrategy , error ) {
1038
1133
if c .IgnoreCacManagedValues && project .HasCacConfigured () {
1039
1134
return nil , nil
1040
1135
}
1041
1136
1042
- // If CaC is enabled, the top level ProjectConnectivityPolicy settings are supplied by the API but ignored..
1137
+ // If CaC is enabled, the top level ProjectConnectivityPolicy settings are supplied by the API but ignored.
1043
1138
// The actual values come from branch specific settings.
1044
1139
if project .HasCacConfigured () {
1045
- return c .convertCaCVersioningStrategy (project )
1140
+ return c .convertCaCVersioningStrategyV2 (project , projectName , dependencies )
1046
1141
}
1047
1142
1048
- return c .convertDatabaseVersioningStrategy (project )
1143
+ return c .convertDatabaseVersioningStrategyV2 (project , projectName , dependencies )
1049
1144
}
1050
1145
1051
1146
// exportChildDependencies exports those dependencies that are always required regardless of the recursive flag.
0 commit comments