zaws 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- zaws (0.0.3)
4
+ zaws (0.0.4)
5
5
  json (~> 1.5.0)
6
6
  mixlib-shellout (~> 1.1.0)
7
7
  netaddr (~> 1.5.0)
@@ -68,7 +68,7 @@ Feature: Compute
68
68
  ]
69
69
  }
70
70
  """
71
- And I double `aws --region us-west-1 ec2 run-instances --image-id ami-abc123 --key-name sshkey --instance-type x1-large --placement AvailabilityZone=us-west-1a --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"DeleteOnTermination":true,"SnapshotId":"snap-XXX","VolumeSize":70,"VolumeType":"standard"}}]' --enable-api-termination --client-token test_token --network-interfaces '[{"Groups":["sg-903004f8"],"PrivateIpAddress":"10.0.0.6","DeviceIndex":"0","SubnetId":"subnet-YYYYYY"}]' --ebs-optimized` with stdout:
71
+ And I double `aws --region us-west-1 ec2 run-instances --image-id ami-abc123 --key-name sshkey --instance-type x1-large --placement AvailabilityZone=us-west-1a --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"DeleteOnTermination":true,"SnapshotId":"snap-XXX","VolumeSize":70,"VolumeType":"standard"}}]' --enable-api-termination --client-token test_token --network-interfaces '[{"Groups":["sg-903004f8"],"PrivateIpAddress":"10.0.0.6","DeviceIndex":0,"SubnetId":"subnet-YYYYYY"}]' --ebs-optimized` with stdout:
72
72
  """
73
73
  { "Instances" : [ {"InstanceId": "i-XXXXXXX","Tags": [ ] } ] }
74
74
  """
@@ -85,7 +85,7 @@ Feature: Compute
85
85
  { "return":"true" }
86
86
  """
87
87
  Given an empty file named "undo.sh.1"
88
- When I run `bundle exec zaws compute declare my_instance ami-abc123 self x1-large 70 us-west-1a sshkey mysecuritygroup --privateip "10.0.0.6" --region us-west-1 --vpcid my_vpc_id --optimized --apiterminate --clienttoken test_token --undofile undo.sh.1 --skipruncheck`
88
+ When I run `bundle exec zaws compute declare my_instance ami-abc123 self x1-large 70 us-west-1a sshkey mysecuritygroup --privateip "10.0.0.6" --region us-west-1 --vpcid my_vpc_id --optimized --apiterminate --clienttoken test_token --undofile undo.sh.1 --skipruncheck --verbose`
89
89
  Then the output should contain "Instance created.\n"
90
90
  And the file "undo.sh.1" should contain "zaws compute delete my_instance --region us-west-1 --vpcid my_vpc_id $XTRA_OPTS"
91
91
 
