cumulus-aws 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +3 -0
- data/.travis.yml +12 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +29 -0
- data/LICENSE +202 -0
- data/README.md +41 -0
- data/autocomplete +137 -0
- data/bin/cumulus +658 -0
- data/cumulus +2 -0
- data/cumulus-aws.gemspec +20 -0
- data/lib/autoscaling/AutoScaling.rb +40 -0
- data/lib/autoscaling/loader/Loader.rb +56 -0
- data/lib/autoscaling/manager/Manager.rb +360 -0
- data/lib/autoscaling/models/AlarmConfig.rb +165 -0
- data/lib/autoscaling/models/AlarmDiff.rb +172 -0
- data/lib/autoscaling/models/AutoScalingDiff.rb +178 -0
- data/lib/autoscaling/models/GroupConfig.rb +330 -0
- data/lib/autoscaling/models/PolicyConfig.rb +135 -0
- data/lib/autoscaling/models/PolicyDiff.rb +73 -0
- data/lib/autoscaling/models/ScheduledActionDiff.rb +53 -0
- data/lib/autoscaling/models/ScheduledConfig.rb +96 -0
- data/lib/aws_extensions/ec2/DhcpOptions.rb +41 -0
- data/lib/aws_extensions/ec2/Instance.rb +29 -0
- data/lib/aws_extensions/ec2/NetworkAcl.rb +25 -0
- data/lib/aws_extensions/ec2/NetworkInterface.rb +14 -0
- data/lib/aws_extensions/ec2/RouteTable.rb +26 -0
- data/lib/aws_extensions/ec2/SecurityGroup.rb +16 -0
- data/lib/aws_extensions/ec2/Subnet.rb +28 -0
- data/lib/aws_extensions/ec2/Volume.rb +24 -0
- data/lib/aws_extensions/ec2/Vpc.rb +14 -0
- data/lib/aws_extensions/ec2/VpcEndpoint.rb +11 -0
- data/lib/aws_extensions/elb/BackendServerDescription.rb +12 -0
- data/lib/aws_extensions/elb/PolicyDescription.rb +14 -0
- data/lib/aws_extensions/kinesis/StreamDescription.rb +12 -0
- data/lib/aws_extensions/route53/AliasTarget.rb +21 -0
- data/lib/aws_extensions/s3/Bucket.rb +33 -0
- data/lib/aws_extensions/s3/BucketAcl.rb +28 -0
- data/lib/aws_extensions/s3/BucketCors.rb +17 -0
- data/lib/aws_extensions/s3/BucketLifecycle.rb +21 -0
- data/lib/aws_extensions/s3/BucketLogging.rb +18 -0
- data/lib/aws_extensions/s3/BucketNotification.rb +23 -0
- data/lib/aws_extensions/s3/BucketPolicy.rb +18 -0
- data/lib/aws_extensions/s3/BucketTagging.rb +15 -0
- data/lib/aws_extensions/s3/BucketVersioning.rb +14 -0
- data/lib/aws_extensions/s3/BucketWebsite.rb +49 -0
- data/lib/aws_extensions/s3/CORSRule.rb +27 -0
- data/lib/aws_extensions/s3/ReplicationConfiguration.rb +22 -0
- data/lib/cloudfront/CloudFront.rb +83 -0
- data/lib/cloudfront/loader/Loader.rb +31 -0
- data/lib/cloudfront/manager/Manager.rb +183 -0
- data/lib/cloudfront/models/CacheBehaviorConfig.rb +237 -0
- data/lib/cloudfront/models/CacheBehaviorDiff.rb +211 -0
- data/lib/cloudfront/models/CustomOriginConfig.rb +51 -0
- data/lib/cloudfront/models/CustomOriginDiff.rb +74 -0
- data/lib/cloudfront/models/DistributionConfig.rb +183 -0
- data/lib/cloudfront/models/DistributionDiff.rb +131 -0
- data/lib/cloudfront/models/InvalidationConfig.rb +37 -0
- data/lib/cloudfront/models/OriginConfig.rb +144 -0
- data/lib/cloudfront/models/OriginDiff.rb +86 -0
- data/lib/cloudfront/models/OriginSslProtocols.rb +28 -0
- data/lib/cloudfront/models/OriginSslProtocolsDiff.rb +39 -0
- data/lib/common/BaseLoader.rb +80 -0
- data/lib/common/manager/Manager.rb +148 -0
- data/lib/common/models/Diff.rb +114 -0
- data/lib/common/models/ListChange.rb +21 -0
- data/lib/common/models/TagsDiff.rb +55 -0
- data/lib/common/models/UTCTimeSource.rb +17 -0
- data/lib/conf/Configuration.rb +365 -0
- data/lib/ec2/EC2.rb +503 -0
- data/lib/ec2/IPProtocolMapping.rb +165 -0
- data/lib/ec2/loaders/EbsLoader.rb +19 -0
- data/lib/ec2/loaders/InstanceLoader.rb +32 -0
- data/lib/ec2/managers/EbsManager.rb +176 -0
- data/lib/ec2/managers/InstanceManager.rb +509 -0
- data/lib/ec2/models/EbsGroupConfig.rb +133 -0
- data/lib/ec2/models/EbsGroupDiff.rb +48 -0
- data/lib/ec2/models/InstanceConfig.rb +202 -0
- data/lib/ec2/models/InstanceDiff.rb +95 -0
- data/lib/elb/ELB.rb +148 -0
- data/lib/elb/loader/Loader.rb +65 -0
- data/lib/elb/manager/Manager.rb +581 -0
- data/lib/elb/models/AccessLogConfig.rb +82 -0
- data/lib/elb/models/AccessLogDiff.rb +47 -0
- data/lib/elb/models/HealthCheckConfig.rb +91 -0
- data/lib/elb/models/HealthCheckDiff.rb +50 -0
- data/lib/elb/models/ListenerConfig.rb +99 -0
- data/lib/elb/models/ListenerDiff.rb +91 -0
- data/lib/elb/models/LoadBalancerConfig.rb +239 -0
- data/lib/elb/models/LoadBalancerDiff.rb +265 -0
- data/lib/iam/IAM.rb +36 -0
- data/lib/iam/loader/Loader.rb +117 -0
- data/lib/iam/manager/IamGroups.rb +98 -0
- data/lib/iam/manager/IamResource.rb +288 -0
- data/lib/iam/manager/IamRoles.rb +112 -0
- data/lib/iam/manager/IamUsers.rb +54 -0
- data/lib/iam/manager/Manager.rb +29 -0
- data/lib/iam/migration/AssumeRoleUnifier.rb +34 -0
- data/lib/iam/migration/PolicyUnifier.rb +90 -0
- data/lib/iam/models/GroupConfig.rb +40 -0
- data/lib/iam/models/IamDiff.rb +132 -0
- data/lib/iam/models/PolicyConfig.rb +67 -0
- data/lib/iam/models/ResourceWithPolicy.rb +208 -0
- data/lib/iam/models/RoleConfig.rb +53 -0
- data/lib/iam/models/StatementConfig.rb +35 -0
- data/lib/iam/models/UserConfig.rb +21 -0
- data/lib/kinesis/Kinesis.rb +94 -0
- data/lib/kinesis/loader/Loader.rb +19 -0
- data/lib/kinesis/manager/Manager.rb +206 -0
- data/lib/kinesis/models/StreamConfig.rb +75 -0
- data/lib/kinesis/models/StreamDiff.rb +58 -0
- data/lib/lambda/Lambda.rb +41 -0
- data/lib/route53/loader/Loader.rb +32 -0
- data/lib/route53/manager/Manager.rb +241 -0
- data/lib/route53/models/AliasTarget.rb +86 -0
- data/lib/route53/models/RecordConfig.rb +178 -0
- data/lib/route53/models/RecordDiff.rb +140 -0
- data/lib/route53/models/Vpc.rb +24 -0
- data/lib/route53/models/ZoneConfig.rb +156 -0
- data/lib/route53/models/ZoneDiff.rb +118 -0
- data/lib/s3/S3.rb +89 -0
- data/lib/s3/loader/Loader.rb +66 -0
- data/lib/s3/manager/Manager.rb +296 -0
- data/lib/s3/models/BucketConfig.rb +321 -0
- data/lib/s3/models/BucketDiff.rb +167 -0
- data/lib/s3/models/GrantConfig.rb +189 -0
- data/lib/s3/models/GrantDiff.rb +50 -0
- data/lib/s3/models/LifecycleConfig.rb +142 -0
- data/lib/s3/models/LifecycleDiff.rb +46 -0
- data/lib/s3/models/LoggingConfig.rb +81 -0
- data/lib/s3/models/NotificationConfig.rb +157 -0
- data/lib/s3/models/NotificationDiff.rb +62 -0
- data/lib/s3/models/ReplicationConfig.rb +133 -0
- data/lib/s3/models/ReplicationDiff.rb +60 -0
- data/lib/s3/models/WebsiteConfig.rb +107 -0
- data/lib/security/SecurityGroups.rb +39 -0
- data/lib/security/loader/Loader.rb +94 -0
- data/lib/security/manager/Manager.rb +246 -0
- data/lib/security/models/RuleConfig.rb +161 -0
- data/lib/security/models/RuleDiff.rb +72 -0
- data/lib/security/models/RuleMigration.rb +127 -0
- data/lib/security/models/SecurityGroupConfig.rb +172 -0
- data/lib/security/models/SecurityGroupDiff.rb +112 -0
- data/lib/sns/SNS.rb +40 -0
- data/lib/sqs/SQS.rb +62 -0
- data/lib/sqs/loader/Loader.rb +34 -0
- data/lib/sqs/manager/Manager.rb +128 -0
- data/lib/sqs/models/DeadLetterConfig.rb +70 -0
- data/lib/sqs/models/DeadLetterDiff.rb +35 -0
- data/lib/sqs/models/QueueConfig.rb +115 -0
- data/lib/sqs/models/QueueDiff.rb +89 -0
- data/lib/util/Colors.rb +111 -0
- data/lib/util/StatusCodes.rb +51 -0
- data/lib/vpc/loader/Loader.rb +73 -0
- data/lib/vpc/manager/Manager.rb +954 -0
- data/lib/vpc/models/AclEntryConfig.rb +150 -0
- data/lib/vpc/models/AclEntryDiff.rb +54 -0
- data/lib/vpc/models/DhcpConfig.rb +100 -0
- data/lib/vpc/models/DhcpDiff.rb +90 -0
- data/lib/vpc/models/EndpointConfig.rb +76 -0
- data/lib/vpc/models/EndpointDiff.rb +69 -0
- data/lib/vpc/models/NetworkAclConfig.rb +87 -0
- data/lib/vpc/models/NetworkAclDiff.rb +116 -0
- data/lib/vpc/models/RouteConfig.rb +82 -0
- data/lib/vpc/models/RouteDiff.rb +50 -0
- data/lib/vpc/models/RouteTableConfig.rb +92 -0
- data/lib/vpc/models/RouteTableDiff.rb +101 -0
- data/lib/vpc/models/SubnetConfig.rb +113 -0
- data/lib/vpc/models/SubnetDiff.rb +78 -0
- data/lib/vpc/models/VpcConfig.rb +173 -0
- data/lib/vpc/models/VpcDiff.rb +315 -0
- data/rakefile.rb +8 -0
- metadata +245 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require "elb/models/AccessLogDiff"
|
|
2
|
+
|
|
3
|
+
module Cumulus
|
|
4
|
+
module ELB
|
|
5
|
+
# Public: An object representing configuration for a load balancer
|
|
6
|
+
class AccessLogConfig
|
|
7
|
+
attr_reader :enabled
|
|
8
|
+
attr_reader :s3_bucket
|
|
9
|
+
attr_reader :emit_interval
|
|
10
|
+
attr_reader :bucket_prefix
|
|
11
|
+
|
|
12
|
+
# Public: Constructor
|
|
13
|
+
#
|
|
14
|
+
# json - a hash containing the JSON configuration for the load balancer
|
|
15
|
+
def initialize(json = nil)
|
|
16
|
+
@enabled = !json.nil?
|
|
17
|
+
if !json.nil?
|
|
18
|
+
@s3_bucket = json["s3-bucket"]
|
|
19
|
+
@emit_interval = json["emit-interval"]
|
|
20
|
+
@bucket_prefix = json["bucket-prefix"]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def to_hash
|
|
25
|
+
if @enabled
|
|
26
|
+
{
|
|
27
|
+
"s3-bucket" => @s3_bucket,
|
|
28
|
+
"emit-interval" => @emit_interval,
|
|
29
|
+
"bucket-prefix" => @bucket_prefix,
|
|
30
|
+
}.reject { |k, v| v.nil? }
|
|
31
|
+
else
|
|
32
|
+
false
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def to_aws
|
|
37
|
+
{
|
|
38
|
+
enabled: @enabled,
|
|
39
|
+
s3_bucket_name: @s3_bucket,
|
|
40
|
+
emit_interval: @emit_interval,
|
|
41
|
+
s3_bucket_prefix: @bucket_prefix,
|
|
42
|
+
}.reject { |k, v| v.nil? }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def populate!(aws)
|
|
46
|
+
@enabled = aws.enabled
|
|
47
|
+
@s3_bucket = aws.s3_bucket_name
|
|
48
|
+
@emit_interval = aws.emit_interval
|
|
49
|
+
@bucket_prefix = aws.s3_bucket_prefix
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Public: Produce an array of differences between this local configuration and the
|
|
53
|
+
# configuration in AWS
|
|
54
|
+
#
|
|
55
|
+
# aws - the AWS resource
|
|
56
|
+
#
|
|
57
|
+
# Returns an array of the HealthCheckDiffs that were found
|
|
58
|
+
def diff(aws)
|
|
59
|
+
diffs = []
|
|
60
|
+
|
|
61
|
+
if @enabled != aws.enabled
|
|
62
|
+
diffs << AccessLogDiff.new(AccessLogChange::ENABLED, aws.enabled, @enabled)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if @s3_bucket != aws.s3_bucket_name
|
|
66
|
+
diffs << AccessLogDiff.new(AccessLogChange::BUCKET, aws.s3_bucket_name, @s3_bucket)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if @emit_interval != aws.emit_interval
|
|
70
|
+
diffs << AccessLogDiff.new(AccessLogChange::EMIT, aws.emit_interval, @emit_interval)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if @bucket_prefix != aws.s3_bucket_prefix
|
|
74
|
+
diffs << AccessLogDiff.new(AccessLogChange::PREFIX, aws.s3_bucket_prefix, @bucket_prefix)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
diffs.flatten
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require "common/models/Diff"
|
|
2
|
+
require "util/Colors"
|
|
3
|
+
|
|
4
|
+
module Cumulus
|
|
5
|
+
module ELB
|
|
6
|
+
# Public: The types of changes that can be made to an access log config
|
|
7
|
+
module AccessLogChange
|
|
8
|
+
include Common::DiffChange
|
|
9
|
+
|
|
10
|
+
ENABLED = Common::DiffChange.next_change_id
|
|
11
|
+
BUCKET = Common::DiffChange.next_change_id
|
|
12
|
+
EMIT = Common::DiffChange.next_change_id
|
|
13
|
+
PREFIX = Common::DiffChange.next_change_id
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Public: Represents a single difference between local configuration and
|
|
17
|
+
# an AWS Load Balancer Access Log.
|
|
18
|
+
class AccessLogDiff < Common::Diff
|
|
19
|
+
include AccessLogChange
|
|
20
|
+
|
|
21
|
+
def asset_type
|
|
22
|
+
"Access Log Config"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def change_string
|
|
26
|
+
case @type
|
|
27
|
+
when ENABLED
|
|
28
|
+
"enabled:"
|
|
29
|
+
when BUCKET
|
|
30
|
+
"S3 bucket:"
|
|
31
|
+
when EMIT
|
|
32
|
+
"emit interval:"
|
|
33
|
+
when PREFIX
|
|
34
|
+
"bucket prefix:"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def diff_string
|
|
39
|
+
[
|
|
40
|
+
change_string,
|
|
41
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
42
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
43
|
+
].join("\n")
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require "elb/models/HealthCheckDiff"
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
5
|
+
module Cumulus
|
|
6
|
+
module ELB
|
|
7
|
+
# Public: An object representing configuration for a load balancer
|
|
8
|
+
class HealthCheckConfig
|
|
9
|
+
attr_reader :target
|
|
10
|
+
attr_reader :interval
|
|
11
|
+
attr_reader :timeout
|
|
12
|
+
attr_reader :healthy
|
|
13
|
+
attr_reader :unhealthy
|
|
14
|
+
|
|
15
|
+
# Public: Constructor
|
|
16
|
+
#
|
|
17
|
+
# json - a hash containing the JSON configuration for the load balancer
|
|
18
|
+
def initialize(json = nil)
|
|
19
|
+
if !json.nil?
|
|
20
|
+
@target = json["target"]
|
|
21
|
+
@interval = json["interval"]
|
|
22
|
+
@timeout = json["timeout"]
|
|
23
|
+
@healthy = json["healthy"]
|
|
24
|
+
@unhealthy = json["unhealthy"]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def to_hash
|
|
29
|
+
{
|
|
30
|
+
"target" => @target,
|
|
31
|
+
"interval" => @interval,
|
|
32
|
+
"timeout" => @timeout,
|
|
33
|
+
"healthy" => @healthy,
|
|
34
|
+
"unhealthy" => @unhealthy,
|
|
35
|
+
}.reject { |k, v| v.nil? }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def to_aws
|
|
39
|
+
{
|
|
40
|
+
target: @target,
|
|
41
|
+
interval: @interval,
|
|
42
|
+
timeout: @timeout,
|
|
43
|
+
healthy_threshold: @healthy,
|
|
44
|
+
unhealthy_threshold: @unhealthy,
|
|
45
|
+
}
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def populate!(aws)
|
|
49
|
+
@target = aws.target
|
|
50
|
+
@interval = aws.interval
|
|
51
|
+
@timeout = aws.timeout
|
|
52
|
+
@healthy = aws.healthy_threshold
|
|
53
|
+
@unhealthy = aws.unhealthy_threshold
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Public: Produce an array of differences between this local configuration and the
|
|
57
|
+
# configuration in AWS
|
|
58
|
+
#
|
|
59
|
+
# aws - the AWS resource
|
|
60
|
+
#
|
|
61
|
+
# Returns an array of the HealthCheckDiffs that were found
|
|
62
|
+
def diff(aws)
|
|
63
|
+
diffs = []
|
|
64
|
+
|
|
65
|
+
if @target != aws.target
|
|
66
|
+
diffs << HealthCheckDiff.new(HealthCheckChange::TARGET, aws.target, @target)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if @interval != aws.interval
|
|
70
|
+
diffs << HealthCheckDiff.new(HealthCheckChange::INTERVAL, aws.interval, @interval)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if @timeout != aws.timeout
|
|
74
|
+
diffs << HealthCheckDiff.new(HealthCheckChange::TIMEOUT, aws.timeout, @timeout)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
if @healthy != aws.healthy_threshold
|
|
78
|
+
diffs << HealthCheckDiff.new(HealthCheckChange::HEALTHY, aws.healthy_threshold, @healthy)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
if @unhealthy != aws.unhealthy_threshold
|
|
82
|
+
diffs << HealthCheckDiff.new(HealthCheckChange::UNHEALTHY, aws.unhealthy_threshold, @unhealthy)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
diffs
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require "common/models/Diff"
|
|
2
|
+
require "util/Colors"
|
|
3
|
+
|
|
4
|
+
module Cumulus
|
|
5
|
+
module ELB
|
|
6
|
+
# Public: The types of changes that can be made to an access log config
|
|
7
|
+
module HealthCheckChange
|
|
8
|
+
include Common::DiffChange
|
|
9
|
+
|
|
10
|
+
TARGET = Common::DiffChange.next_change_id
|
|
11
|
+
INTERVAL = Common::DiffChange.next_change_id
|
|
12
|
+
TIMEOUT = Common::DiffChange.next_change_id
|
|
13
|
+
HEALTHY = Common::DiffChange.next_change_id
|
|
14
|
+
UNHEALTHY = Common::DiffChange.next_change_id
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Public: Represents a single difference between local configuration and
|
|
18
|
+
# an AWS Load Balancer Health Check
|
|
19
|
+
class HealthCheckDiff < Common::Diff
|
|
20
|
+
include HealthCheckChange
|
|
21
|
+
|
|
22
|
+
def asset_type
|
|
23
|
+
"Health Check Config"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def change_string
|
|
27
|
+
case @type
|
|
28
|
+
when TARGET
|
|
29
|
+
"target:"
|
|
30
|
+
when INTERVAL
|
|
31
|
+
"interval:"
|
|
32
|
+
when TIMEOUT
|
|
33
|
+
"timeout:"
|
|
34
|
+
when HEALTHY
|
|
35
|
+
"healthy threshold:"
|
|
36
|
+
when UNHEALTHY
|
|
37
|
+
"unhealthy threshold:"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def diff_string
|
|
42
|
+
[
|
|
43
|
+
change_string,
|
|
44
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
45
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
46
|
+
].join("\n")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require "elb/models/ListenerDiff"
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
|
|
5
|
+
module Cumulus
|
|
6
|
+
module ELB
|
|
7
|
+
# Public: An object representing configuration for a listener
|
|
8
|
+
class ListenerConfig
|
|
9
|
+
attr_reader :load_balancer_protocol
|
|
10
|
+
attr_reader :load_balancer_port
|
|
11
|
+
attr_reader :instance_protocol
|
|
12
|
+
attr_reader :instance_port
|
|
13
|
+
attr_reader :ssl_certificate_id
|
|
14
|
+
attr_reader :policies
|
|
15
|
+
|
|
16
|
+
# Public: Constructor
|
|
17
|
+
#
|
|
18
|
+
# json - a hash containing the JSON configuration for the listener
|
|
19
|
+
def initialize(json = nil)
|
|
20
|
+
if !json.nil?
|
|
21
|
+
@load_balancer_protocol = json["load-balancer-protocol"]
|
|
22
|
+
@load_balancer_port = json["load-balancer-port"]
|
|
23
|
+
@instance_protocol = json["instance-protocol"]
|
|
24
|
+
@instance_port = json["instance-port"]
|
|
25
|
+
@ssl_certificate_id = json["ssl-certificate-id"]
|
|
26
|
+
@policies = json["policies"] || []
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_hash
|
|
31
|
+
{
|
|
32
|
+
"load-balancer-protocol" => @load_balancer_protocol,
|
|
33
|
+
"load-balancer-port" => @load_balancer_port,
|
|
34
|
+
"instance-protocol" => @instance_protocol,
|
|
35
|
+
"instance-port" => @instance_port,
|
|
36
|
+
"ssl-certificate-id" => @ssl_certificate_id,
|
|
37
|
+
"policies" => @policies,
|
|
38
|
+
}.reject { |k, v| v.nil? }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def to_aws
|
|
42
|
+
{
|
|
43
|
+
protocol: @load_balancer_protocol,
|
|
44
|
+
load_balancer_port: @load_balancer_port,
|
|
45
|
+
instance_protocol: @instance_protocol,
|
|
46
|
+
instance_port: @instance_port,
|
|
47
|
+
ssl_certificate_id: @ssl_certificate_id,
|
|
48
|
+
}.reject { |k, v| v.nil? }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def populate!(aws)
|
|
52
|
+
@load_balancer_protocol = aws.listener.protocol
|
|
53
|
+
@load_balancer_port = aws.listener.load_balancer_port
|
|
54
|
+
@instance_protocol = aws.listener.instance_protocol
|
|
55
|
+
@instance_port = aws.listener.instance_port
|
|
56
|
+
@ssl_certificate_id = aws.listener.ssl_certificate_id
|
|
57
|
+
@policies = aws.policy_names
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Public: Produce an array of differences between this local configuration and the
|
|
61
|
+
# configuration in AWS
|
|
62
|
+
#
|
|
63
|
+
# aws - the AWS resource
|
|
64
|
+
#
|
|
65
|
+
# Returns an array of the ListenerDiffs that were found
|
|
66
|
+
def diff(aws)
|
|
67
|
+
diffs = []
|
|
68
|
+
|
|
69
|
+
if @load_balancer_protocol != aws.listener.protocol
|
|
70
|
+
diffs << ListenerDiff.new(ListenerChange::LB_PROTOCOL, aws.listener.protocol, @load_balancer_protocol)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if @load_balancer_port != aws.listener.load_balancer_port
|
|
74
|
+
diffs << ListenerDiff.new(ListenerChange::LB_PORT, aws.listener.load_balancer_port, @load_balancer_port)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
if @instance_protocol != aws.listener.instance_protocol
|
|
78
|
+
diffs << ListenerDiff.new(ListenerChange::INST_PROTOCOL, aws.listener.instance_protocol, @instance_protocol)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
if @instance_port != aws.listener.instance_port
|
|
82
|
+
diffs << ListenerDiff.new(ListenerChange::INST_PORT, aws.listener.instance_port, @instance_port)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
if @ssl_certificate_id != aws.listener.ssl_certificate_id
|
|
86
|
+
diffs << ListenerDiff.new(ListenerChange::SSL, aws.listener.ssl_certificate_id, @ssl_certificate_id)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
if @policies.sort != aws.policy_names.sort
|
|
90
|
+
diffs << ListenerDiff.policies(aws.policy_names, @policies)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
diffs
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require "common/models/Diff"
|
|
2
|
+
require "util/Colors"
|
|
3
|
+
|
|
4
|
+
module Cumulus
|
|
5
|
+
module ELB
|
|
6
|
+
# Public: The types of changes that can be made to an access log config
|
|
7
|
+
module ListenerChange
|
|
8
|
+
include Common::DiffChange
|
|
9
|
+
|
|
10
|
+
LB_PROTOCOL = Common::DiffChange.next_change_id
|
|
11
|
+
LB_PORT = Common::DiffChange.next_change_id
|
|
12
|
+
INST_PROTOCOL = Common::DiffChange.next_change_id
|
|
13
|
+
INST_PORT = Common::DiffChange.next_change_id
|
|
14
|
+
SSL = Common::DiffChange.next_change_id
|
|
15
|
+
POLICIES = Common::DiffChange.next_change_id
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Public: Represents a single difference between local configuration and
|
|
19
|
+
# an AWS Load Balancer Listener
|
|
20
|
+
class ListenerDiff < Common::Diff
|
|
21
|
+
include ListenerChange
|
|
22
|
+
|
|
23
|
+
attr_accessor :policies
|
|
24
|
+
|
|
25
|
+
def asset_type
|
|
26
|
+
"Listener for port"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def aws_name
|
|
30
|
+
"#{aws.listener.load_balancer_port}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def local_name
|
|
34
|
+
"#{local.load_balancer_port}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def unmanaged_string
|
|
38
|
+
"will be deleted."
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.policies(aws, local)
|
|
42
|
+
added = local - aws
|
|
43
|
+
removed = aws - local
|
|
44
|
+
diff = ListenerDiff.new(POLICIES, aws, local)
|
|
45
|
+
diff.policies = Common::ListChange.new(added, removed)
|
|
46
|
+
diff
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def diff_string
|
|
50
|
+
case @type
|
|
51
|
+
when LB_PROTOCOL
|
|
52
|
+
[
|
|
53
|
+
"load balancer protocol:",
|
|
54
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
55
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
56
|
+
].join("\n")
|
|
57
|
+
when LB_PORT
|
|
58
|
+
[
|
|
59
|
+
"load balancer port:",
|
|
60
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
61
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
62
|
+
].join("\n")
|
|
63
|
+
when INST_PROTOCOL
|
|
64
|
+
[
|
|
65
|
+
"instance protocol:",
|
|
66
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
67
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
68
|
+
].join("\n")
|
|
69
|
+
when INST_PORT
|
|
70
|
+
[
|
|
71
|
+
"instance port:",
|
|
72
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
73
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
74
|
+
].join("\n")
|
|
75
|
+
when SSL
|
|
76
|
+
[
|
|
77
|
+
"ssl certificate id:",
|
|
78
|
+
Colors.aws_changes("\tAWS - #{aws}"),
|
|
79
|
+
Colors.local_changes("\tLocal - #{local}"),
|
|
80
|
+
].join("\n")
|
|
81
|
+
when POLICIES
|
|
82
|
+
[
|
|
83
|
+
"policies:",
|
|
84
|
+
@policies.removed.map { |p| Colors.removed("\t#{p}") },
|
|
85
|
+
@policies.added.map { |p| Colors.added("\t#{p}") },
|
|
86
|
+
].flatten.join("\n")
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|