class ZestKnife
Constants
- OPTS
- VALIDATORS
Attributes
validated_opts[RW]
base_domain[RW]
internal_domain[RW]
Public Class Methods
AWS_REGIONS()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 19 def self.AWS_REGIONS [] end
aws_for_region(region)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 15 def self.aws_for_region(region) Zest::AWS.new(Chef::Config[:knife][:aws_access_key_id], Chef::Config[:knife][:aws_secret_access_key], region) end
in_all_aws_regions() { |aws_for_region| ... }
click to toggle source
# File lib/knife-instance/zestknife.rb, line 23 def self.in_all_aws_regions self.AWS_REGIONS.each do |region| yield self.aws_for_region(region) end end
validates(*args)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 153 def self.validates(*args) raise "Invalid argument(s) passed to validates: #{args - VALIDATORS.keys}" unless (args - VALIDATORS.keys).empty? self.validated_opts ||= [] self.validated_opts.concat args end
with_opts(*args)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 137 def self.with_opts(*args) invalid_args = args.select {|arg| !OPTS.keys.include? arg } raise "Invalid option(s) passed to with_opts: #{invalid_args.join(", ")}" unless invalid_args.empty? args.each do |arg| option arg, OPTS[arg] end end
with_validated_opts(*args)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 148 def self.with_validated_opts(*args) with_opts(*args) validates(*args) end
Public Instance Methods
check_services(hostname)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 114 def check_services hostname find_item(Chef::Node, hostname) + find_item(Chef::ApiClient, hostname) + find_ec2(hostname) + find_r53(hostname) end
domain()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 88 def domain @internal_domain || "" end
domain_prefix()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 125 def domain_prefix base_domain[0] end
environment_prefix(env)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 129 def environment_prefix env env[0] end
errors()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 165 def errors @errors ||= [] end
errors?()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 169 def errors? !errors.empty? end
find_ec2(name)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 38 def find_ec2(name) nodes = {} self.class.in_all_aws_regions do |zest_aws| nodes = nodes.merge(zest_aws.compute.servers.group_by { |s| s.tags["Name"] }) end nodes[name].nil? ? [] : nodes[name] end
find_item(klass, name)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 29 def find_item(klass, name) begin object = klass.load(name) return [object] rescue Net::HTTPServerException return [] end end
find_r53(name)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 46 def find_r53 name in_zone = zone_from_name(name) if in_zone.nil? in_zone = zone name = fqdn(name) end name = "#{name}." unless name[-1] == "." recs = in_zone.records.select {|r| r.name == name }.to_a recs.empty? ? [in_zone.records.get(name)].compact : recs end
fqdn(name)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 83 def fqdn(name) return '' if name.nil? || name.empty? "#{name}.#{domain}" end
generate_hostname(env)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 92 def generate_hostname env name = nil 5.times do |i| name = random_hostname env break if check_services(name).empty? name = nil srand # re-seed rand so we don't get stuck in a sequence end errors << "Unable to find available hostname in 5 tries" if name.nil? name end
msg_pair(label, value, color=:cyan)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 9 def msg_pair(label, value, color=:cyan) if value && !value.to_s.empty? puts "#{ui.color(label, color)}: #{value}" end end
random_hostname(env)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 121 def random_hostname env "#{domain_prefix}#{environment_prefix env}#{random_three_digit_number}" end
random_three_digit_number()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 133 def random_three_digit_number sprintf("%03d", rand(1000)) end
setup_config(keys=[:aws_access_key_id, :aws_secret_access_key])
click to toggle source
# File lib/knife-instance/zestknife.rb, line 159 def setup_config(keys=[:aws_access_key_id, :aws_secret_access_key]) keys.each do |k| Chef::Config[:knife][k] = ENV[k.to_s] if Chef::Config[:knife][k].nil? && ENV[k.to_s] end end
validate!(keys=[:aws_access_key_id, :aws_secret_access_key])
click to toggle source
# File lib/knife-instance/zestknife.rb, line 173 def validate!(keys=[:aws_access_key_id, :aws_secret_access_key]) keys.each do |k| if Chef::Config[:knife][k].nil? & config[k].nil? errors << "You did not provide a valid '#{k}' value." end end self.class.validated_opts.each do |opt| send VALIDATORS[opt] end if self.class.validated_opts if errors.each { |e| ui.error(e) }.any? exit 1 end end
validate_color()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 201 def validate_color unless @color errors << "You must provide a cluster_tag with the -t option" end end
validate_domain()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 192 def validate_domain end
validate_env()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 189 def validate_env end
validate_force_deploy()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 198 def validate_force_deploy end
validate_hostname(hostname)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 107 def validate_hostname hostname errors << "hostname can't be blank" and return if (hostname.nil? || hostname.empty?) check_services(hostname).each do |service| errors << "#{hostname} in #{service.class} already exists. Delete first." end end
validate_prod()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 207 def validate_prod end
validate_region()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 195 def validate_region end
zone()
click to toggle source
# File lib/knife-instance/zestknife.rb, line 57 def zone unless @zone self.class.in_all_aws_regions do |zest_aws| @zone ||= zest_aws.dns.zones.detect { |z| z.domain.downcase == domain } end raise "Could not find DNS zone" unless @zone end @zone end
zone_from_name(dns_name)
click to toggle source
# File lib/knife-instance/zestknife.rb, line 68 def zone_from_name dns_name name, tld = dns_name.split(".")[-2..-1] if name && tld dns_domain = "#{name}.#{tld}" zone = nil self.class.in_all_aws_regions do |zest_aws| zone1 = zest_aws.dns.zones.select {|x| x.domain =~ /^#{dns_domain}/ }.first zone = zone1 if zone1 end zone end end