@@ -0,0 +1,144 @@
1
+ Feature: Security Group
2
+ Security Group(s) are viewable
3
+
4
+ Scenario: Determine a vpc securiry group ingress cidr rule identified by cidr and target has NOT been created
5
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
6
+ """
7
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
8
+ """
9
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
10
+ """
11
+ { "SecurityGroups": [] }
12
+ """
13
+ When I run `bundle exec zaws security_group ingress_cidr_exists target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id`
14
+ Then the output should contain "false\n"
15
+
16
+ Scenario: Determine a vpc security group ingress cidr rule identified by cidr and target has been created
17
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
18
+ """
19
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
20
+ """
21
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
22
+ """
23
+ { "SecurityGroups": [ {
24
+ "GroupName": "target_group_name",
25
+ "GroupId": "X_target_group_name",
26
+ "IpPermissions": [ {
27
+ "ToPort": 443,
28
+ "IpProtocol": "tcp",
29
+ "IpRanges": [ { "CidrIp" : "0.0.0.0/0" } ],
30
+ "UserIdGroupPairs": [ ],
31
+ "FromPort": 443 } ] } ] }
32
+ """
33
+ When I run `bundle exec zaws security_group ingress_cidr_exists target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id`
34
+ Then the output should contain "true\n"
35
+
36
+ Scenario: Declare a new vpc security group ingress group rule identified by source and target. Create it cause it doesn't exist. Also, should append the command to remove the security group to file.
37
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
38
+ """
39
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
40
+ """
41
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
42
+ """
43
+ { "SecurityGroups": [] }
44
+ """
45
+ And I double `aws --region us-west-1 ec2 authorize-security-group-ingress --group-id X_target_group_name --cidr 0.0.0.0/0 --protocol tcp --port 443` with stdout:
46
+ """
47
+ { "return": "true" }
48
+ """
49
+ When I run `bundle exec zaws security_group declare_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id`
50
+ Then the output should contain "Ingress cidr rule created.\n"
51
+
52
+ Scenario: Declare a new vpc security group ingress group rule identified by source and target. Do not create it because it does exist.
53
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
54
+ """
55
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
56
+ """
57
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
58
+ """
59
+ { "SecurityGroups": [ {
60
+ "GroupName": "target_group_name",
61
+ "GroupId": "X_target_group_name",
62
+ "IpPermissions": [ {
63
+ "ToPort": 443,
64
+ "IpProtocol": "tcp",
65
+ "IpRanges": [ { "CidrIp" : "0.0.0.0/0" } ],
66
+ "UserIdGroupPairs": [ ],
67
+ "FromPort": 443 } ] } ] }
68
+ """
69
+ Given an empty file named "undo.sh.1"
70
+ When I run `bundle exec zaws security_group declare_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id --undofile undo.sh.1`
71
+ Then the output should contain "Ingress cidr rule not created. Exists already.\n"
72
+ And the file "undo.sh.1" should contain "zaws security_group delete_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id $XTRA_OPTS"
73
+
74
+ Scenario: Perform a nagios check, with the result indicatin OK (exit 0), indicating declaring a vpc security group ingress cidr requires no action because it exists.
75
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
76
+ """
77
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
78
+ """
79
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
80
+ """
81
+ { "SecurityGroups": [ {
82
+ "GroupName": "target_group_name",
83
+ "GroupId": "X_target_group_name",
84
+ "IpPermissions": [ {
85
+ "ToPort": 443,
86
+ "IpProtocol": "tcp",
87
+ "IpRanges": [ { "CidrIp" : "0.0.0.0/0" } ],
88
+ "UserIdGroupPairs": [ ],
89
+ "FromPort": 443 } ] } ] }
90
+ """
91
+ When I run `bundle exec zaws security_group declare_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id --nagios`
92
+ Then the output should contain "OK: Security group ingress cidr rule exists.\n"
93
+ And the exit status should be 0
94
+
95
+ Scenario: Perform a nagios check, with the result indicatin CRITICAL (exit 2), indicating declaring a security group ingress group requires action because it does not exist.
96
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
97
+ """
98
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
99
+ """
100
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
101
+ """
102
+ { "SecurityGroups": [] }
103
+ """
104
+ When I run `bundle exec zaws security_group declare_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id --nagios`
105
+ Then the output should contain "CRITICAL: Security group ingress cidr rule does not exist.\n"
106
+ And the exit status should be 2
107
+
108
+ Scenario: Delete a vpc security group ingress cidr rule, but skip it cause it does not exist
109
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
110
+ """
111
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
112
+ """
113
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
114
+ """
115
+ { "SecurityGroups": [] }
116
+ """
117
+ When I run `bundle exec zaws security_group delete_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id`
118
+ Then the output should contain "Security group ingress cidr rule does not exist. Skipping deletion.\n"
119
+
120
+ Scenario: Delete a vpc security group ingress cidr rule
121
+ Given I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=target_group_name'` with stdout:
122
+ """
123
+ { "SecurityGroups": [ { "GroupName": "target_group_name","GroupId": "X_target_group_name" } ] }
124
+ """
125
+ And I double `aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-id,Values=X_target_group_name' 'Name=ip-permission.cidr,Values=0.0.0.0/0' 'Name=ip-permission.protocol,Values=tcp' 'Name=ip-permission.to-port,Values=443'` with stdout:
126
+ """
127
+ { "SecurityGroups": [ {
128
+ "GroupName": "target_group_name",
129
+ "GroupId": "X_target_group_name",
130
+ "IpPermissions": [ {
131
+ "ToPort": 443,
132
+ "IpProtocol": "tcp",
133
+ "IpRanges": [ { "CidrIp" : "0.0.0.0/0" } ],
134
+ "UserIdGroupPairs": [ ],
135
+ "FromPort": 443 } ] } ] }
136
+ """
137
+ And I double `aws --region us-west-1 ec2 revoke-security-group-ingress --group-id X_target_group_name --cidr 0.0.0.0/0 --protocol tcp --port 443` with stdout:
138
+ """
139
+ { "return": "true" }
140
+ """
141
+ When I run `bundle exec zaws security_group delete_ingress_cidr target_group_name 0.0.0.0/0 tcp 443 --region us-west-1 --vpcid my_vpc_id`
142
+ Then the output should contain "Security group ingress cidr rule deleted.\n"
143
+
144
+
@@ -3,4 +3,4 @@ Feature: Version
3
3
 
4
4
  Scenario: Get zaws version
5
5
  When I run `bundle exec zaws version`
6
- Then the output should contain "zaws version 0.0.3"
6
+ Then the output should contain "zaws version 0.0.4"
@@ -2,7 +2,7 @@ require "zaws/version"
2
2
  require "zaws/helper/option"
3
3
  require "zaws/helper/output"
4
4
  require "zaws/helper/shell"
5
- require "zaws/helper/file"
5
+ require "zaws/helper/zfile"
6
6
  require "zaws/command/subnet"
