class Bosh::Cli::Command::Redis
Public Instance Methods
create_redis()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 58 def create_redis auth_required service_name = options[:name] || default_name resource_size = options[:size] || default_size persistent_disk = options[:disk] || default_persistent_disk security_group = options[:security_group] || default_security_group redis_port = 6379 bosh_status # preload nl say "CPI: #{bosh_cpi.make_green}" say "Deployment name: #{service_name.make_green}" say "Resource size: #{validated_resource_size_colored(resource_size)}" say "Persistent disk: #{persistent_disk.to_s.make_green}" say "Security group: #{security_group.make_green}" nl step("Validating resource size", "Resource size must be in #{available_resource_sizes.join(', ')}", :non_fatal) do available_resource_sizes.include?(resource_size) end unless confirmed?("Security group exists with ports 22 & #{redis_port}") cancel_deployment end unless confirmed?("Creating redis service") cancel_deployment end raise Bosh::Cli::ValidationHalted unless errors.empty? template_file = template_file("single_vm.yml.erb") # Create an initial deployment file; upon which the CPI-specific template will be applied below # Initial file will look like: # --- # name: NAME # director_uuid: UUID # networks: {} # properties: # redis: # resource: medium # security_group: redis-server deployment_file = "deployments/redis/#{service_name}.yml" step("Checking/creating #{redis_deployments_store_path} for deployment files", "Failed to create #{redis_deployments_store_path} for deployment files", :fatal) do mkdir_p(redis_deployments_store_path) end step("Creating deployment file #{deployment_file}", "Failed to create deployment file #{deployment_file}", :fatal) do File.open(deployment_file, "w") do |file| file << { "name" => service_name, "director_uuid" => bosh_uuid, "networks" => {}, "properties" => { "redis" => { "resource" => resource_size, "security_group" => security_group, "persistent_disk" => persistent_disk } } }.to_yaml end stdout = Bosh::Cli::Config.output Bosh::Cli::Config.output = nil deployment_cmd(non_interactive: true).set_current(deployment_file) biff_cmd(non_interactive: true).biff(template_file) Bosh::Cli::Config.output = stdout end # re-set current deployment to show output deployment_cmd.set_current(deployment_file) deployment_cmd(non_interactive: options[:non_interactive]).perform rescue Bosh::Cli::ValidationHalted errors.each do |error| say error.make_red end end
delete_redis()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 148 def delete_redis load_bosh_and_validate_current_deployment deployment_cmd(non_interactive: options[:non_interactive]).delete(deployment_name) end
prepare_redis()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 25 def prepare_redis within_bosh_release do # the releases/index.yml contains all the available release versions in an unordered # hash of hashes in YAML format: # --- # builds: # af61f03c5ad6327e0795402f1c458f2fc6f21201: # version: 3 # 39c029d0af9effc6913f3333434b894ff6433638: # version: 1 # 5f5d0a7fb577fec3c09408c94f7abbe2d52a042c: # version: 4 # f044d47e0183f084db9dac5a6ef00d7bd21c8451: # version: 2 release_index = YAML.load_file("releases/index.yml") latest_version = release_index["builds"].values.inject(0) do |max_version, release| version = release["version"] max_version < version ? version : max_version end sh "bosh upload release releases/*-#{latest_version}.yml" end end
redis_help()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 14 def redis_help say("bosh redis sub-commands:") nl cmds = Bosh::Cli::Config.commands.values.find_all {|c| c.usage =~ /redis/ } Bosh::Cli::Command::Help.list_commands(cmds) end
show_redis_uri()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 141 def show_redis_uri load_bosh_and_validate_current_deployment print service_uri end
Protected Instance Methods
available_resource_sizes()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 200 def available_resource_sizes resources = bosh_release_spec["resources"] if resources && resources.is_a?(Array) && resources.first.is_a?(String) resources else err "template spec needs 'resources' key with list of resource pool names available" end end
biff_cmd(options = {})
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 246 def biff_cmd(options = {}) cmd = Bosh::Cli::Command::Biff.new options.each do |key, value| cmd.add_option key.to_sym, value end cmd end
bosh_cpi()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 229 def bosh_cpi bosh_status["cpi"] end
bosh_director_client()
click to toggle source
TODO this is now a bosh cli command itself; use director
# File lib/bosh/cli/commands/redis.rb, line 234 def bosh_director_client director end
bosh_release_dir()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 179 def bosh_release_dir File.expand_path("../../../../../bosh_release", __FILE__) end
bosh_release_spec()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 191 def bosh_release_spec @bosh_release_spec ||= begin unless File.exists?(template_file("spec")) err "Bosh release templates missing 'spec'" end YAML.load_file(template_file("spec")) end end
bosh_status()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 216 def bosh_status @bosh_status ||= begin step("Fetching bosh information", "Cannot fetch bosh information", :fatal) do @bosh_status = bosh_director_client.get_status end @bosh_status end end
bosh_uuid()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 225 def bosh_uuid bosh_status["uuid"] end
default_name()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 155 def default_name "redis-#{Time.now.to_i}" end
default_persistent_disk()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 163 def default_persistent_disk 4096 end
default_security_group()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 167 def default_security_group "default" end
default_size()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 159 def default_size "small" end
deployment_cmd(options = {})
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 238 def deployment_cmd(options = {}) cmd = Bosh::Cli::Command::Deployment.new options.each do |key, value| cmd.add_option key.to_sym, value end cmd end
deployment_file()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 254 def deployment_file deployment end
deployment_name()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 270 def deployment_name @deployment["name"] end
load_bosh_and_validate_current_deployment()
click to toggle source
TODO use bosh cli helpers to validate/require this
# File lib/bosh/cli/commands/redis.rb, line 259 def load_bosh_and_validate_current_deployment auth_required unless File.exists?(deployment_file) err "Target deployment file no longer exists: #{deployment_file}" end @deployment = YAML.load_file(deployment_file) unless @deployment["release"] && @deployment["release"]["name"] == release_name err "Target deployment file is not for redis service: #{deployment_file}" end end
redis_deployments_store_path()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 175 def redis_deployments_store_path "deployments/redis" end
release_name()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 171 def release_name "redis" end
server_host()
click to toggle source
returns the first DNS entry for the running instance
# File lib/bosh/cli/commands/redis.rb, line 282 def server_host @server_host ||= begin vms = bosh_director_client.fetch_vm_state(deployment_name, use_cache: false) if vms.empty? err "Deployment has no running instances" end if vms.size > 1 say "#{"WARNING!".make_red} Deployment has more than 1 running instance (#{vms.size}); using first instance" end vm = vms.first # bug in bosh dns means old dns entries might still point to this new VM vm["dns"].select { |dns| dns =~ %r{#{deployment_name}} }.first end end
service_uri()
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 274 def service_uri password = @deployment["properties"]["redis"]["password"] port = @deployment["properties"]["redis"]["port"] db = 0 "redis://:#{password}@#{server_host}:#{port}/#{db}" end
template_file(file)
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 187 def template_file(file) File.join(bosh_release_dir, "templates", bosh_cpi, file) end
validated_resource_size_colored(resource_size)
click to toggle source
If resource_size is within available_resource_sizes
then display it in green; else display it in red.
# File lib/bosh/cli/commands/redis.rb, line 211 def validated_resource_size_colored(resource_size) available_resource_sizes.include?(resource_size) ? resource_size.make_green : resource_size.make_red end
within_bosh_release(&block)
click to toggle source
# File lib/bosh/cli/commands/redis.rb, line 183 def within_bosh_release(&block) chdir(bosh_release_dir, &block) end