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,73 @@
|
|
|
1
|
+
require "common/models/Diff"
|
|
2
|
+
require "util/Colors"
|
|
3
|
+
|
|
4
|
+
module Cumulus
|
|
5
|
+
module AutoScaling
|
|
6
|
+
# Public: The types of changes that can be made to scaling policies
|
|
7
|
+
module PolicyChange
|
|
8
|
+
include Common::DiffChange
|
|
9
|
+
|
|
10
|
+
ADJUSTMENT = Common::DiffChange::next_change_id
|
|
11
|
+
ADJUSTMENT_TYPE = Common::DiffChange::next_change_id
|
|
12
|
+
ALARM = Common::DiffChange::next_change_id
|
|
13
|
+
COOLDOWN = Common::DiffChange::next_change_id
|
|
14
|
+
MIN_ADJUSTMENT = Common::DiffChange::next_change_id
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Public: Represents a single difference between local configuration and AWS
|
|
18
|
+
# configuration of scaling policies
|
|
19
|
+
class PolicyDiff < Common::Diff
|
|
20
|
+
include PolicyChange
|
|
21
|
+
|
|
22
|
+
attr_accessor :alarm_diffs
|
|
23
|
+
attr_accessor :policy_arn
|
|
24
|
+
|
|
25
|
+
# Public: Static method that will produce a diff that contains changes in
|
|
26
|
+
# cloudwatch alarms
|
|
27
|
+
#
|
|
28
|
+
# alarm_diffs - the differences in alarms
|
|
29
|
+
# local - the local configuration for the change
|
|
30
|
+
# policy_arn - the arn of the policy the alarms should be associated with
|
|
31
|
+
#
|
|
32
|
+
# Returns the diff
|
|
33
|
+
def self.alarms(alarm_diffs, local, policy_arn)
|
|
34
|
+
diff = PolicyDiff.new(ALARM, nil, local)
|
|
35
|
+
diff.alarm_diffs = alarm_diffs
|
|
36
|
+
diff.policy_arn = policy_arn
|
|
37
|
+
diff
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def diff_string
|
|
41
|
+
diff_lines = [@local.name]
|
|
42
|
+
|
|
43
|
+
case @type
|
|
44
|
+
when ADJUSTMENT_TYPE
|
|
45
|
+
diff_lines << "\tAdjustment type: AWS - #{Colors.aws_changes(@aws.adjustment_type)}, Local - #{Colors.local_changes(@local.adjustment_type)}"
|
|
46
|
+
when ADJUSTMENT
|
|
47
|
+
diff_lines << "\tScaling adjustment: AWS - #{Colors.aws_changes(@aws.scaling_adjustment)}, Local - #{Colors.local_changes(@local.adjustment)}"
|
|
48
|
+
when ALARM
|
|
49
|
+
lines = ["\t\tCloudwatch alarms:"]
|
|
50
|
+
lines << alarm_diffs.map do |diff|
|
|
51
|
+
diff.to_s.lines.map {|s| "\t\t\t#{s}" }.join
|
|
52
|
+
end
|
|
53
|
+
diff_lines << lines.flatten.join("\n")
|
|
54
|
+
when COOLDOWN
|
|
55
|
+
diff_lines << "\tCooldown: AWS - #{Colors.aws_changes(@aws.cooldown)}, Local - #{Colors.local_changes(@local.cooldown)}"
|
|
56
|
+
when MIN_ADJUSTMENT
|
|
57
|
+
diff_lines << "\tMin adjustment step: AWS - #{Colors.aws_changes(@aws.min_adjustment_step)}, Local - #{Colors.local_changes(@local.min_adjustment)}"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
diff_lines.flatten.join("\n")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def asset_type
|
|
64
|
+
"Scaling policy"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def aws_name
|
|
68
|
+
@aws.policy_name
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require "common/models/Diff"
|
|
2
|
+
require "util/Colors"
|
|
3
|
+
|
|
4
|
+
module Cumulus
|
|
5
|
+
module AutoScaling
|
|
6
|
+
# Public: The types of changes that can be made to Scheduled Actions
|
|
7
|
+
module ScheduledActionChange
|
|
8
|
+
include Common::DiffChange
|
|
9
|
+
|
|
10
|
+
START = Common::DiffChange::next_change_id
|
|
11
|
+
ENDTIME = Common::DiffChange::next_change_id
|
|
12
|
+
RECURRENCE = Common::DiffChange::next_change_id
|
|
13
|
+
MIN = Common::DiffChange::next_change_id
|
|
14
|
+
MAX = Common::DiffChange::next_change_id
|
|
15
|
+
DESIRED = Common::DiffChange::next_change_id
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Public: Represents a single difference between local configuration and AWS
|
|
19
|
+
# configuration of Scheduled Actions
|
|
20
|
+
class ScheduledActionDiff < Common::Diff
|
|
21
|
+
include ScheduledActionChange
|
|
22
|
+
|
|
23
|
+
def diff_string
|
|
24
|
+
diff_lines = []
|
|
25
|
+
|
|
26
|
+
case @type
|
|
27
|
+
when START
|
|
28
|
+
diff_lines << "Start: AWS - #{Colors.aws_changes(@aws.start_time)}, Local - #{Colors.local_changes(@local.start)}"
|
|
29
|
+
when ENDTIME
|
|
30
|
+
diff_lines << "End: AWS - #{Colors.aws_changes(@aws.end_time)}, Local - #{Colors.local_changes(@local.end)}"
|
|
31
|
+
when RECURRENCE
|
|
32
|
+
diff_lines << "Recurrence: AWS - #{Colors.aws_changes(@aws.recurrence)}, Local - #{Colors.local_changes(@local.recurrence)}"
|
|
33
|
+
when MIN
|
|
34
|
+
diff_lines << "Min size: AWS - #{Colors.aws_changes(@aws.min_size)}, Local - #{Colors.local_changes(@local.min)}"
|
|
35
|
+
when MAX
|
|
36
|
+
diff_lines << "Max size: AWS - #{Colors.aws_changes(@aws.max_size)}, Local - #{Colors.local_changes(@local.max)}"
|
|
37
|
+
when DESIRED
|
|
38
|
+
diff_lines << "Desired capacity: AWS - #{Colors.aws_changes(@aws.desired_capacity)}, Local - #{Colors.local_changes(@local.desired)}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
diff_lines.flatten.join("\n")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def asset_type
|
|
45
|
+
"Scheduled action"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def aws_name
|
|
49
|
+
@aws.scheduled_action_name
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require "autoscaling/models/ScheduledActionDiff"
|
|
2
|
+
|
|
3
|
+
module Cumulus
|
|
4
|
+
module AutoScaling
|
|
5
|
+
# Public: A class representing the configuration for a scheduled scaling action
|
|
6
|
+
class ScheduledConfig
|
|
7
|
+
attr_accessor :desired
|
|
8
|
+
attr_accessor :end
|
|
9
|
+
attr_accessor :max
|
|
10
|
+
attr_accessor :min
|
|
11
|
+
attr_accessor :name
|
|
12
|
+
attr_accessor :recurrence
|
|
13
|
+
attr_accessor :start
|
|
14
|
+
|
|
15
|
+
# Public: Constructor
|
|
16
|
+
#
|
|
17
|
+
# json - a hash representing the JSON configuration for this action
|
|
18
|
+
def initialize(json = nil)
|
|
19
|
+
if !json.nil?
|
|
20
|
+
@name = json["name"]
|
|
21
|
+
if !json["start"].nil? and json["start"] != ""
|
|
22
|
+
@start = Time.parse(json["start"])
|
|
23
|
+
end
|
|
24
|
+
if !json["end"].nil? and json["end"] != ""
|
|
25
|
+
@end = Time.parse(json["end"])
|
|
26
|
+
end
|
|
27
|
+
@recurrence = json["recurrence"]
|
|
28
|
+
@min = json["min"]
|
|
29
|
+
@max = json["max"]
|
|
30
|
+
@desired = json["desired"]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Public: Get the configuration as a hash
|
|
35
|
+
#
|
|
36
|
+
# Returns the hash
|
|
37
|
+
def hash
|
|
38
|
+
{
|
|
39
|
+
"desired" => @desired,
|
|
40
|
+
"end" => @end,
|
|
41
|
+
"max" => @max,
|
|
42
|
+
"min" => @min,
|
|
43
|
+
"name" => @name,
|
|
44
|
+
"recurrence" => @recurrence,
|
|
45
|
+
"start" => @start
|
|
46
|
+
}.reject { |k, v| v.nil? }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Public: Produce the differences between this local configuration and the
|
|
50
|
+
# configuration in AWS
|
|
51
|
+
#
|
|
52
|
+
# aws - the scheduled action in AWS
|
|
53
|
+
def diff(aws)
|
|
54
|
+
diffs = []
|
|
55
|
+
|
|
56
|
+
# we check if start is nil, cause even in the case that it is nil, aws
|
|
57
|
+
# will still give the scheduled action a start time on creation. This is
|
|
58
|
+
# annoying, because it will make it seem as if start time is always changed.
|
|
59
|
+
if @start != aws.start_time and !@start.nil?
|
|
60
|
+
diffs << ScheduledActionDiff.new(ScheduledActionChange::START, aws, self)
|
|
61
|
+
end
|
|
62
|
+
if @end != aws.end_time
|
|
63
|
+
diffs << ScheduledActionDiff.new(ScheduledActionChange::ENDTIME, aws, self)
|
|
64
|
+
end
|
|
65
|
+
if @recurrence != aws.recurrence
|
|
66
|
+
diffs << ScheduledActionDiff.new(ScheduledActionChange::RECURRENCE, aws, self)
|
|
67
|
+
end
|
|
68
|
+
if @min != aws.min_size
|
|
69
|
+
diffs << ScheduledActionDiff.new(ScheduledActionChange::MIN, aws, self)
|
|
70
|
+
end
|
|
71
|
+
if @max != aws.max_size
|
|
72
|
+
diffs << ScheduledActionDiff.new(ScheduledActionChange::MAX, aws, self)
|
|
73
|
+
end
|
|
74
|
+
if @desired != aws.desired_capacity
|
|
75
|
+
diffs << ScheduledActionDiff.new(ScheduledActionChange::DESIRED, aws, self)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
diffs
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Public: Populate the ScheduledConfig from an existing AWS resource
|
|
82
|
+
#
|
|
83
|
+
# resource - the aws resource to populate from
|
|
84
|
+
def populate(resource)
|
|
85
|
+
@desired = resource.desired_capacity
|
|
86
|
+
@end = resource.end_time
|
|
87
|
+
@max = resource.max_size
|
|
88
|
+
@min = resource.min_size
|
|
89
|
+
@name = resource.scheduled_action_name
|
|
90
|
+
@recurrence = resource.recurrence
|
|
91
|
+
@start = resource.start_time
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module AwsExtensions
|
|
2
|
+
module EC2
|
|
3
|
+
module DhcpOptions
|
|
4
|
+
|
|
5
|
+
# Public: Returns the value of the domain-name-servers
|
|
6
|
+
def domain_name_servers
|
|
7
|
+
get_attribute_values("domain-name-servers")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Public: Returns the value of domain-name
|
|
11
|
+
def domain_name
|
|
12
|
+
get_attribute_values("domain-name").first
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Public: Returns the value of ntp-servers if set
|
|
16
|
+
def ntp_servers
|
|
17
|
+
get_attribute_values("ntp-servers")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Public: Returns the value of netbios-name-servers
|
|
21
|
+
def netbios_name_servers
|
|
22
|
+
get_attribute_values("netbios-name-servers")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Public: Returns the value of netbios-node-type
|
|
26
|
+
def netbios_node_type
|
|
27
|
+
get_attribute_values("netbios-node-type").first
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# Internal: Gets an named attribute from the dhcp_configuration
|
|
33
|
+
def get_attribute_values(attr_name)
|
|
34
|
+
self.dhcp_configurations.select { |conf| conf.key == attr_name }.first.values.map(&:value)
|
|
35
|
+
rescue
|
|
36
|
+
[]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module AwsExtensions
|
|
2
|
+
module EC2
|
|
3
|
+
module Instance
|
|
4
|
+
|
|
5
|
+
# Public: Returns the value of the "Name" tag for the Instance
|
|
6
|
+
def name
|
|
7
|
+
self.tags.select { |tag| tag.key == "Name" }.first.value
|
|
8
|
+
rescue
|
|
9
|
+
nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Public: Returns an array of the block device mappings that are not for the root device
|
|
13
|
+
def nonroot_devices
|
|
14
|
+
self.block_device_mappings.reject { |m| m.device_name == self.root_device_name }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Public: Returns true if the instance is stopped
|
|
18
|
+
def stopped?
|
|
19
|
+
self.state.name == "stopped"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Public: Returns true if the instance is terminated
|
|
23
|
+
def terminated?
|
|
24
|
+
self.state.name == "terminated"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module AwsExtensions
|
|
2
|
+
module EC2
|
|
3
|
+
module NetworkAcl
|
|
4
|
+
|
|
5
|
+
# Public: Returns the value of the "Name" tag for the ACL
|
|
6
|
+
def name
|
|
7
|
+
self.tags.select { |tag| tag.key == "Name" }.first.value
|
|
8
|
+
rescue
|
|
9
|
+
nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Public: Returns the subnet ids associated with an ACL
|
|
13
|
+
def subnet_ids
|
|
14
|
+
self.associations.map { |assoc| assoc.subnet_id }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Public: Returns the enteries that are diffable by leaving out
|
|
18
|
+
# the last rule that denies all
|
|
19
|
+
def diffable_entries
|
|
20
|
+
self.entries.select { |entry| entry.rule_number < 32767 }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module AwsExtensions
|
|
2
|
+
module EC2
|
|
3
|
+
module RouteTable
|
|
4
|
+
|
|
5
|
+
# Public: Returns the value of the "Name" tag for the route table
|
|
6
|
+
def name
|
|
7
|
+
self.tags.select { |tag| tag.key == "Name" }.first.value
|
|
8
|
+
rescue
|
|
9
|
+
nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Public: Returns an array of subnet ids associated with the route table
|
|
13
|
+
def subnet_ids
|
|
14
|
+
self.associations.map { |assoc| assoc.subnet_id }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Public: Selects the routes in the route table that we care about by filtering out
|
|
18
|
+
# the default route with the local gateway and any routes that are for s3 service endpoints
|
|
19
|
+
# (ones that have a destination_prefix_list_id)
|
|
20
|
+
def diffable_routes
|
|
21
|
+
self.routes.select { |route| route.gateway_id != "local" and route.origin != "CreateRouteTable" and !route.destination_prefix_list_id }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require "ec2/EC2"
|
|
2
|
+
|
|
3
|
+
module AwsExtensions
|
|
4
|
+
module EC2
|
|
5
|
+
module SecurityGroup
|
|
6
|
+
|
|
7
|
+
# Public: Returns the name of the security group prefixed by the vpc name or id
|
|
8
|
+
def vpc_group_name
|
|
9
|
+
vpc = Cumulus::EC2::id_vpcs[self.vpc_id]
|
|
10
|
+
vpc_name = if vpc then "#{vpc.name}/" else "" end
|
|
11
|
+
"#{vpc_name}#{self.group_name}"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "ec2/EC2"
|
|
2
|
+
|
|
3
|
+
module AwsExtensions
|
|
4
|
+
module EC2
|
|
5
|
+
module Subnet
|
|
6
|
+
|
|
7
|
+
# Public: Returns the value of the "Name" tag for the subnet or nil if there is not one
|
|
8
|
+
def name
|
|
9
|
+
self.tags.select { |tag| tag.key == "Name" }.first.value
|
|
10
|
+
rescue
|
|
11
|
+
nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Public: Returns the name of the security group prefixed by the vpc name or id
|
|
15
|
+
def vpc_subnet_name
|
|
16
|
+
vpc = Cumulus::EC2::id_vpcs[self.vpc_id]
|
|
17
|
+
vpc_name = vpc.name || vpc.vpd_id
|
|
18
|
+
"#{vpc_name}/#{self.name}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Implement comparison by using subnet id
|
|
22
|
+
def <=>(other)
|
|
23
|
+
self.subnet_id <=> other.subnet_id
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module AwsExtensions
|
|
2
|
+
module EC2
|
|
3
|
+
module Volume
|
|
4
|
+
|
|
5
|
+
# Public: Returns the value of the "Group" tag for the Volume
|
|
6
|
+
def group
|
|
7
|
+
self.tags.select { |tag| tag.key == "Group" }.first.value
|
|
8
|
+
rescue
|
|
9
|
+
nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Public: Returns true if the volume is attached or attaching to anything
|
|
13
|
+
def attached?
|
|
14
|
+
self.attachments.map(&:state).any? { |state| state == "attached" || state == "attaching" }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Public: Returns true if the volume is not attached or attaching to anything
|
|
18
|
+
def detached?
|
|
19
|
+
!self.attached?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|