7
7
  require "zaws/command/security_group"
8
8
  require "zaws/command/route_table"
@@ -31,7 +31,7 @@ module ZAWS
31
31
  return val
32
32
  end
33
33
 
34
- desc "declare EXTERNAL_ID IMAGE TYPE ROOT_SIZE ZONE KEY SECURITY_GROUP","Declare a compute instance."
34
+ desc "declare EXTERNAL_ID IMAGE OWNER TYPE ROOT_SIZE ZONE KEY SECURITY_GROUP","Declare a compute instance."
35
35
  option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
36
36
  option :privateip, :type => :array, :desc => "array of private ip addresses, in vpc, each given a network interface", :banner => "<privateip>", :aliases => :p, :default => nil
37
37
  option :optimized, :type => :string, :desc => "ebs optimized", :banner => "<optimized>", :aliases => :i, :default => false
@@ -68,7 +68,7 @@ module ZAWS
68
68
  aws.ec2.route_table.route_exists_by_gatewayid(options[:region],$stdout,(options[:verbose]?$stdout:nil),options[:vpcid],routetable,cidrblock,gatewayid)
69
69
  end
70
70
 
71
- desc "declare_route ROUTE_TABLE CIDR_BLOCK GATEWAY_ID","Declare a new route to GATEWAY_ID, but skip creating it if it exists."
71
+ desc "declare_route_to_gateway ROUTE_TABLE CIDR_BLOCK GATEWAY_ID","Declare a new route to GATEWAY_ID, but skip creating it if it exists."
72
72
  option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
73
73
  option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
74
74
  option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
