cf_factory 0.0.4 → 0.0.5
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.
- data/bin/cf_factory +9 -9
- data/examples/base_vpc.rb +40 -40
- data/examples/cloudfront_private.rb +23 -23
- data/examples/cloudinit_script_for_one_instance.rb +77 -77
- data/examples/cloudinit_script_with_autoscaling.rb +85 -85
- data/examples/dynamodb_table.rb +24 -24
- data/examples/elastic_beanstalk_example.rb +23 -23
- data/examples/elb_with_cloudfront.rb +100 -100
- data/examples/instance_with_eip.rb +40 -40
- data/examples/instance_with_yum.rb +40 -40
- data/examples/just_an_instance.rb +31 -31
- data/examples/nat_mutual_monitoring.rb +69 -69
- data/examples/play_with_region_and_zones.rb +28 -28
- data/examples/ra_web_hosting.rb +148 -148
- data/examples/s3_with_cloudfront.rb +35 -35
- data/examples/test_vpc.rb +61 -61
- data/lib/cf_factory/as/cf_as_group.rb +80 -77
- data/lib/cf_factory/as/cf_as_launch_config.rb +55 -55
- data/lib/cf_factory/as/cf_as_scaling_policy.rb +35 -35
- data/lib/cf_factory/as/cf_as_update_policy.rb +23 -0
- data/lib/cf_factory/base/cf_base.rb +112 -102
- data/lib/cf_factory/base/cf_ec2_tag.rb +34 -34
- data/lib/cf_factory/base/cf_generator.rb +20 -20
- data/lib/cf_factory/base/cf_helper.rb +93 -93
- data/lib/cf_factory/base/cf_inner.rb +74 -74
- data/lib/cf_factory/base/cf_main.rb +103 -103
- data/lib/cf_factory/base/cf_mapping.rb +28 -28
- data/lib/cf_factory/base/cf_named_inner.rb +70 -1
- data/lib/cf_factory/base/cf_output.rb +26 -26
- data/lib/cf_factory/base/cf_parameter.rb +27 -27
- data/lib/cf_factory/base/cf_script_reader.rb +34 -34
- data/lib/cf_factory/cloudformation/cf_cloud_formation_init.rb +27 -27
- data/lib/cf_factory/cloudformation/cf_cloudformation_command.rb +39 -39
- data/lib/cf_factory/cloudformation/cf_cloudformation_commands.rb +27 -27
- data/lib/cf_factory/cloudformation/cf_cloudformation_config.rb +35 -35
- data/lib/cf_factory/cloudformation/cf_cloudformation_file.rb +40 -40
- data/lib/cf_factory/cloudformation/cf_cloudformation_files.rb +27 -27
- data/lib/cf_factory/cloudformation/cf_cloudformation_inner.rb +30 -30
- data/lib/cf_factory/cloudformation/cf_cloudformation_package.rb +36 -36
- data/lib/cf_factory/cloudformation/cf_cloudformation_packages.rb +44 -44
- data/lib/cf_factory/cloudformation/cf_cloudformation_sources.rb +32 -32
- data/lib/cf_factory/cloudformation/cf_init_script.rb +80 -80
- data/lib/cf_factory/cloudfront/cf_cache_behavior.rb +39 -39
- data/lib/cf_factory/cloudfront/cf_cache_behaviors.rb +30 -30
- data/lib/cf_factory/cloudfront/cf_cloudfront_distribution.rb +66 -66
- data/lib/cf_factory/cloudfront/cf_custom_origin_config.rb +39 -39
- data/lib/cf_factory/cloudfront/cf_default_cache_behavior.rb +34 -34
- data/lib/cf_factory/cloudfront/cf_distribution_config.rb +33 -33
- data/lib/cf_factory/cloudfront/cf_forwarded_values.rb +27 -27
- data/lib/cf_factory/cloudfront/cf_logging.rb +26 -26
- data/lib/cf_factory/cloudfront/cf_origin.rb +42 -42
- data/lib/cf_factory/cloudfront/cf_s3_origin_config.rb +27 -27
- data/lib/cf_factory/cloudwatch/cf_cloud_watch_alarm.rb +60 -60
- data/lib/cf_factory/dynamo/cf_dynamo_table.rb +45 -45
- data/lib/cf_factory/eb/cd_eb_solution_stack.rb +27 -28
- data/lib/cf_factory/eb/cf_eb_application.rb +41 -41
- data/lib/cf_factory/eb/cf_eb_application_version.rb +24 -24
- data/lib/cf_factory/eb/cf_eb_configuration_template.rb +36 -36
- data/lib/cf_factory/eb/cf_eb_environment.rb +56 -56
- data/lib/cf_factory/eb/cf_eb_option_setting.rb +19 -19
- data/lib/cf_factory/ec2/cf_ebs_volume.rb +56 -56
- data/lib/cf_factory/ec2/cf_ec2_instance.rb +80 -66
- data/lib/cf_factory/ec2/cf_ec2_security_group.rb +42 -42
- data/lib/cf_factory/ec2/cf_ec2_security_group_egress.rb +30 -30
- data/lib/cf_factory/ec2/cf_ec2_security_group_ingress.rb +41 -41
- data/lib/cf_factory/ec2/cf_eip.rb +28 -28
- data/lib/cf_factory/ec2/cf_eip_association.rb +33 -31
- data/lib/cf_factory/ec2/cf_inner_network_interface.rb +26 -0
- data/lib/cf_factory/ec2/cf_network_interface.rb +40 -0
- data/lib/cf_factory/elb/cf_app_cookie_stickiness_policy.rb +17 -17
- data/lib/cf_factory/elb/cf_elb.rb +51 -51
- data/lib/cf_factory/elb/cf_health_check.rb +25 -25
- data/lib/cf_factory/elb/cf_lb_cookie_stickiness_policy.rb +17 -17
- data/lib/cf_factory/elb/cf_listener.rb +28 -28
- data/lib/cf_factory/help/fixes.rb +15 -15
- data/lib/cf_factory/help/ip_mask.rb +167 -167
- data/lib/cf_factory/help/template_validation.rb +30 -30
- data/lib/cf_factory/iam/cf_iam_access_key.rb +34 -34
- data/lib/cf_factory/iam/cf_iam_group.rb +32 -32
- data/lib/cf_factory/iam/cf_iam_instance_profile.rb +32 -32
- data/lib/cf_factory/iam/cf_iam_policy.rb +20 -20
- data/lib/cf_factory/iam/cf_iam_role.rb +58 -58
- data/lib/cf_factory/iam/cf_iam_statement.rb +25 -25
- data/lib/cf_factory/iam/cf_iam_user.rb +36 -36
- data/lib/cf_factory/iam/cf_policy_document.rb +21 -21
- data/lib/cf_factory/modules/base_vpc.rb +63 -63
- data/lib/cf_factory/rds/cf_rds_instance.rb +55 -55
- data/lib/cf_factory/rds/cf_rds_security_group.rb +35 -35
- data/lib/cf_factory/rds/cf_rds_security_group_ingress.rb +31 -31
- data/lib/cf_factory/rds/cf_rds_subnet_group.rb +31 -31
- data/lib/cf_factory/route53/cf_elb_alias_target.rb +23 -23
- data/lib/cf_factory/route53/cf_record_set.rb +63 -63
- data/lib/cf_factory/route53/cf_route53_record_set.rb +63 -63
- data/lib/cf_factory/route53/cf_route53_record_set_group.rb +44 -44
- data/lib/cf_factory/s3/cf_s3_bucket.rb +34 -34
- data/lib/cf_factory/s3/cf_web_site_config.rb +26 -26
- data/lib/cf_factory/sqs/cf_sqs_queue.rb +28 -28
- data/lib/cf_factory/vpc/cf_attach_gateway.rb +30 -30
- data/lib/cf_factory/vpc/cf_internet_gateway.rb +32 -32
- data/lib/cf_factory/vpc/cf_network_acl.rb +41 -41
- data/lib/cf_factory/vpc/cf_network_acl_association.rb +26 -26
- data/lib/cf_factory/vpc/cf_network_acl_entry.rb +39 -39
- data/lib/cf_factory/vpc/cf_route.rb +45 -45
- data/lib/cf_factory/vpc/cf_route_table.rb +43 -43
- data/lib/cf_factory/vpc/cf_route_table_association.rb +26 -26
- data/lib/cf_factory/vpc/cf_subnet.rb +50 -50
- data/lib/cf_factory/vpc/cf_vpc.rb +66 -66
- data/lib/cf_factory.rb +12 -12
- metadata +120 -91
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
module CfFactory
|
|
2
|
-
class IpMask
|
|
3
|
-
attr_reader :bits, :ip_mask
|
|
4
|
-
|
|
5
|
-
def initialize(ip_mask, bits = 32) #if one parameter specified, means it's not a range, it's one address
|
|
6
|
-
@ip_mask = ip_mask
|
|
7
|
-
@bits = bits.to_i
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def self.create(ip_mask, bits = 32)
|
|
11
|
-
cleaned = IpMask.new(ip_mask, bits)
|
|
12
|
-
cleaned.clean_mask()
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def self.create_from_cidr(cidr)
|
|
16
|
-
#ip = cidr.split("/")[0].split(".")
|
|
17
|
-
#bits = cidr.split("/")[1].to_i
|
|
18
|
-
ip = cidr.split("/")[0]
|
|
19
|
-
bits = cidr.split("/")[1]
|
|
20
|
-
IpMask.new(ip, bits)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.create_from_num(number, bits)
|
|
24
|
-
ip_bytes = []
|
|
25
|
-
3.downto(0) {|i|
|
|
26
|
-
div = 256 ** i
|
|
27
|
-
b = number/div.to_i
|
|
28
|
-
ip_bytes << b.to_i
|
|
29
|
-
number = number % div
|
|
30
|
-
}
|
|
31
|
-
ip_bytes
|
|
32
|
-
IpMask.new(ip_bytes.join("."), bits)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def to_num
|
|
36
|
-
sum = 0
|
|
37
|
-
exp = 3
|
|
38
|
-
@ip_mask.split(".").each() {|ip|
|
|
39
|
-
sum += ip.to_i * (256 ** exp)
|
|
40
|
-
exp -= 1
|
|
41
|
-
}
|
|
42
|
-
sum
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def to_mask
|
|
46
|
-
bit_string = self.to_bit_string
|
|
47
|
-
r = bit_string.to_i(2)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def to_bit_string
|
|
51
|
-
bit_string = ("1"*@bits+"0"*(32-@bits))
|
|
52
|
-
#puts "#{bit_string}"
|
|
53
|
-
bit_string
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def free()
|
|
57
|
-
(2 ** 32) / used()
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def used()
|
|
61
|
-
2 ** @bits
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def generate_free()
|
|
65
|
-
self.to_num()
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def to_s
|
|
69
|
-
if @bits.to_i == 32
|
|
70
|
-
"#{@ip_mask}"
|
|
71
|
-
else
|
|
72
|
-
"#{@ip_mask}/#{@bits}"
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def clean_mask
|
|
77
|
-
ip_base_num = self.to_num
|
|
78
|
-
ip_bits_num = self.to_mask()
|
|
79
|
-
clean_mask = ip_base_num & ip_bits_num
|
|
80
|
-
#puts "clean_mask = #{clean_mask}"
|
|
81
|
-
IpMask.create_from_num(clean_mask,@bits)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def is_clean?
|
|
85
|
-
comp = self.clean_mask
|
|
86
|
-
return self.ip_mask != comp.ip_mask
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def divide(number_of_addresses)
|
|
90
|
-
possible_ranges = []
|
|
91
|
-
bits_to_move = (Math.log(number_of_addresses+1)/Math.log(2)).to_i
|
|
92
|
-
puts "asked to allocate #{number_of_addresses}; that corresponds to #{bits_to_move} bits"
|
|
93
|
-
puts "#{self.free()} are free"
|
|
94
|
-
max_subnets = self.free()/number_of_addresses
|
|
95
|
-
puts "given that every subnet should have #{number_of_addresses} addresses, there is currently space for #{max_subnets}"
|
|
96
|
-
0.upto(max_subnets-1) {|i|
|
|
97
|
-
num = self.to_num()
|
|
98
|
-
num += i*number_of_addresses
|
|
99
|
-
possible_range = IpMask.create_from_num(num, 32 - bits_to_move)
|
|
100
|
-
possible_ranges << possible_range
|
|
101
|
-
puts "possible range: #{possible_range}"
|
|
102
|
-
}
|
|
103
|
-
possible_ranges
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Takes an array of IP-Address-Numbers into account and allocates corresponding IP address ranges
|
|
107
|
-
def divide_individually(array_with_number_of_addresses)
|
|
108
|
-
possible_ranges = []
|
|
109
|
-
num = self.to_num()
|
|
110
|
-
bits_to_move = 32 - @bits
|
|
111
|
-
remaining_addresses = self.free
|
|
112
|
-
array_with_number_of_addresses.each() {|number_of_addresses_for_subnet|
|
|
113
|
-
if (2 ** bits_to_move) < number_of_addresses_for_subnet
|
|
114
|
-
puts "WARNING: could not allocate #{number_of_addresses_for_subnet} anymore (max #{(2 ** bits_to_move)})"
|
|
115
|
-
next
|
|
116
|
-
end
|
|
117
|
-
bits_to_move = [(Math.log(number_of_addresses_for_subnet+1)/Math.log(2)).to_i, bits_to_move].min
|
|
118
|
-
possible_range = IpMask.create_from_num(num, 32 - bits_to_move)
|
|
119
|
-
unless self.are_all_in_range?(possible_range)
|
|
120
|
-
puts "WARNING: the selected range '#{possible_range}' is outside the base range"
|
|
121
|
-
next
|
|
122
|
-
end
|
|
123
|
-
num += number_of_addresses_for_subnet
|
|
124
|
-
puts "[alloc #{number_of_addresses_for_subnet}] \tpossible range: #{possible_range}"
|
|
125
|
-
possible_ranges << possible_range
|
|
126
|
-
remaining_addresses -= (2 ** bits_to_move)
|
|
127
|
-
#puts "[to allocate = #{number_of_addresses_for_subnet}] => free = #{possible_range.free}"
|
|
128
|
-
}
|
|
129
|
-
possible_ranges
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def is_in_range?(ip_address)
|
|
133
|
-
comp_mask = IpMask.new(ip_address)
|
|
134
|
-
# transform ip address string to numerical values for bitwise operations
|
|
135
|
-
comp_ip = comp_mask.to_num
|
|
136
|
-
#puts "ip_address checked = #{comp_ip.to_s(2)}"
|
|
137
|
-
ip_base_num = self.to_num
|
|
138
|
-
#puts "range_mask = #{ip_base_num.to_s(2)}"
|
|
139
|
-
ip_bits_num = self.to_mask
|
|
140
|
-
#puts "bit_mask = #{ip_bits_num.to_s(2)}"
|
|
141
|
-
# perform an AND operation to get rid of the bits in the mask that don't count
|
|
142
|
-
clean_mask = ip_base_num & ip_bits_num
|
|
143
|
-
#puts "cleaned range_mask = #{ip_base_num.to_s(2)}"
|
|
144
|
-
# the ip address belongs to the range, when an AND with the bitmask equals the cleaned mask
|
|
145
|
-
#puts "(ip_address&bits = #{(comp_ip & ip_bits_num).to_s(2)}"
|
|
146
|
-
(comp_ip & ip_bits_num) == clean_mask
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
def are_all_in_range?(ip_mask)
|
|
150
|
-
#puts "check for #{ip_mask}"
|
|
151
|
-
return false if ip_mask.bits < self.bits
|
|
152
|
-
#
|
|
153
|
-
comp_ip = ip_mask.to_num
|
|
154
|
-
ip_base_num = self.to_num
|
|
155
|
-
ip_bits_num = self.to_mask
|
|
156
|
-
ip_clean = ip_base_num & ip_bits_num
|
|
157
|
-
#puts "comp = #{(comp_ip & ip_bits_num)} ip_clean = #{ip_clean} (ip_bits_num = #{ip_bits_num})"
|
|
158
|
-
(comp_ip & ip_bits_num) == ip_clean
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def ==(comp)
|
|
162
|
-
puts "comp = #{comp.class} #{comp.inspect}"
|
|
163
|
-
self.ip_mask == comp.ip_mask && self.bits == comp.bits
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
end
|
|
167
|
-
end
|
|
1
|
+
module CfFactory
|
|
2
|
+
class IpMask
|
|
3
|
+
attr_reader :bits, :ip_mask
|
|
4
|
+
|
|
5
|
+
def initialize(ip_mask, bits = 32) #if one parameter specified, means it's not a range, it's one address
|
|
6
|
+
@ip_mask = ip_mask
|
|
7
|
+
@bits = bits.to_i
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.create(ip_mask, bits = 32)
|
|
11
|
+
cleaned = IpMask.new(ip_mask, bits)
|
|
12
|
+
cleaned.clean_mask()
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.create_from_cidr(cidr)
|
|
16
|
+
#ip = cidr.split("/")[0].split(".")
|
|
17
|
+
#bits = cidr.split("/")[1].to_i
|
|
18
|
+
ip = cidr.split("/")[0]
|
|
19
|
+
bits = cidr.split("/")[1]
|
|
20
|
+
IpMask.new(ip, bits)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.create_from_num(number, bits)
|
|
24
|
+
ip_bytes = []
|
|
25
|
+
3.downto(0) {|i|
|
|
26
|
+
div = 256 ** i
|
|
27
|
+
b = number/div.to_i
|
|
28
|
+
ip_bytes << b.to_i
|
|
29
|
+
number = number % div
|
|
30
|
+
}
|
|
31
|
+
ip_bytes
|
|
32
|
+
IpMask.new(ip_bytes.join("."), bits)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def to_num
|
|
36
|
+
sum = 0
|
|
37
|
+
exp = 3
|
|
38
|
+
@ip_mask.split(".").each() {|ip|
|
|
39
|
+
sum += ip.to_i * (256 ** exp)
|
|
40
|
+
exp -= 1
|
|
41
|
+
}
|
|
42
|
+
sum
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def to_mask
|
|
46
|
+
bit_string = self.to_bit_string
|
|
47
|
+
r = bit_string.to_i(2)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def to_bit_string
|
|
51
|
+
bit_string = ("1"*@bits+"0"*(32-@bits))
|
|
52
|
+
#puts "#{bit_string}"
|
|
53
|
+
bit_string
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def free()
|
|
57
|
+
(2 ** 32) / used()
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def used()
|
|
61
|
+
2 ** @bits
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def generate_free()
|
|
65
|
+
self.to_num()
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def to_s
|
|
69
|
+
if @bits.to_i == 32
|
|
70
|
+
"#{@ip_mask}"
|
|
71
|
+
else
|
|
72
|
+
"#{@ip_mask}/#{@bits}"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def clean_mask
|
|
77
|
+
ip_base_num = self.to_num
|
|
78
|
+
ip_bits_num = self.to_mask()
|
|
79
|
+
clean_mask = ip_base_num & ip_bits_num
|
|
80
|
+
#puts "clean_mask = #{clean_mask}"
|
|
81
|
+
IpMask.create_from_num(clean_mask,@bits)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def is_clean?
|
|
85
|
+
comp = self.clean_mask
|
|
86
|
+
return self.ip_mask != comp.ip_mask
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def divide(number_of_addresses)
|
|
90
|
+
possible_ranges = []
|
|
91
|
+
bits_to_move = (Math.log(number_of_addresses+1)/Math.log(2)).to_i
|
|
92
|
+
puts "asked to allocate #{number_of_addresses}; that corresponds to #{bits_to_move} bits"
|
|
93
|
+
puts "#{self.free()} are free"
|
|
94
|
+
max_subnets = self.free()/number_of_addresses
|
|
95
|
+
puts "given that every subnet should have #{number_of_addresses} addresses, there is currently space for #{max_subnets}"
|
|
96
|
+
0.upto(max_subnets-1) {|i|
|
|
97
|
+
num = self.to_num()
|
|
98
|
+
num += i*number_of_addresses
|
|
99
|
+
possible_range = IpMask.create_from_num(num, 32 - bits_to_move)
|
|
100
|
+
possible_ranges << possible_range
|
|
101
|
+
puts "possible range: #{possible_range}"
|
|
102
|
+
}
|
|
103
|
+
possible_ranges
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Takes an array of IP-Address-Numbers into account and allocates corresponding IP address ranges
|
|
107
|
+
def divide_individually(array_with_number_of_addresses)
|
|
108
|
+
possible_ranges = []
|
|
109
|
+
num = self.to_num()
|
|
110
|
+
bits_to_move = 32 - @bits
|
|
111
|
+
remaining_addresses = self.free
|
|
112
|
+
array_with_number_of_addresses.each() {|number_of_addresses_for_subnet|
|
|
113
|
+
if (2 ** bits_to_move) < number_of_addresses_for_subnet
|
|
114
|
+
puts "WARNING: could not allocate #{number_of_addresses_for_subnet} anymore (max #{(2 ** bits_to_move)})"
|
|
115
|
+
next
|
|
116
|
+
end
|
|
117
|
+
bits_to_move = [(Math.log(number_of_addresses_for_subnet+1)/Math.log(2)).to_i, bits_to_move].min
|
|
118
|
+
possible_range = IpMask.create_from_num(num, 32 - bits_to_move)
|
|
119
|
+
unless self.are_all_in_range?(possible_range)
|
|
120
|
+
puts "WARNING: the selected range '#{possible_range}' is outside the base range"
|
|
121
|
+
next
|
|
122
|
+
end
|
|
123
|
+
num += number_of_addresses_for_subnet
|
|
124
|
+
puts "[alloc #{number_of_addresses_for_subnet}] \tpossible range: #{possible_range}"
|
|
125
|
+
possible_ranges << possible_range
|
|
126
|
+
remaining_addresses -= (2 ** bits_to_move)
|
|
127
|
+
#puts "[to allocate = #{number_of_addresses_for_subnet}] => free = #{possible_range.free}"
|
|
128
|
+
}
|
|
129
|
+
possible_ranges
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def is_in_range?(ip_address)
|
|
133
|
+
comp_mask = IpMask.new(ip_address)
|
|
134
|
+
# transform ip address string to numerical values for bitwise operations
|
|
135
|
+
comp_ip = comp_mask.to_num
|
|
136
|
+
#puts "ip_address checked = #{comp_ip.to_s(2)}"
|
|
137
|
+
ip_base_num = self.to_num
|
|
138
|
+
#puts "range_mask = #{ip_base_num.to_s(2)}"
|
|
139
|
+
ip_bits_num = self.to_mask
|
|
140
|
+
#puts "bit_mask = #{ip_bits_num.to_s(2)}"
|
|
141
|
+
# perform an AND operation to get rid of the bits in the mask that don't count
|
|
142
|
+
clean_mask = ip_base_num & ip_bits_num
|
|
143
|
+
#puts "cleaned range_mask = #{ip_base_num.to_s(2)}"
|
|
144
|
+
# the ip address belongs to the range, when an AND with the bitmask equals the cleaned mask
|
|
145
|
+
#puts "(ip_address&bits = #{(comp_ip & ip_bits_num).to_s(2)}"
|
|
146
|
+
(comp_ip & ip_bits_num) == clean_mask
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def are_all_in_range?(ip_mask)
|
|
150
|
+
#puts "check for #{ip_mask}"
|
|
151
|
+
return false if ip_mask.bits < self.bits
|
|
152
|
+
#
|
|
153
|
+
comp_ip = ip_mask.to_num
|
|
154
|
+
ip_base_num = self.to_num
|
|
155
|
+
ip_bits_num = self.to_mask
|
|
156
|
+
ip_clean = ip_base_num & ip_bits_num
|
|
157
|
+
#puts "comp = #{(comp_ip & ip_bits_num)} ip_clean = #{ip_clean} (ip_bits_num = #{ip_bits_num})"
|
|
158
|
+
(comp_ip & ip_bits_num) == ip_clean
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def ==(comp)
|
|
162
|
+
puts "comp = #{comp.class} #{comp.inspect}"
|
|
163
|
+
self.ip_mask == comp.ip_mask && self.bits == comp.bits
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
end
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
require 'aws'
|
|
2
|
-
|
|
3
|
-
module CfFactory
|
|
4
|
-
class TemplateValidation
|
|
5
|
-
def initialize(template_string, config_options)
|
|
6
|
-
@template_string = template_string
|
|
7
|
-
@config_options = config_options
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def validate
|
|
11
|
-
cf = AWS::CloudFormation.new(@config_options)
|
|
12
|
-
response = cf.validate_template(@template_string)
|
|
13
|
-
if response[:code] == "ValidationError"
|
|
14
|
-
puts "Validation failed: #{response[:message]}"
|
|
15
|
-
else
|
|
16
|
-
puts "Validation successful"
|
|
17
|
-
end
|
|
18
|
-
response
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def apply(parameters = {})
|
|
22
|
-
cf = AWS::CloudFormation.new(@config_options)
|
|
23
|
-
stack_name = "StackStartedFromEclipse#{Time.new.to_i}"
|
|
24
|
-
puts "going to start stack #{stack_name} with parameters #{parameters.inspect}"
|
|
25
|
-
stack = cf.stacks.create(stack_name, @template_string, :parameters => parameters, :capabilities => ["CAPABILITY_IAM"])
|
|
26
|
-
puts "started stack with parameters: #{stack.parameters}"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
end
|
|
1
|
+
require 'aws'
|
|
2
|
+
|
|
3
|
+
module CfFactory
|
|
4
|
+
class TemplateValidation
|
|
5
|
+
def initialize(template_string, config_options)
|
|
6
|
+
@template_string = template_string
|
|
7
|
+
@config_options = config_options
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def validate
|
|
11
|
+
cf = AWS::CloudFormation.new(@config_options)
|
|
12
|
+
response = cf.validate_template(@template_string)
|
|
13
|
+
if response[:code] == "ValidationError"
|
|
14
|
+
puts "Validation failed: #{response[:message]}"
|
|
15
|
+
else
|
|
16
|
+
puts "Validation successful"
|
|
17
|
+
end
|
|
18
|
+
response
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def apply(parameters = {})
|
|
22
|
+
cf = AWS::CloudFormation.new(@config_options)
|
|
23
|
+
stack_name = "StackStartedFromEclipse#{Time.new.to_i}"
|
|
24
|
+
puts "going to start stack #{stack_name} with parameters #{parameters.inspect}"
|
|
25
|
+
stack = cf.stacks.create(stack_name, @template_string, :parameters => parameters, :capabilities => ["CAPABILITY_IAM"])
|
|
26
|
+
puts "started stack with parameters: #{stack.parameters}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
require 'cf_factory/base/cf_base'
|
|
2
|
-
require 'cf_factory/base/cf_helper'
|
|
3
|
-
require 'cf_factory/iam/cf_iam_instance_profile'
|
|
4
|
-
|
|
5
|
-
module CfFactory
|
|
6
|
-
class CfIamAccessKey
|
|
7
|
-
include CfBase
|
|
8
|
-
|
|
9
|
-
def initialize(name, user_name, status, options = {})
|
|
10
|
-
@name = name
|
|
11
|
-
@status = status
|
|
12
|
-
@user_name = user_name
|
|
13
|
-
@serial = options[:serial]
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def get_cf_type
|
|
17
|
-
"AWS::IAM::AccessKey"
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def get_cf_attributes
|
|
21
|
-
{}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def get_cf_properties
|
|
25
|
-
result = {
|
|
26
|
-
"Status" => @status,
|
|
27
|
-
"UserName" => @user_name
|
|
28
|
-
}
|
|
29
|
-
result["Serial"] = @serial unless @serial.nil?
|
|
30
|
-
result
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
end
|
|
34
|
-
end
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
|
2
|
+
require 'cf_factory/base/cf_helper'
|
|
3
|
+
require 'cf_factory/iam/cf_iam_instance_profile'
|
|
4
|
+
|
|
5
|
+
module CfFactory
|
|
6
|
+
class CfIamAccessKey
|
|
7
|
+
include CfBase
|
|
8
|
+
|
|
9
|
+
def initialize(name, user_name, status, options = {})
|
|
10
|
+
@name = name
|
|
11
|
+
@status = status
|
|
12
|
+
@user_name = user_name
|
|
13
|
+
@serial = options[:serial]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def get_cf_type
|
|
17
|
+
"AWS::IAM::AccessKey"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def get_cf_attributes
|
|
21
|
+
{}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def get_cf_properties
|
|
25
|
+
result = {
|
|
26
|
+
"Status" => @status,
|
|
27
|
+
"UserName" => @user_name
|
|
28
|
+
}
|
|
29
|
+
result["Serial"] = @serial unless @serial.nil?
|
|
30
|
+
result
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
require 'cf_factory/base/cf_base'
|
|
2
|
-
require 'cf_factory/base/cf_helper'
|
|
3
|
-
require 'cf_factory/iam/cf_iam_instance_profile'
|
|
4
|
-
|
|
5
|
-
module CfFactory
|
|
6
|
-
class CfIamGroup
|
|
7
|
-
include CfBase
|
|
8
|
-
|
|
9
|
-
def initialize(name, path, options)
|
|
10
|
-
@name = name
|
|
11
|
-
@path = path
|
|
12
|
-
@policies = options[:policies]
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def get_cf_type
|
|
16
|
-
"AWS::IAM::Group"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def get_cf_attributes
|
|
20
|
-
{}
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def get_cf_properties
|
|
24
|
-
result = {
|
|
25
|
-
"Path" => @path
|
|
26
|
-
}
|
|
27
|
-
result["Policies"] = CfHelper.generate_inner_array(@policies) unless @policies.nil?
|
|
28
|
-
result
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
end
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
|
2
|
+
require 'cf_factory/base/cf_helper'
|
|
3
|
+
require 'cf_factory/iam/cf_iam_instance_profile'
|
|
4
|
+
|
|
5
|
+
module CfFactory
|
|
6
|
+
class CfIamGroup
|
|
7
|
+
include CfBase
|
|
8
|
+
|
|
9
|
+
def initialize(name, path, options)
|
|
10
|
+
@name = name
|
|
11
|
+
@path = path
|
|
12
|
+
@policies = options[:policies]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get_cf_type
|
|
16
|
+
"AWS::IAM::Group"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_cf_attributes
|
|
20
|
+
{}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def get_cf_properties
|
|
24
|
+
result = {
|
|
25
|
+
"Path" => @path
|
|
26
|
+
}
|
|
27
|
+
result["Policies"] = CfHelper.generate_inner_array(@policies) unless @policies.nil?
|
|
28
|
+
result
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
require 'cf_factory/base/cf_base'
|
|
2
|
-
require 'cf_factory/base/cf_helper'
|
|
3
|
-
require 'cf_factory/elb/cf_app_cookie_stickiness_policy'
|
|
4
|
-
|
|
5
|
-
module CfFactory
|
|
6
|
-
class CfIamInstanceProfile
|
|
7
|
-
include CfBase
|
|
8
|
-
|
|
9
|
-
def initialize(name, path, roles)
|
|
10
|
-
@name = name
|
|
11
|
-
@path = path
|
|
12
|
-
@roles = roles
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def get_cf_type
|
|
16
|
-
"AWS::IAM::InstanceProfile"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def get_cf_attributes
|
|
20
|
-
{}
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def get_cf_properties
|
|
24
|
-
result = {
|
|
25
|
-
"Path" => @path,
|
|
26
|
-
"Roles" => "["+@roles.collect() {|r| CfHelper.generate_ref(r)}.join(",")+"]"
|
|
27
|
-
}
|
|
28
|
-
result
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
end
|
|
1
|
+
require 'cf_factory/base/cf_base'
|
|
2
|
+
require 'cf_factory/base/cf_helper'
|
|
3
|
+
require 'cf_factory/elb/cf_app_cookie_stickiness_policy'
|
|
4
|
+
|
|
5
|
+
module CfFactory
|
|
6
|
+
class CfIamInstanceProfile
|
|
7
|
+
include CfBase
|
|
8
|
+
|
|
9
|
+
def initialize(name, path, roles)
|
|
10
|
+
@name = name
|
|
11
|
+
@path = path
|
|
12
|
+
@roles = roles
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get_cf_type
|
|
16
|
+
"AWS::IAM::InstanceProfile"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def get_cf_attributes
|
|
20
|
+
{}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def get_cf_properties
|
|
24
|
+
result = {
|
|
25
|
+
"Path" => @path,
|
|
26
|
+
"Roles" => "["+@roles.collect() {|r| CfHelper.generate_ref(r)}.join(",")+"]"
|
|
27
|
+
}
|
|
28
|
+
result
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
require 'cf_factory/base/cf_inner'
|
|
2
|
-
require 'cf_factory/iam/cf_policy_document'
|
|
3
|
-
|
|
4
|
-
module CfFactory
|
|
5
|
-
class CfIamPolicy
|
|
6
|
-
include CfInner
|
|
7
|
-
|
|
8
|
-
def initialize(policy_name, policy_doc)
|
|
9
|
-
@policy_name = policy_name
|
|
10
|
-
@policy_doc = policy_doc
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def get_cf_attributes
|
|
14
|
-
{"PolicyName" => @policy_name,
|
|
15
|
-
"PolicyDocument" => @policy_doc.generate
|
|
16
|
-
}
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
end
|
|
1
|
+
require 'cf_factory/base/cf_inner'
|
|
2
|
+
require 'cf_factory/iam/cf_policy_document'
|
|
3
|
+
|
|
4
|
+
module CfFactory
|
|
5
|
+
class CfIamPolicy
|
|
6
|
+
include CfInner
|
|
7
|
+
|
|
8
|
+
def initialize(policy_name, policy_doc)
|
|
9
|
+
@policy_name = policy_name
|
|
10
|
+
@policy_doc = policy_doc
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def get_cf_attributes
|
|
14
|
+
{"PolicyName" => @policy_name,
|
|
15
|
+
"PolicyDocument" => @policy_doc.generate
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|