cumulus-aws 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +3 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +29 -0
  6. data/LICENSE +202 -0
  7. data/README.md +41 -0
  8. data/autocomplete +137 -0
  9. data/bin/cumulus +658 -0
  10. data/cumulus +2 -0
  11. data/cumulus-aws.gemspec +20 -0
  12. data/lib/autoscaling/AutoScaling.rb +40 -0
  13. data/lib/autoscaling/loader/Loader.rb +56 -0
  14. data/lib/autoscaling/manager/Manager.rb +360 -0
  15. data/lib/autoscaling/models/AlarmConfig.rb +165 -0
  16. data/lib/autoscaling/models/AlarmDiff.rb +172 -0
  17. data/lib/autoscaling/models/AutoScalingDiff.rb +178 -0
  18. data/lib/autoscaling/models/GroupConfig.rb +330 -0
  19. data/lib/autoscaling/models/PolicyConfig.rb +135 -0
  20. data/lib/autoscaling/models/PolicyDiff.rb +73 -0
  21. data/lib/autoscaling/models/ScheduledActionDiff.rb +53 -0
  22. data/lib/autoscaling/models/ScheduledConfig.rb +96 -0
  23. data/lib/aws_extensions/ec2/DhcpOptions.rb +41 -0
  24. data/lib/aws_extensions/ec2/Instance.rb +29 -0
  25. data/lib/aws_extensions/ec2/NetworkAcl.rb +25 -0
  26. data/lib/aws_extensions/ec2/NetworkInterface.rb +14 -0
  27. data/lib/aws_extensions/ec2/RouteTable.rb +26 -0
  28. data/lib/aws_extensions/ec2/SecurityGroup.rb +16 -0
  29. data/lib/aws_extensions/ec2/Subnet.rb +28 -0
  30. data/lib/aws_extensions/ec2/Volume.rb +24 -0
  31. data/lib/aws_extensions/ec2/Vpc.rb +14 -0
  32. data/lib/aws_extensions/ec2/VpcEndpoint.rb +11 -0
  33. data/lib/aws_extensions/elb/BackendServerDescription.rb +12 -0
  34. data/lib/aws_extensions/elb/PolicyDescription.rb +14 -0
  35. data/lib/aws_extensions/kinesis/StreamDescription.rb +12 -0
  36. data/lib/aws_extensions/route53/AliasTarget.rb +21 -0
  37. data/lib/aws_extensions/s3/Bucket.rb +33 -0
  38. data/lib/aws_extensions/s3/BucketAcl.rb +28 -0
  39. data/lib/aws_extensions/s3/BucketCors.rb +17 -0
  40. data/lib/aws_extensions/s3/BucketLifecycle.rb +21 -0
  41. data/lib/aws_extensions/s3/BucketLogging.rb +18 -0
  42. data/lib/aws_extensions/s3/BucketNotification.rb +23 -0
  43. data/lib/aws_extensions/s3/BucketPolicy.rb +18 -0
  44. data/lib/aws_extensions/s3/BucketTagging.rb +15 -0
  45. data/lib/aws_extensions/s3/BucketVersioning.rb +14 -0
  46. data/lib/aws_extensions/s3/BucketWebsite.rb +49 -0
  47. data/lib/aws_extensions/s3/CORSRule.rb +27 -0
  48. data/lib/aws_extensions/s3/ReplicationConfiguration.rb +22 -0
  49. data/lib/cloudfront/CloudFront.rb +83 -0
  50. data/lib/cloudfront/loader/Loader.rb +31 -0
  51. data/lib/cloudfront/manager/Manager.rb +183 -0
  52. data/lib/cloudfront/models/CacheBehaviorConfig.rb +237 -0
  53. data/lib/cloudfront/models/CacheBehaviorDiff.rb +211 -0
  54. data/lib/cloudfront/models/CustomOriginConfig.rb +51 -0
  55. data/lib/cloudfront/models/CustomOriginDiff.rb +74 -0
  56. data/lib/cloudfront/models/DistributionConfig.rb +183 -0
  57. data/lib/cloudfront/models/DistributionDiff.rb +131 -0
  58. data/lib/cloudfront/models/InvalidationConfig.rb +37 -0
  59. data/lib/cloudfront/models/OriginConfig.rb +144 -0
  60. data/lib/cloudfront/models/OriginDiff.rb +86 -0
  61. data/lib/cloudfront/models/OriginSslProtocols.rb +28 -0
  62. data/lib/cloudfront/models/OriginSslProtocolsDiff.rb +39 -0
  63. data/lib/common/BaseLoader.rb +80 -0
  64. data/lib/common/manager/Manager.rb +148 -0
  65. data/lib/common/models/Diff.rb +114 -0
  66. data/lib/common/models/ListChange.rb +21 -0
  67. data/lib/common/models/TagsDiff.rb +55 -0
  68. data/lib/common/models/UTCTimeSource.rb +17 -0
  69. data/lib/conf/Configuration.rb +365 -0
  70. data/lib/ec2/EC2.rb +503 -0
  71. data/lib/ec2/IPProtocolMapping.rb +165 -0
  72. data/lib/ec2/loaders/EbsLoader.rb +19 -0
  73. data/lib/ec2/loaders/InstanceLoader.rb +32 -0
  74. data/lib/ec2/managers/EbsManager.rb +176 -0
  75. data/lib/ec2/managers/InstanceManager.rb +509 -0
  76. data/lib/ec2/models/EbsGroupConfig.rb +133 -0
  77. data/lib/ec2/models/EbsGroupDiff.rb +48 -0
  78. data/lib/ec2/models/InstanceConfig.rb +202 -0
  79. data/lib/ec2/models/InstanceDiff.rb +95 -0
  80. data/lib/elb/ELB.rb +148 -0
  81. data/lib/elb/loader/Loader.rb +65 -0
  82. data/lib/elb/manager/Manager.rb +581 -0
  83. data/lib/elb/models/AccessLogConfig.rb +82 -0
  84. data/lib/elb/models/AccessLogDiff.rb +47 -0
  85. data/lib/elb/models/HealthCheckConfig.rb +91 -0
  86. data/lib/elb/models/HealthCheckDiff.rb +50 -0
  87. data/lib/elb/models/ListenerConfig.rb +99 -0
  88. data/lib/elb/models/ListenerDiff.rb +91 -0
  89. data/lib/elb/models/LoadBalancerConfig.rb +239 -0
  90. data/lib/elb/models/LoadBalancerDiff.rb +265 -0
  91. data/lib/iam/IAM.rb +36 -0
  92. data/lib/iam/loader/Loader.rb +117 -0
  93. data/lib/iam/manager/IamGroups.rb +98 -0
  94. data/lib/iam/manager/IamResource.rb +288 -0
  95. data/lib/iam/manager/IamRoles.rb +112 -0
  96. data/lib/iam/manager/IamUsers.rb +54 -0
  97. data/lib/iam/manager/Manager.rb +29 -0
  98. data/lib/iam/migration/AssumeRoleUnifier.rb +34 -0
  99. data/lib/iam/migration/PolicyUnifier.rb +90 -0
  100. data/lib/iam/models/GroupConfig.rb +40 -0
  101. data/lib/iam/models/IamDiff.rb +132 -0
  102. data/lib/iam/models/PolicyConfig.rb +67 -0
  103. data/lib/iam/models/ResourceWithPolicy.rb +208 -0
  104. data/lib/iam/models/RoleConfig.rb +53 -0
  105. data/lib/iam/models/StatementConfig.rb +35 -0
  106. data/lib/iam/models/UserConfig.rb +21 -0
  107. data/lib/kinesis/Kinesis.rb +94 -0
  108. data/lib/kinesis/loader/Loader.rb +19 -0
  109. data/lib/kinesis/manager/Manager.rb +206 -0
  110. data/lib/kinesis/models/StreamConfig.rb +75 -0
  111. data/lib/kinesis/models/StreamDiff.rb +58 -0
  112. data/lib/lambda/Lambda.rb +41 -0
  113. data/lib/route53/loader/Loader.rb +32 -0
  114. data/lib/route53/manager/Manager.rb +241 -0
  115. data/lib/route53/models/AliasTarget.rb +86 -0
  116. data/lib/route53/models/RecordConfig.rb +178 -0
  117. data/lib/route53/models/RecordDiff.rb +140 -0
  118. data/lib/route53/models/Vpc.rb +24 -0
  119. data/lib/route53/models/ZoneConfig.rb +156 -0
  120. data/lib/route53/models/ZoneDiff.rb +118 -0
  121. data/lib/s3/S3.rb +89 -0
  122. data/lib/s3/loader/Loader.rb +66 -0
  123. data/lib/s3/manager/Manager.rb +296 -0
  124. data/lib/s3/models/BucketConfig.rb +321 -0
  125. data/lib/s3/models/BucketDiff.rb +167 -0
  126. data/lib/s3/models/GrantConfig.rb +189 -0
  127. data/lib/s3/models/GrantDiff.rb +50 -0
  128. data/lib/s3/models/LifecycleConfig.rb +142 -0
  129. data/lib/s3/models/LifecycleDiff.rb +46 -0
  130. data/lib/s3/models/LoggingConfig.rb +81 -0
  131. data/lib/s3/models/NotificationConfig.rb +157 -0
  132. data/lib/s3/models/NotificationDiff.rb +62 -0
  133. data/lib/s3/models/ReplicationConfig.rb +133 -0
  134. data/lib/s3/models/ReplicationDiff.rb +60 -0
  135. data/lib/s3/models/WebsiteConfig.rb +107 -0
  136. data/lib/security/SecurityGroups.rb +39 -0
  137. data/lib/security/loader/Loader.rb +94 -0
  138. data/lib/security/manager/Manager.rb +246 -0
  139. data/lib/security/models/RuleConfig.rb +161 -0
  140. data/lib/security/models/RuleDiff.rb +72 -0
  141. data/lib/security/models/RuleMigration.rb +127 -0
  142. data/lib/security/models/SecurityGroupConfig.rb +172 -0
  143. data/lib/security/models/SecurityGroupDiff.rb +112 -0
  144. data/lib/sns/SNS.rb +40 -0
  145. data/lib/sqs/SQS.rb +62 -0
  146. data/lib/sqs/loader/Loader.rb +34 -0
  147. data/lib/sqs/manager/Manager.rb +128 -0
  148. data/lib/sqs/models/DeadLetterConfig.rb +70 -0
  149. data/lib/sqs/models/DeadLetterDiff.rb +35 -0
  150. data/lib/sqs/models/QueueConfig.rb +115 -0
  151. data/lib/sqs/models/QueueDiff.rb +89 -0
  152. data/lib/util/Colors.rb +111 -0
  153. data/lib/util/StatusCodes.rb +51 -0
  154. data/lib/vpc/loader/Loader.rb +73 -0
  155. data/lib/vpc/manager/Manager.rb +954 -0
  156. data/lib/vpc/models/AclEntryConfig.rb +150 -0
  157. data/lib/vpc/models/AclEntryDiff.rb +54 -0
  158. data/lib/vpc/models/DhcpConfig.rb +100 -0
  159. data/lib/vpc/models/DhcpDiff.rb +90 -0
  160. data/lib/vpc/models/EndpointConfig.rb +76 -0
  161. data/lib/vpc/models/EndpointDiff.rb +69 -0
  162. data/lib/vpc/models/NetworkAclConfig.rb +87 -0
  163. data/lib/vpc/models/NetworkAclDiff.rb +116 -0
  164. data/lib/vpc/models/RouteConfig.rb +82 -0
  165. data/lib/vpc/models/RouteDiff.rb +50 -0
  166. data/lib/vpc/models/RouteTableConfig.rb +92 -0
  167. data/lib/vpc/models/RouteTableDiff.rb +101 -0
  168. data/lib/vpc/models/SubnetConfig.rb +113 -0
  169. data/lib/vpc/models/SubnetDiff.rb +78 -0
  170. data/lib/vpc/models/VpcConfig.rb +173 -0
  171. data/lib/vpc/models/VpcDiff.rb +315 -0
  172. data/rakefile.rb +8 -0
  173. metadata +245 -0