@@ -45,6 +45,13 @@ module ZAWS
45
45
  aws.ec2.security_group.ingress_group_exists(options[:region],options[:vpcid],target,source,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
46
46
  end
47
47
 
48
+ desc "ingress_cidr_exists TARGET_GROUP_NAME CIDR PROTOCOL PORT","Determine if an ingress CIDR rule exists."
49
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
50
+ def ingress_cidr_exists(target,cidr,protocol,port)
51
+ aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
52
+ aws.ec2.security_group.ingress_cidr_exists(options[:region],options[:vpcid],target,cidr,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
53
+ end
54
+
48
55
  desc "declare_ingress_group TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT","Declare an ingress security group rule."
49
56
  option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
50
57
  option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
@@ -55,6 +62,16 @@ module ZAWS
55
62
  exit exitcode
56
63
  end
57
64
 
65
+ desc "declare_ingress_cidr TARGET_GROUP_NAME CIDR PROTOCOL PORT","Declare an ingress CIDR rule."
66
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
67
+ option :nagios, :type => :boolean, :desc => "Returns a nagios check result", :aliases => :n, :default => false
68
+ option :undofile, :type => :string, :desc => "File for undo commands", :banner => "<undofile>", :aliases => :f, :default => nil
69
+ def declare_ingress_cidr(target,cidr,protocol,port)
70
+ aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
71
+ exitcode = aws.ec2.security_group.declare_ingress_cidr(options[:region],options[:vpcid],target,cidr,protocol,port,options[:nagios],$stdout,(options[:verbose]?$stdout:nil),options[:undofile])
72
+ exit exitcode
73
+ end
74
+
58
75
  desc "delete_ingress_group TARGET_GROUP_NAME SOURCE_GROUP_NAME PROTOCOL PORT","Delete an ingress security group rule."
59
76
  option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
60
77
  def delete_ingress_group(target,source,protocol,port)
@@ -62,6 +79,13 @@ module ZAWS
62
79
  aws.ec2.security_group.delete_ingress_group(options[:region],options[:vpcid],target,source,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
63
80
  end
64
81
 
82
+ desc "delete_ingress_cidr TARGET_GROUP_NAME CIDR PROTOCOL PORT","Delete an ingress security cidr rule."
83
+ option :vpcid, :type => :string, :desc => "AWS VPC id", :banner => "<vpcid>", :aliases => :v, :default => nil
84
+ def delete_ingress_cidr(target,cidr,protocol,port)
85
+ aws=(ZAWS::AWS.new(ZAWS::Helper::Shell.new))
86
+ aws.ec2.security_group.delete_ingress_cidr(options[:region],options[:vpcid],target,cidr,protocol,port,$stdout,(options[:verbose]?$stdout:nil))
87
+ end
88
+
65
89
  end
66
90
  end
67
91
  end
@@ -27,7 +27,6 @@ module ZAWS
27
27
  comline="aws --output #{viewtype} --region #{region} ec2 describe-images"
28
28
  comline = "#{comline} --owner #{owner}" if owner
29
29
  comline = "#{comline} --image-ids #{imageid}" if imageid
30
- verbose.puts comline if verbose
31
30
  images=@shellout.cli(comline,verbose)
32
31
  textout.puts(images) if textout
33
32
  return images
@@ -52,7 +51,7 @@ module ZAWS
52
51
  ip_to_subnet_id = @aws.ec2.subnet.id_by_ip(region,nil,verbose,vpcid,ip)
53
52
  subnet_id=ip_to_subnet_id
54
53
  security_group_id= @aws.ec2.security_group.id_by_name(region,nil,verbose,vpcid,groupname)
55
- new_hash= [{ "Groups"=> [security_group_id], "PrivateIpAddress"=>"#{ip}","DeviceIndex"=>"0","SubnetId"=> ip_to_subnet_id }]
54
+ new_hash= [{ "Groups"=> [security_group_id], "PrivateIpAddress"=>"#{ip}","DeviceIndex"=>0,"SubnetId"=> ip_to_subnet_id }]
56
55
  return new_hash.to_json
57
56
  end
58
57
 
@@ -67,6 +66,7 @@ module ZAWS
67
66
  exit 1
68
67
  end
69
68
  x["Ebs"]["VolumeSize"]=rootsize.to_i
69
+ x["Ebs"].delete("Encrypted") if x["Ebs"]["SnapshotId"] #You cannot specify the encrypted flag if specifying a snapshot id in a block device mapping. -AWS
70
70
  end
71
71
  end
72
72
  return image_mappings.to_json
@@ -78,7 +78,7 @@ module ZAWS
78
78
 
79
79
  def declare(externalid,image,owner,nodetype,root,zone,key,sgroup,privateip,optimized,apiterminate,clienttoken,region,textout,verbose,vpcid,nagios,ufile,no_sdcheck,skip_running_check,volsize,volume)
80
80
  if ufile
81
- ZAWS::Helper::File.prepend("zaws compute delete #{externalid} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete instance',ufile)
81
+ ZAWS::Helper::ZFile.prepend("zaws compute delete #{externalid} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete instance',ufile)
82
82
  end
83
83
  compute_exists,instance_id,sgroups = exists(region,nil,verbose,vpcid,externalid)
84
84
  return ZAWS::Helper::Output.binary_nagios_check(compute_exists,"OK: Instance already exists.","CRITICAL: Instance does not exist.",textout) if nagios
@@ -214,7 +214,7 @@ module ZAWS
214
214
 
215
215
  def declare_secondary_ip(region,ip,textout,verbose,vpcid,externalid,nagios,ufile)
216
216
  if ufile
217
- ZAWS::Helper::File.prepend("zaws compute delete_secondary_ip #{externalid} #{ip} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete secondary ip',ufile)
217
+ ZAWS::Helper::ZFile.prepend("zaws compute delete_secondary_ip #{externalid} #{ip} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete secondary ip',ufile)
218
218
  end
219
219
  compute_exists,instance_id,sgroups = exists(region,nil,verbose,vpcid,externalid)
220
220
  secondary_ip_exists,compute_exists,network_interface = exists_secondary_ip(region,ip,nil,verbose,vpcid,externalid)
@@ -45,7 +45,7 @@ module ZAWS
45
45
 
46
46
  def declare(region,externalid,textout=nil,verbose=nil,vpcid=nil,nagios=nil,ufile=nil)
47
47
  if ufile
48
- ZAWS::Helper::File.prepend("zaws elasticip release #{externalid} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Release elastic ip.',ufile)
48
+ ZAWS::Helper::ZFile.prepend("zaws elasticip release #{externalid} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Release elastic ip.',ufile)
49
49
  end
50
50
  elasticip_exists,instance_id,association_id,allocation_id,ip=assoc_exists(region,externalid,nil,verbose,vpcid)
51
51
  return ZAWS::Helper::Output.binary_nagios_check(elasticip_exists,"OK: Elastic Ip exists.","CRITICAL: Elastic Ip DOES NOT EXIST.",textout) if nagios
@@ -33,7 +33,7 @@ module ZAWS
33
33
 
34
34
  def declare(region,vpcid,externalid,nagios,textout=nil,verbose=nil,ufile=nil)
35
35
  if ufile
36
- ZAWS::Helper::File.prepend("zaws route_table delete #{externalid} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route table',ufile)
36
+ ZAWS::Helper::ZFile.prepend("zaws route_table delete #{externalid} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route table',ufile)
37
37
  end
38
38
  rtable_exists, rtable_id = exists(region,nil,verbose,vpcid,externalid)
39
39
  return ZAWS::Helper::Output.binary_nagios_check(rtable_exists,"OK: Route table exists.","CRITICAL: Route table does not exist.",textout) if nagios
@@ -47,6 +47,7 @@ module ZAWS
47
47
  else
48
48
  textout.puts "Route table exists already. Skipping Creation."
49
49
  end
50
+ return 0
50
51
  end
51
52
 
52
53
  def delete(region,textout=nil,verbose=nil,vpcid,externalid)
@@ -73,7 +74,7 @@ module ZAWS
73
74
 
74
75
  def declare_route(region,textout=nil,verbose=nil,vpcid,routetable,cidrblock,externalid,nagios,ufile)
75
76
  if ufile
76
- ZAWS::Helper::File.prepend("zaws route_table delete_route #{routetable} #{cidrblock} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route',ufile)
77
+ ZAWS::Helper::ZFile.prepend("zaws route_table delete_route #{routetable} #{cidrblock} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route',ufile)
77
78
  end
78
79
  # TODO: Route exists already of a different type?
79
80
  route_exists, instance_id, rtable_id = route_exists_by_instance(region,nil,verbose,vpcid,routetable,cidrblock,externalid)
@@ -85,6 +86,7 @@ module ZAWS
85
86
  else
86
87
  textout.puts "Route not created to instance. Skip creation."
87
88
  end
89
+ return 0
88
90
  end
89
91
 
90
92
  def delete_route(region,textout=nil,verbose=nil,vpcid,routetable,cidrblock)
@@ -112,7 +114,7 @@ module ZAWS
112
114
 
113
115
  def declare_route_to_gateway(region,textout=nil,verbose=nil,vpcid,routetable,cidrblock,gatewayid,nagios,ufile)
114
116
  if ufile
115
- ZAWS::Helper::File.prepend("zaws route_table delete_route #{routetable} #{cidrblock} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route',ufile)
117
+ ZAWS::Helper::ZFile.prepend("zaws route_table delete_route #{routetable} #{cidrblock} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route',ufile)
116
118
  end
117
119
  # TODO: Route exists already of a different type?
118
120
  route_exists, rtable_id = route_exists_by_gatewayid(region,nil,verbose,vpcid,routetable,cidrblock,gatewayid)
@@ -124,6 +126,7 @@ module ZAWS
124
126
  else
125
127
  textout.puts "Route to gateway exists. Skipping creation."
126
128
  end
129
+ return 0
127
130
  end
128
131
 
129
132
  def subnet_assoc_exists(region,textout=nil,verbose=nil,vpcid,rtable_externalid,cidrblock)
@@ -138,7 +141,7 @@ module ZAWS
138
141
 
139
142
  def assoc_subnet(region,textout=nil,verbose=nil,vpcid,routetable,cidrblock,nagios,ufile)
140
143
  if ufile
141
- ZAWS::Helper::File.prepend("zaws route_table delete_assoc_subnet #{routetable} #{cidrblock} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route table association to subnet',ufile)
144
+ ZAWS::Helper::ZFile.prepend("zaws route_table delete_assoc_subnet #{routetable} #{cidrblock} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete route table association to subnet',ufile)
142
145
  end
143
146
  assoc_exists, subnetid, rtableid, rtassocid = subnet_assoc_exists(region,nil,verbose,vpcid,routetable,cidrblock)
144
147
  return ZAWS::Helper::Output.binary_nagios_check(assoc_exists,"OK: Route table association to subnet exists.","CRITICAL: Route table association to subnet does not exist.",textout) if nagios
@@ -149,6 +152,7 @@ module ZAWS
149
152
  else
150
153
  textout.puts "Route table already associated to subnet. Skipping association."
151
154
  end
155
+ return 0
152
156
  end
153
157
 
154
158
  def delete_assoc_subnet(region,textout=nil,verbose=nil,vpcid,rtable_externalid,cidrblock)
@@ -172,7 +176,7 @@ module ZAWS
172
176
 
173
177
  def declare_propagation_from_gateway(region,textout=nil,verbose=nil,vpcid,routetable,vgatewayid,nagios,ufile)
174
178
  if ufile
175
- ZAWS::Helper::File.prepend("zaws route_table delete_propagation_from_gateway my_route_table vgw-???????? --region us-west-1 --vpcid my_vpc_id $XTRA_OPTS",'#Delete route propagation',ufile)
179
+ ZAWS::Helper::ZFile.prepend("zaws route_table delete_propagation_from_gateway my_route_table vgw-???????? --region us-west-1 --vpcid my_vpc_id $XTRA_OPTS",'#Delete route propagation',ufile)
176
180
  end
177
181
  propagation_exists,rtableid = propagation_exists_from_gateway(region,nil,verbose,vpcid,routetable,vgatewayid)
178
182
  return ZAWS::Helper::Output.binary_nagios_check(propagation_exists,"OK: Route propagation from gateway enabled.","CRITICAL: Route propagation from gateway not enabled.",textout) if nagios
@@ -183,6 +187,7 @@ module ZAWS
183
187
  else
184
188
  textout.puts "Route propagation from gateway already enabled. Skipping propagation."
185
189
  end
190
+ return 0
186
191
  end
187
192
 
188
193
  def delete_propagation_from_gateway(region,textout=nil,verbose=nil,vpcid,rtable_externalid,vgatewayid)
@@ -11,7 +11,7 @@ module ZAWS
11
11
  @aws=aws
12
12
  end
13
13
 
14
- def view(region,view,textout=nil,verbose=nil,vpcid=nil,groupname=nil,groupid=nil,perm_groupid=nil,perm_protocol=nil,perm_toport=nil)
14
+ def view(region,view,textout=nil,verbose=nil,vpcid=nil,groupname=nil,groupid=nil,perm_groupid=nil,perm_protocol=nil,perm_toport=nil,cidr=nil)
15
15
  comline="aws --output #{view} --region #{region} ec2 describe-security-groups"
16
16
  if vpcid || groupname
17
17
  comline = comline + " --filter"
@@ -20,6 +20,7 @@ module ZAWS
20
20
  comline = comline + " 'Name=group-name,Values=#{groupname}'" if groupname
21
21
  comline = comline + " 'Name=group-id,Values=#{groupid}'" if groupid
22
22
  comline = comline + " 'Name=ip-permission.group-id,Values=#{perm_groupid}'" if perm_groupid
23
+ comline = comline + " 'Name=ip-permission.cidr,Values=#{cidr}'" if cidr
23
24
  comline = comline + " 'Name=ip-permission.protocol,Values=#{perm_protocol}'" if perm_protocol
24
25
  comline = comline + " 'Name=ip-permission.to-port,Values=#{perm_toport}'" if perm_toport
25
26
  sgroups=@shellout.cli(comline,verbose)
@@ -37,7 +38,7 @@ module ZAWS
37
38
 
38
39
  def declare(region,vpcid,groupname,description,nagios,textout=nil,verbose=nil,ufile=nil)
39
40
  if ufile
40
- ZAWS::Helper::File.prepend("zaws security_group delete #{groupname} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete security group',ufile)
41
+ ZAWS::Helper::ZFile.prepend("zaws security_group delete #{groupname} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete security group',ufile)
41
42
  end
42
43
  sgroup_exists,sgroupid = exists(region,nil,verbose,vpcid,groupname)
43
44
  return ZAWS::Helper::Output.binary_nagios_check(sgroup_exists,"OK: Security Group Exists.","CRITICAL: Security Group Does Not Exist.",textout) if nagios
@@ -48,6 +49,7 @@ module ZAWS
48
49
  else
49
50
  textout.puts "Security Group Exists Already. Skipping Creation."
50
51
  end
52
+ return 0
51
53
  end
52
54
 
53
55
  def id_by_name(region,textout=nil,verbose=nil,vpcid,groupname)
@@ -81,15 +83,23 @@ module ZAWS
81
83
  end
82
84
  end
83
85
 
86
+ def ingress_cidr_exists(region,vpcid,target,cidr,protocol,port,textout=nil,verbose=nil)
87
+ verbose=$stdout
88
+ targetid=id_by_name(region,nil,nil,vpcid,target)
89
+ if targetid
90
+ sgroups=JSON.parse(view(region,'json',nil,verbose,vpcid,nil,targetid,nil,protocol,port,cidr))
91
+ val = (sgroups["SecurityGroups"].count > 0)
92
+ textout.puts val.to_s if textout
93
+ return val, targetid
94
+ end
95
+ end
96
+
84
97
  def declare_ingress_group(region,vpcid,target,source,protocol,port,nagios,textout=nil,verbose=nil,ufile=nil)
85
98
  if ufile
86
- ZAWS::Helper::File.prepend("zaws security_group delete_ingress_group #{target} #{source} #{protocol} #{port} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete security group ingress group rule',ufile)
99
+ ZAWS::Helper::ZFile.prepend("zaws security_group delete_ingress_group #{target} #{source} #{protocol} #{port} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete security group ingress group rule',ufile)
87
100
  end
88
-
89
101
  ingress_exists,targetid,sourceid = ingress_group_exists(region,vpcid,target,source,protocol,port,nil,verbose)
90
-
91
102
  return ZAWS::Helper::Output.binary_nagios_check(ingress_exists,"OK: Security group ingress group rule exists.","CRITICAL: Security group ingress group rule does not exist.",textout) if nagios
92
-
93
103
  if not ingress_exists
94
104
  comline="aws --region #{region} ec2 authorize-security-group-ingress --group-id #{targetid} --source-security-group-owner-id #{sourceid} --protocol #{protocol} --port #{port}"
95
105
  ingressrule=JSON.parse(@shellout.cli(comline,verbose))
@@ -97,6 +107,23 @@ module ZAWS
97
107
  else
98
108
  textout.puts "Ingress group rule not created. Exists already."
99
109
  end
110
+ return 0
111
+ end
112
+
113
+ def declare_ingress_cidr(region,vpcid,target,cidr,protocol,port,nagios,textout=nil,verbose=nil,ufile=nil)
114
+ if ufile
115
+ ZAWS::Helper::ZFile.prepend("zaws security_group delete_ingress_cidr #{target} #{cidr} #{protocol} #{port} --region #{region} --vpcid #{vpcid} $XTRA_OPTS",'#Delete cidr ingress group rule',ufile)
116
+ end
117
+ ingress_exists,targetid = ingress_cidr_exists(region,vpcid,target,cidr,protocol,port,nil,verbose)
118
+ return ZAWS::Helper::Output.binary_nagios_check(ingress_exists,"OK: Security group ingress cidr rule exists.","CRITICAL: Security group ingress cidr rule does not exist.",textout) if nagios
119
+ if not ingress_exists
120
+ comline="aws --region #{region} ec2 authorize-security-group-ingress --group-id #{targetid} --cidr #{cidr} --protocol #{protocol} --port #{port}"
121
+ ingressrule=JSON.parse(@shellout.cli(comline,verbose))
122
+ textout.puts "Ingress cidr rule created." if ingressrule["return"] == "true"
123
+ else
124
+ textout.puts "Ingress cidr rule not created. Exists already."
125
+ end
126
+ return 0
100
127
  end
101
128
 
102
129
  def delete_ingress_group(region,vpcid,target,source,protocol,port,textout=nil,verbose=nil)
@@ -110,6 +137,17 @@ module ZAWS
110
137
  end
111
138
  end
112
139
 
140
+ def delete_ingress_cidr(region,vpcid,target,cidr,protocol,port,textout=nil,verbose=nil)
141
+ ingress_exists,targetid = ingress_cidr_exists(region,vpcid,target,cidr,protocol,port,nil,verbose)
142
+ if ingress_exists
143
+ comline="aws --region #{region} ec2 revoke-security-group-ingress --group-id #{targetid} --cidr #{cidr} --protocol #{protocol} --port #{port}"
144
+ val=JSON.parse(@shellout.cli(comline,verbose))
145
+ textout.puts "Security group ingress cidr rule deleted." if val["return"] == "true"
146
+ else
147
+ textout.puts "Security group ingress cidr rule does not exist. Skipping deletion."
148
+ end
149
+ end
150
+
113
151
  end
114
152
  end
115
153
  end
@@ -50,7 +50,7 @@ module ZAWS
50
50
 
51
51
  def declare(region,vpcid,cidrblock,availabilityzone,statetimeout,textout=nil,verbose=nil,nagios=false,ufile=nil)
52
52
  if ufile
53
- ZAWS::Helper::File.prepend("zaws subnet delete #{cidrblock} #{vpcid} --region #{region} $XTRA_OPTS",'#Delete subnet',ufile)
53
+ ZAWS::Helper::ZFile.prepend("zaws subnet delete #{cidrblock} #{vpcid} --region #{region} $XTRA_OPTS",'#Delete subnet',ufile)
54
54
  end
55
55
  if not exists(region,nil,verbose,vpcid,cidrblock)
56
56
  if nagios
@@ -41,7 +41,7 @@ module ZAWS
41
41
 
42
42
  def create_in_subnet(region,lbname,lbprotocol,lbport,inprotocol,inport,securitygroup,cidrblocks,vpcid,nagios=false,textout=nil,verbose=nil,ufile=nil)
43
43
  if ufile
44
- ZAWS::Helper::File.prepend("zaws load_balancer delete #{lbname} --region #{region} $XTRA_OPTS",'#Delete load balancer',ufile)
44
+ ZAWS::Helper::ZFile.prepend("zaws load_balancer delete #{lbname} --region #{region} $XTRA_OPTS",'#Delete load balancer',ufile)
45
45
  end
46
46
  lbexists,instances,ldescriptions=exists(region,lbname,nil,verbose)
47
47
  return ZAWS::Helper::Output.binary_nagios_check(lbexists,"OK: Load Balancer Exists.","CRITICAL: Load Balancer does not exist.",textout) if nagios
@@ -81,7 +81,7 @@ module ZAWS
81
81
 
82
82
  def register_instance(region,lbname,instance_external_id,vpcid,nagios=false,textout=nil,verbose=nil,ufile=nil)
83
83
  if ufile
84
- ZAWS::Helper::File.prepend("zaws load_balancer deregister_instance #{lbname} #{instance_external_id} --region #{region} --vpcid my_vpc_id $XTRA_OPTS",'#Deregister instance',ufile)
84
+ ZAWS::Helper::ZFile.prepend("zaws load_balancer deregister_instance #{lbname} #{instance_external_id} --region #{region} --vpcid my_vpc_id $XTRA_OPTS",'#Deregister instance',ufile)
85
85
  end
86
86
  instance_registered,instance_id = exists_instance(region,lbname,instance_external_id,vpcid,nil,verbose)
87
87
  return ZAWS::Helper::Output.binary_nagios_check(instance_registered,"OK: Instance registerd.","CRITICAL: Instance not registered.",textout) if nagios
@@ -121,7 +121,7 @@ module ZAWS
121
121
 
122
122
  def declare_listener(region,lbname,lbprotocol,lbport,inprotocol,inport,nagios=false,textout=nil,verbose=nil,ufile=nil)
123
123
  if ufile
124
- ZAWS::Helper::File.prepend("zaws load_balancer delete_listener #{lbname} #{lbprotocol} #{lbport} #{inprotocol} #{inport} --region #{region} $XTRA_OPTS",'#Delete listener',ufile)
124
+ ZAWS::Helper::ZFile.prepend("zaws load_balancer delete_listener #{lbname} #{lbprotocol} #{lbport} #{inprotocol} #{inport} --region #{region} $XTRA_OPTS",'#Delete listener',ufile)
125
125
  end
126
126
  lexists=exists_listener(region,lbname,lbprotocol,lbport,inprotocol,inport,nil,verbose)
127
127
  return ZAWS::Helper::Output.binary_nagios_check(lexists,"OK: Listerner exists.","CRITICAL: Listener does not exist.",textout) if nagios
@@ -1,20 +1,20 @@
1
1
  module ZAWS
2
2
  module Helper
3
- class File
3
+ class ZFile
4
4
 
5
5
  # This prepend function not currently unit tested,
6
6
  # see "thor/spec/actions/file_manipulation_spec"
7
7
  # for ideas on how to accomplish this.
8
8
  def self.prepend(command,description,filepath)
9
9
  new_file=filepath + ".new"
10
- IO::File.open(new_file, 'w') do |fo|
10
+ File.open(new_file, 'w') do |fo|
11
11
  fo.puts description
12
12
  fo.puts command
13
- IO::File.foreach(filepath) do |li|
13
+ File.foreach(filepath) do |li|
14
14
  fo.puts li
15
15
  end
16
16
  end
17
- IO::File.rename(new_file, filepath)
17
+ File.rename(new_file, filepath)
18
18
  end
19
19
 
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module ZAWS
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -47,7 +47,7 @@ describe ZAWS::EC2Services::Compute do
47
47
  expect(shellout).to receive(:cli).with("aws --output json --region us-west-1 ec2 describe-security-groups --filter 'Name=vpc-id,Values=my_vpc_id' 'Name=group-name,Values=my_security_group_name'",nil).and_return(sgroups)
48
48
  aws=ZAWS::AWS.new(shellout)
49
49
  bdm = aws.ec2.compute.network_interface_json('us-west-1',nil,'my_vpc_id','10.0.0.6','my_security_group_name')
50
- expect(bdm).to eq('[{"Groups":["sg-903004f8"],"PrivateIpAddress":"10.0.0.6","DeviceIndex":"0","SubnetId":"subnet-YYYYYY"}]')
50
+ expect(bdm).to eq('[{"Groups":["sg-903004f8"],"PrivateIpAddress":"10.0.0.6","DeviceIndex":0,"SubnetId":"subnet-YYYYYY"}]')
51
51
 
52
52
  end
53
53
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zaws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-22 00:00:00.000000000 Z
12
+ date: 2014-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -226,7 +226,8 @@ files:
226
226
  - feature/route_table/route_to_gateway.feature
227
227
  - feature/route_table/route_to_instance.feature
228
228
  - feature/route_table/view.feature
229
- - feature/security_group/ingress.feature
229
+ - feature/security_group/ingress_cidr.feature
230
+ - feature/security_group/ingress_group.feature
230
231
  - feature/security_group/security_group.feature
231
232
  - feature/security_group/view.feature
232
233
  - feature/subnet/subnet.feature
@@ -250,10 +251,10 @@ files:
250
251
  - lib/zaws/ec2/subnet.rb
251
252
  - lib/zaws/elb.rb
252
253
  - lib/zaws/elb/load_balancer.rb
253
- - lib/zaws/helper/file.rb
254
254
  - lib/zaws/helper/option.rb
255
255
  - lib/zaws/helper/output.rb
256
256
  - lib/zaws/helper/shell.rb
257
+ - lib/zaws/helper/zfile.rb
257
258
  - lib/zaws/route53.rb
258
259
  - lib/zaws/route53/hosted_zone.rb
259
260
  - lib/zaws/version.rb
@@ -302,7 +303,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
302
303
  version: '0'
303
304
  segments:
304
305
  - 0
305
- hash: 2757590543026909209
306
+ hash: -2074333485879354907
306
307
  required_rubygems_version: !ruby/object:Gem::Requirement
307
308
  none: false
308
309
  requirements:
@@ -311,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
311
312
  version: '0'
312
313
  segments:
313
314
  - 0
314
- hash: 2757590543026909209
315
+ hash: -2074333485879354907
315
316
  requirements: []
316
317
  rubyforge_project:
317
318
  rubygems_version: 1.8.24