Skip to content
This repository has been archived by the owner on Oct 11, 2019. It is now read-only.

Commit

Permalink
Take location specific configuration as constructor args
Browse files Browse the repository at this point in the history
  • Loading branch information
amckague committed Feb 14, 2019
1 parent 7d1bbdf commit 3e64e43
Show file tree
Hide file tree
Showing 13 changed files with 132 additions and 48 deletions.
1 change: 1 addition & 0 deletions cmd/orchestration/app/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ go_library(
"//pkg/orchestration/wiring:go_default_library",
"//pkg/orchestration/wiring/registry:go_default_library",
"//pkg/orchestration/wiring/wiringplugin:go_default_library",
"//pkg/orchestration/wiring/wiringutil/oap:go_default_library",
"//pkg/util/crash:go_default_library",
"//pkg/util/prometheus:go_default_library",
"//vendor/github.com/atlassian/ctrl:go_default_library",
Expand Down
39 changes: 36 additions & 3 deletions cmd/orchestration/app/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"flag"
"math/rand"
"os"
"strings"
"time"

"github.com/atlassian/ctrl"
Expand All @@ -14,6 +15,7 @@ import (
orch_meta "github.com/atlassian/voyager/pkg/apis/orchestration/meta"
"github.com/atlassian/voyager/pkg/orchestration/wiring/registry"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringplugin"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringutil/oap"
"github.com/atlassian/voyager/pkg/util/crash"
"k8s.io/klog"
)
Expand All @@ -23,7 +25,12 @@ const (
)

func Main() {
CustomMain(registry.KnownWiringPlugins)
CustomMain(registry.KnownWiringPlugins(
exampleDeveloperRole,
exampleManagedPolicies,
exampleVPC,
exampleEnvironment,
))
}

func CustomMain(plugins map[voyager.ResourceType]wiringplugin.WiringPlugin) {
Expand All @@ -34,7 +41,7 @@ func CustomMain(plugins map[voyager.ResourceType]wiringplugin.WiringPlugin) {
controllers := []ctrl.Constructor{
&ControllerConstructor{
Plugins: plugins,
Tags: ExampleTags,
Tags: exampleTags,
},
}

Expand All @@ -48,7 +55,7 @@ func CustomMain(plugins map[voyager.ResourceType]wiringplugin.WiringPlugin) {
})
}

func ExampleTags(
func exampleTags(
_ voyager.ClusterLocation,
_ wiringplugin.ClusterConfig,
_ voyager.Location,
Expand All @@ -57,3 +64,29 @@ func ExampleTags(
) map[voyager.Tag]string {
return make(map[voyager.Tag]string)
}

func exampleDeveloperRole(_ voyager.Location) []string {
return strings.Split(os.Getenv("PLUGIN_DEVELOPER_ROLE"), ",") //example
}
func exampleManagedPolicies(_ voyager.Location) []string {
return strings.Split(os.Getenv("PLUGIN_MANAGED_POLICIES"), ",")
}
func exampleVPC(location voyager.Location) *oap.VPCEnvironment {
return &oap.VPCEnvironment{
VPCID: os.Getenv("PLUGIN_VPC_ID"),
PrivateDNSZone: os.Getenv("PLUGIN_PRIVATE_DNS_ZONE"),
PrivatePaasDNSZone: os.Getenv("PLUGIN_PRIVATE_PAAS_DNS_ZONE"),
InstanceSecurityGroup: os.Getenv("PLUGIN_INSTANCE_SECURITY_GROUP"),
JumpboxSecurityGroup: os.Getenv("PLUGIN_JUMP_BOX_SECURITY_GROUP"),
SSLCertificateID: os.Getenv("PLUGIN_SSL_CERT_ID"),
Label: location.Label,
AppSubnets: strings.Split(os.Getenv("PLUGIN_APP_SUBNETS"), ","),
Zones: strings.Split(os.Getenv("PLUGIN_ZONES"), ","),
Region: location.Region,
EMRSubnet: os.Getenv("EMR_SUBNET"),
}
}

func exampleEnvironment(_ voyager.Location) string {
return os.Getenv("PLUGIN_ENVIRONMENT")
}
1 change: 1 addition & 0 deletions pkg/orchestration/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ go_test(
"//pkg/orchestration/wiring:go_default_library",
"//pkg/orchestration/wiring/registry:go_default_library",
"//pkg/orchestration/wiring/wiringplugin:go_default_library",
"//pkg/orchestration/wiring/wiringutil/oap:go_default_library",
"//pkg/util/testutil:go_default_library",
"//vendor/github.com/atlassian/smith/pkg/apis/smith/v1:go_default_library",
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
Expand Down
24 changes: 23 additions & 1 deletion pkg/orchestration/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/atlassian/voyager/pkg/orchestration/wiring"
"github.com/atlassian/voyager/pkg/orchestration/wiring/registry"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringplugin"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringutil/oap"
"github.com/atlassian/voyager/pkg/util/testutil"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -194,7 +195,12 @@ func TestStateResourceName(t *testing.T) {

func entanglerForTests() *wiring.Entangler {
return &wiring.Entangler{
Plugins: registry.KnownWiringPlugins,
Plugins: registry.KnownWiringPlugins(
testDeveloperRole,
testManagedPolicies,
testVPC,
testEnvironment,
),
ClusterLocation: voyager.ClusterLocation{
Account: testAccount,
Region: testRegion,
Expand All @@ -209,6 +215,22 @@ func entanglerForTests() *wiring.Entangler {
}
}

func testDeveloperRole(_ voyager.Location) []string {
return []string{"arn:aws:iam::123456789012:role/micros-server-iam-MicrosServer-ABC"}
}

func testManagedPolicies(_ voyager.Location) []string {
return []string{"arn:aws:iam::123456789012:policy/SOX-DENY-IAM-CREATE-DELETE", "arn:aws:iam::123456789012:policy/micros-iam-DefaultServicePolicy-ABC"} // example
}

func testVPC(location voyager.Location) *oap.VPCEnvironment {
return oap.ExampleVPC(location.Label, location.Region)
}

func testEnvironment(_ voyager.Location) string {
return "microstestenv"
}

func testingTags(
_ voyager.ClusterLocation,
_ wiringplugin.ClusterConfig,
Expand Down
1 change: 1 addition & 0 deletions pkg/orchestration/wiring/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ go_test(
"//pkg/orchestration/wiring/registry:go_default_library",
"//pkg/orchestration/wiring/wiringplugin:go_default_library",
"//pkg/orchestration/wiring/wiringutil/knownshapes:go_default_library",
"//pkg/orchestration/wiring/wiringutil/oap:go_default_library",
"//pkg/util/layers:go_default_library",
"//pkg/util/testutil:go_default_library",
"//vendor/github.com/atlassian/smith/pkg/apis/smith/v1:go_default_library",
Expand Down
13 changes: 8 additions & 5 deletions pkg/orchestration/wiring/aws/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,17 @@ const (
// All osb-aws-provider resources are 'almost' the same, differing only in the service/plan names,
// what they need passed in the ServiceEnvironment.
var (
emptyVPC = func(location voyager.Location) *oap.VPCEnvironment {
return oap.ExampleVPC(location.Label, location.Region)
DynamoDBPlugin = func(vpc func(voyager.Location) *oap.VPCEnvironment) wiringutil.StatusAdapter {
return wiringutil.StatusAdapter(Resource(DynamoDB, DynamoDBName, DynamoDBClass, DynamoDBPlan, dynamoDbServiceEnvironment, dynamoDbShapes, vpc).WireUp)
}
DynamoDBPlugin = wiringutil.StatusAdapter(Resource(DynamoDB, DynamoDBName, DynamoDBClass, DynamoDBPlan, dynamoDbServiceEnvironment, dynamoDbShapes, emptyVPC).WireUp)

S3Plugin = wiringutil.StatusAdapter(Resource(S3, S3Name, S3Class, S3Plan, s3ServiceEnvironment, s3Shapes, emptyVPC).WireUp)
S3Plugin = func(vpc func(voyager.Location) *oap.VPCEnvironment) wiringutil.StatusAdapter {
return wiringutil.StatusAdapter(Resource(S3, S3Name, S3Class, S3Plan, s3ServiceEnvironment, s3Shapes, vpc).WireUp)
}

CfnPlugin = wiringutil.StatusAdapter(Resource(Cfn, CfnName, CfnClass, CfnPlan, CfnServiceEnvironment, cfnShapes, emptyVPC).WireUp)
CfnPlugin = func(vpc func(voyager.Location) *oap.VPCEnvironment) wiringutil.StatusAdapter {
return wiringutil.StatusAdapter(Resource(Cfn, CfnName, CfnClass, CfnPlan, CfnServiceEnvironment, cfnShapes, vpc).WireUp)
}
)

func cfnShapes(resource *orch_v1.StateResource, smithResource *smith_v1.Resource, _ *wiringplugin.WiringContext) ([]wiringplugin.Shape, bool /* externalErr */, bool /* retriableErr */, error) {
Expand Down
16 changes: 6 additions & 10 deletions pkg/orchestration/wiring/ec2compute/v2/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,17 +194,13 @@ func constructComputeParameters(origSpec *runtime.RawExtension, iamRoleRef, iamI
return rawExtension, false, false, nil
}

func New() *WiringPlugin {
func New(developerRole func(location voyager.Location) []string,
managedPolicies func(location voyager.Location) []string,
vpc func(location voyager.Location) *oap.VPCEnvironment) *WiringPlugin {
return &WiringPlugin{
DeveloperRole: func(_ voyager.Location) []string {
return []string{"arn:aws:iam::123456789012:role/micros-server-iam-MicrosServer-ABC"} //example
},
ManagedPolicies: func(_ voyager.Location) []string {
return []string{"arn:aws:iam::123456789012:policy/SOX-DENY-IAM-CREATE-DELETE", "arn:aws:iam::123456789012:policy/micros-iam-DefaultServicePolicy-ABC"} // example
},
VPC: func(location voyager.Location) *oap.VPCEnvironment {
return oap.ExampleVPC(location.Label, location.Region)
},
DeveloperRole: developerRole,
ManagedPolicies: managedPolicies,
VPC: vpc,
}
}

Expand Down
24 changes: 23 additions & 1 deletion pkg/orchestration/wiring/entangler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/atlassian/voyager/pkg/orchestration/wiring/registry"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringplugin"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringutil/knownshapes"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringutil/oap"
"github.com/atlassian/voyager/pkg/util/layers"
"github.com/atlassian/voyager/pkg/util/testutil"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -316,7 +317,12 @@ func entangleTestFileState(t *testing.T, filePrefix string) EntangleResult {
err := testutil.LoadIntoStructFromTestData(filePrefix+fixtureStateYamlSuffix, state)
require.NoError(t, err)

return entangleTestState(t, state, registry.KnownWiringPlugins)
return entangleTestState(t, state, registry.KnownWiringPlugins(
testDeveloperRole,
testManagedPolicies,
testVPC,
testEnvironment,
))
}

// In order to replace all expected bundles with actual bundles:
Expand Down Expand Up @@ -398,3 +404,19 @@ func testingTags(
tags["environment"] = "microstestenv"
return tags
}

func testDeveloperRole(_ voyager.Location) []string {
return []string{"arn:aws:iam::123456789012:role/micros-server-iam-MicrosServer-ABC"}
}

func testManagedPolicies(_ voyager.Location) []string {
return []string{"arn:aws:iam::123456789012:policy/SOX-DENY-IAM-CREATE-DELETE", "arn:aws:iam::123456789012:policy/micros-iam-DefaultServicePolicy-ABC"}
}

func testVPC(location voyager.Location) *oap.VPCEnvironment {
return oap.ExampleVPC(location.Label, location.Region)
}

func testEnvironment(_ voyager.Location) string {
return "microstestenv"
}
6 changes: 2 additions & 4 deletions pkg/orchestration/wiring/k8scompute/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,9 @@ func validateScaling(s Scaling) error {
return nil
}

func New() *WiringPlugin {
func New(vpc func(location voyager.Location) *oap.VPCEnvironment) *WiringPlugin {
return &WiringPlugin{
VPC: func(location voyager.Location) *oap.VPCEnvironment {
return oap.ExampleVPC(location.Label, location.Region)
},
VPC: vpc,
}
}

Expand Down
6 changes: 2 additions & 4 deletions pkg/orchestration/wiring/postgres/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,9 @@ type WiringPlugin struct {
Environment func(location voyager.Location) string
}

func New() *WiringPlugin {
func New(environment func(location voyager.Location) string) *WiringPlugin {
return &WiringPlugin{
Environment: func(_ voyager.Location) string {
return "microstestenv"
},
Environment: environment,
}
}

Expand Down
10 changes: 3 additions & 7 deletions pkg/orchestration/wiring/rds/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,10 @@ type ReadReplicaParam struct {
ReadReplica bool `json:"ReadReplica"`
}

func New() *WiringPlugin {
func New(environment func(location voyager.Location) string, vpc func(location voyager.Location) *oap.VPCEnvironment) *WiringPlugin {
return &WiringPlugin{
VPC: func(location voyager.Location) *oap.VPCEnvironment {
return oap.ExampleVPC(location.Label, location.Region)
},
Environment: func(_ voyager.Location) string {
return "microstestenv"
},
VPC: vpc,
Environment: environment,
}
}

Expand Down
1 change: 1 addition & 0 deletions pkg/orchestration/wiring/registry/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ go_library(
"//pkg/orchestration/wiring/ups:go_default_library",
"//pkg/orchestration/wiring/wiringplugin:go_default_library",
"//pkg/orchestration/wiring/wiringutil:go_default_library",
"//pkg/orchestration/wiring/wiringutil/oap:go_default_library",
],
)
38 changes: 25 additions & 13 deletions pkg/orchestration/wiring/registry/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,31 @@ import (
"github.com/atlassian/voyager/pkg/orchestration/wiring/ups"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringplugin"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringutil"
"github.com/atlassian/voyager/pkg/orchestration/wiring/wiringutil/oap"
)

var KnownWiringPlugins = map[voyager.ResourceType]wiringplugin.WiringPlugin{
apik8scompute.ResourceType: wiringutil.StatusAdapter(k8scompute.New().WireUp),
kubeingress.ResourceType: wiringutil.StatusAdapter(kubeingress.WireUp),
ec2compute_v2.ResourceType: wiringutil.StatusAdapter(ec2compute_v2.New().WireUp),
ups.ResourceType: wiringutil.StatusAdapter(ups.New().WireUp),
aws.Cfn: aws.CfnPlugin,
aws.DynamoDB: aws.DynamoDBPlugin,
aws.S3: aws.S3Plugin,
postgres.ResourceType: wiringutil.StatusAdapter(postgres.New().WireUp),
rds.ResourceType: wiringutil.StatusAdapter(rds.New().WireUp),
sqs.ResourceType: wiringutil.StatusAdapter(sqs.WireUp),
asapkey.ResourceType: wiringutil.StatusAdapter(asapkey.New().WireUp),
apiplatformdns.ResourceType: wiringutil.StatusAdapter(platformdns.New().WireUp),
func KnownWiringPlugins(
developerRole func(location voyager.Location) []string,
managedPolices func(location voyager.Location) []string,
vpc func(location voyager.Location) *oap.VPCEnvironment,
environment func(location voyager.Location) string,
) map[voyager.ResourceType]wiringplugin.WiringPlugin {
return map[voyager.ResourceType]wiringplugin.WiringPlugin{
apik8scompute.ResourceType: wiringutil.StatusAdapter(k8scompute.New(vpc).WireUp),
kubeingress.ResourceType: wiringutil.StatusAdapter(kubeingress.WireUp),
ec2compute_v2.ResourceType: wiringutil.StatusAdapter(ec2compute_v2.New(
developerRole,
managedPolices,
vpc,
).WireUp),
ups.ResourceType: wiringutil.StatusAdapter(ups.New().WireUp),
aws.Cfn: aws.CfnPlugin(vpc),
aws.DynamoDB: aws.DynamoDBPlugin(vpc),
aws.S3: aws.S3Plugin(vpc),
postgres.ResourceType: wiringutil.StatusAdapter(postgres.New(environment).WireUp),
rds.ResourceType: wiringutil.StatusAdapter(rds.New(environment, vpc).WireUp),
sqs.ResourceType: wiringutil.StatusAdapter(sqs.WireUp),
asapkey.ResourceType: wiringutil.StatusAdapter(asapkey.New().WireUp),
apiplatformdns.ResourceType: wiringutil.StatusAdapter(platformdns.New().WireUp),
}
}

0 comments on commit 3e64e43

Please sign in to comment.