@@ -0,0 +1,131 @@
1
+ require "common/models/Diff"
2
+ require "common/models/ListChange"
3
+ require "util/Colors"
4
+
5
+ module Cumulus
6
+ module CloudFront
7
+
8
+ # Public: The types of changes that can be made to zones
9
+ module DistributionChange
10
+ include Common::DiffChange
11
+
12
+ ALIASES = Common::DiffChange::next_change_id
13
+ ORIGINS = Common::DiffChange::next_change_id
14
+ CACHE_DEFAULT = Common::DiffChange::next_change_id
15
+ CACHES = Common::DiffChange::next_change_id
16
+ COMMENT = Common::DiffChange::next_change_id
17
+ ENABLED = Common::DiffChange::next_change_id
18
+ end
19
+
20
+ # Public: Represents a single difference between local configuration and AWS
21
+ # configuration of zones.
22
+ class DistributionDiff < Common::Diff
23
+ include DistributionChange
24
+
25
+ attr_accessor :changed_origins
26
+ attr_accessor :added_aliases
27
+ attr_accessor :removed_aliases
28
+ attr_accessor :default_cache
29
+ attr_accessor :cache
30
+
31
+ # Public: Static method that produces a diff representing changes in origins
32
+ #
33
+ # changes - the OriginDiffs
34
+ # local - the local configuration for the distribution
35
+ #
36
+ # Returns the diff
37
+ def self.origins(changes, local)
38
+ diff = DistributionDiff.new(ORIGINS, nil, local)
39
+ diff.changed_origins = changes
40
+ diff
41
+ end
42
+
43
+ def self.aliases(added, removed, local)
44
+ diff = DistributionDiff.new(ALIASES, nil, local)
45
+ diff.added_aliases = added
46
+ diff.removed_aliases = removed
47
+ diff
48
+ end
49
+
50
+ def self.default_cache(diffs, local)
51
+ diff = DistributionDiff.new(CACHE_DEFAULT, nil, local)
52
+ diff.default_cache = diffs
53
+ diff
54
+ end
55
+
56
+ def self.caches(removed, added, diffs, local)
57
+ diff = DistributionDiff.new(CACHES, nil, local)
58
+ diff.cache = Common::ListChange.new(removed, added, diffs)
59
+ diff
60
+ end
61
+
62
+ def diff_string
63
+ case @type
64
+ when ALIASES
65
+ [
66
+ "aliases:",
67
+ @removed_aliases.map { |removed| Colors.removed("\t#{removed}") },
68
+ @added_aliases.map { |added| Colors.added("\t#{added}") },
69
+ ].flatten.join("\n")
70
+ when ORIGINS
71
+ [
72
+ "origins:",
73
+ @changed_origins.map do |o|
74
+ if o.type == ADD or o.type == UNMANAGED
75
+ o.to_s.lines.map { |l| "\t#{l}".chomp("\n")}
76
+ else
77
+ [
78
+ "\t#{o.local_name}",
79
+ o.to_s.lines.map { |l| "\t\t#{l}".chomp("\n")}
80
+ ].join("\n")
81
+ end
82
+ end
83
+ ].flatten.join("\n")
84
+ when CACHE_DEFAULT
85
+ [
86
+ "default cache behavior:",
87
+ (@default_cache.map do |c|
88
+ c.to_s.lines.map { |l| "\t#{l}".chomp("\n")}
89
+ end).join("\n"),
90
+ ].join("\n")
91
+ when CACHES
92
+ [
93
+ "cache behaviors:",
94
+ @cache.removed.map { |removed| Colors.removed("\t#{removed}") },
95
+ @cache.added.map { |added| Colors.added("\t#{added}") },
96
+ @cache.modified.map do |cache_name, cdiffs|
97
+ [
98
+ "\t#{cache_name}",
99
+ cdiffs.map do |cdiff|
100
+ cdiff.to_s.lines.map { |l| "\t\t#{l.chomp}"}
101
+ end
102
+ ]
103
+ end
104
+ ].flatten.join("\n")
105
+ when COMMENT
106
+ [
107
+ "comment:",
108
+ Colors.aws_changes("\tAWS - #{@aws.comment}"),
109
+ Colors.local_changes("\tLocal - #{@local.comment}"),
110
+ ].join("\n")
111
+ when ENABLED
112
+ [
113
+ "enabled:",
114
+ Colors.aws_changes("\tAWS - #{@aws.enabled}"),
115
+ Colors.local_changes("\tLocal - #{@local.enabled}"),
116
+ ].join("\n")
117
+ end
118
+ end
119
+
120
+ def asset_type
121
+ "Cloudfront Distribution"
122
+ end
123
+
124
+ def aws_name
125
+ @aws.id
126
+ end
127
+
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,37 @@
1
+ require "json"
2
+
3
+ module Cumulus
4
+ module CloudFront
5
+ # Public: An object representing configuration for a CloudFront invalidation
6
+ class InvalidationConfig
7
+ attr_reader :distribution_id
8
+ attr_reader :paths
9
+ attr_reader :name
10
+
11
+ # Public: Constructor
12
+ #
13
+ # json - a hash containing the JSON configuration for the invalidation
14
+ def initialize(name, json = nil)
15
+ if json
16
+ @name = name
17
+
18
+ begin
19
+ @distribution_id = json.fetch("distribution-id")
20
+ rescue KeyError
21
+ puts "Must supply 'distribution-id' in invalidation config"
22
+ exit
23
+ end
24
+
25
+ begin
26
+ @paths = json.fetch("paths")
27
+ rescue KeyError
28
+ puts "Must supply 'paths' in invalidation config"
29
+ exit
30
+ end
31
+
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,144 @@
1
+ require "conf/Configuration"
2
+ require "cloudfront/models/CustomOriginConfig"
3
+ require "cloudfront/models/OriginDiff"
4
+ require "cloudfront/models/OriginSslProtocols"
5
+
6
+ require "json"
7
+
8
+ module Cumulus
9
+ module CloudFront
10
+ # Public: An object representing configuration for a origin
11
+ class OriginConfig
12
+ attr_reader :name
13
+ attr_reader :id
14
+ attr_reader :domain_name
15
+ attr_reader :origin_path
16
+ attr_reader :s3_access_origin_identity
17
+ attr_reader :custom_origin_config
18
+
19
+ # Public: Constructor
20
+ #
21
+ # json - a hash containing the JSON configuration for the origin
22
+ def initialize(json = nil)
23
+ if !json.nil?
24
+ @id = json["id"]
25
+ @domain_name = json["domain-name"]
26
+ @origin_path = json["origin-path"]
27
+ @s3_access_origin_identity = json["s3-origin-access-identity"]
28
+ @custom_origin_config = if json["custom-origin-config"].nil?
29
+ nil
30
+ else
31
+ CustomOriginConfig.new(
32
+ json["custom-origin-config"]["http-port"],
33
+ json["custom-origin-config"]["https-port"],
34
+ json["custom-origin-config"]["protocol-policy"],
35
+ json["custom-origin-config"]["origin-ssl-protocols"] && OriginSslProtocols.new(
36
+ json["custom-origin-config"]["origin-ssl-protocols"]
37
+ )
38
+ )
39
+ end
40
+ @name = @id
41
+ end
42
+ end
43
+
44
+ def populate!(aws)
45
+ @id = aws.id
46
+ @domain_name = aws.domain_name
47
+ @origin_path = aws.origin_path
48
+ @s3_access_origin_identity = if aws.s3_origin_config then aws.s3_origin_config.origin_access_identity end
49
+ @custom_origin_config = if aws.custom_origin_config
50
+ CustomOriginConfig.new(
51
+ aws.custom_origin_config.http_port,
52
+ aws.custom_origin_config.https_port,
53
+ aws.custom_origin_config.origin_protocol_policy,
54
+ aws.custom_origin_config.origin_ssl_protocols && OriginSslProtocols.new(
55
+ aws.custom_origin_config.origin_ssl_protocols.items
56
+ )
57
+ )
58
+ end
59
+ @name = @id
60
+ end
61
+
62
+ # Public: Get the config as a hash
63
+ #
64
+ # Returns the hash
65
+ def to_local
66
+ {
67
+ "id" => @id,
68
+ "domain-name" => @domain_name,
69
+ "origin-path" => @origin_path,
70
+ "s3-origin-access-identity" => @s3_access_origin_identity,
71
+ "custom-origin-config" => if @custom_origin_config.nil? then nil else @custom_origin_config.to_local end
72
+ }.reject { |k, v| v.nil? }
73
+ end
74
+
75
+ def to_aws
76
+ {
77
+ id: @id,
78
+ domain_name: @domain_name,
79
+ origin_path: @origin_path,
80
+ s3_origin_config: if @s3_access_origin_identity.nil? then nil else
81
+ {
82
+ origin_access_identity: @s3_access_origin_identity
83
+ }
84
+ end,
85
+ custom_origin_config: if @custom_origin_config.nil? then nil else
86
+ {
87
+ http_port: @custom_origin_config.http_port,
88
+ https_port: @custom_origin_config.https_port,
89
+ origin_protocol_policy: @custom_origin_config.protocol_policy,
90
+ origin_ssl_protocols: if @custom_origin_config.origin_ssl_protocols
91
+ {
92
+ quantity: @custom_origin_config.origin_ssl_protocols.quantity,
93
+ items: @custom_origin_config.origin_ssl_protocols.items,
94
+ }
95
+ end
96
+ }
97
+ end
98
+ }
99
+ end
100
+
101
+ # Public: Produce an array of differences between this local configuration and the
102
+ # configuration in AWS
103
+ #
104
+ # aws - the AWS resource
105
+ #
106
+ # Returns an array of the OriginDiffs that were found
107
+ def diff(aws)
108
+ diffs = []
109
+
110
+ if @domain_name != aws.domain_name
111
+ diffs << OriginDiff.new(OriginChange::DOMAIN, aws, self)
112
+ end
113
+
114
+ if @origin_path != aws.origin_path
115
+ diffs << OriginDiff.new(OriginChange::PATH, aws, self)
116
+ end
117
+
118
+ # If s3 origin is defined here but not aws
119
+ if !aws.s3_origin_config.nil?
120
+ if @s3_access_origin_identity != aws.s3_origin_config.origin_access_identity
121
+ diffs << OriginDiff.new(OriginChange::S3, aws, self)
122
+ end
123
+ else
124
+ if !@s3_access_origin_identity.nil?
125
+ diffs << OriginDiff.new(OriginChange::S3, aws, self)
126
+ end
127
+ end
128
+
129
+ if @custom_origin_config.nil?
130
+ if !aws.custom_origin_config.nil?
131
+ custom_diffs = CustomOriginConfig.new(nil, nil, nil).diff(aws.custom_origin_config)
132
+ diffs << OriginDiff.custom(custom_diffs, aws, self) if !custom_diffs.empty?
133
+ end
134
+ else
135
+ custom_diffs = @custom_origin_config.diff(aws.custom_origin_config)
136
+ diffs << OriginDiff.custom(custom_diffs, aws, self) if !custom_diffs.empty?
137
+ end
138
+
139
+ diffs.flatten
140
+ end
141
+
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,86 @@
1
+ require "common/models/Diff"
2
+ require "util/Colors"
3
+
4
+ module Cumulus
5
+ module CloudFront
6
+
7
+ # Public: The types of changes that can be made to zones
8
+ module OriginChange
9
+ include Common::DiffChange
10
+
11
+ DOMAIN = Common::DiffChange::next_change_id
12
+ PATH = Common::DiffChange::next_change_id
13
+ S3 = Common::DiffChange::next_change_id
14
+ CUSTOM = Common::DiffChange::next_change_id
15
+ end
16
+
17
+ # Public: Represents a single difference between local configuration and AWS
18
+ # configuration of zones.
19
+ class OriginDiff < Common::Diff
20
+ include OriginChange
21
+
22
+ attr_accessor :custom_changes
23
+
24
+ # Public: Static method that produces a diff representing changes in custom origin
25
+ #
26
+ # changed_origins - the CustomOriginDiffs
27
+ # local - the local configuration for the zone
28
+ #
29
+ # Returns the diff
30
+ def self.custom(changes, aws, local)
31
+ diff = OriginDiff.new(CUSTOM, aws, local)
32
+ diff.custom_changes = changes
33
+ diff
34
+ end
35
+
36
+ def diff_string
37
+ case @type
38
+ when DOMAIN
39
+ [
40
+ "domain:",
41
+ Colors.aws_changes("\tAWS - #{@aws.domain_name}"),
42
+ Colors.local_changes("\tLocal - #{@local.domain_name}"),
43
+ ].join("\n")
44
+ when PATH
45
+ [
46
+ "path:",
47
+ Colors.aws_changes("\tAWS - #{@aws.origin_path}"),
48
+ Colors.local_changes("\tLocal - #{@local.origin_path}"),
49
+ ].join("\n")
50
+ when S3
51
+ aws_value = (@aws.s3_origin_config.origin_access_identity rescue nil)
52
+ [
53
+ "s3 origin access identity:",
54
+ Colors.aws_changes("\tAWS - #{aws_value}"),
55
+ Colors.local_changes("\tLocal - #{@local.s3_access_origin_identity}"),
56
+ ].join("\n")
57
+ when CUSTOM
58
+ [
59
+ "custom origin config:",
60
+ (@custom_changes.flat_map do |c|
61
+ c.to_s.lines.map { |l| "\t#{l.chomp}"}
62
+ end).join("\n"),
63
+ ].join("\n")
64
+ end
65
+ end
66
+
67
+ def asset_type
68
+ if (!@local.nil? and @local.s3_access_origin_identity.nil?) or (!@aws.nil? and @aws.s3_origin_config.nil?)
69
+ "Custom Origin"
70
+ else
71
+ "S3 Origin"
72
+ end
73
+ end
74
+
75
+ def local_name
76
+ @local.id
77
+ end
78
+
79
+ def aws_name
80
+ @aws.id
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,28 @@
1
+ require "cloudfront/models/OriginSslProtocolsDiff"
2
+
3
+ module Cumulus
4
+ module CloudFront
5
+ OriginSslProtocols = Struct.new(:items) do
6
+ def quantity
7
+ items && items.length || 0
8
+ end
9
+
10
+ def diff(aws)
11
+ diffs = []
12
+
13
+ aws_items = aws && aws.items || []
14
+ added_items = self.items - aws_items
15
+ removed_items = aws_items - self.items
16
+ if !added_items.empty? || !removed_items.empty?
17
+ diffs << OriginSslProtocolsDiff.items(added_items, removed_items, self)
18
+ end
19
+
20
+ diffs
21
+ end
22
+
23
+ def to_local
24
+ self.items
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ require "common/models/Diff"
2
+ require "common/models/ListChange"
3
+ require "util/Colors"
4
+
5
+ module Cumulus
6
+ module CloudFront
7
+ # Public: The types of changes that can be made to origin ssl protocols
8
+ module OriginSslProtocolsChange
9
+ include Common::DiffChange
10
+
11
+ ITEMS = Common::DiffChange::next_change_id
12
+ end
13
+
14
+ # Public: Represents a single difference between local configuration and AWS
15
+ # configuration of origin ssl protocols
16
+ class OriginSslProtocolsDiff < Common::Diff
17
+ include OriginSslProtocolsChange
18
+
19
+ attr_accessor :items
20
+
21
+ def self.items(added, removed, local)
22
+ diff = OriginSslProtocolsDiff.new(ITEMS, nil, local)
23
+ diff.items = Common::ListChange.new(added, removed)
24
+ diff
25
+ end
26
+
27
+ def diff_string
28
+ case @type
29
+ when ITEMS
30
+ [
31
+ "items:",
32
+ @items.removed.map { |removed| Colors.removed("\t#{removed}") },
33
+ @items.added.map { |added| Colors.added("\t#{added}") },
34
+ ].flatten.join("\n")
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end