class RedisCfPlugin::Plugin
Public Instance Methods
bind_redis_env_var()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 99 def bind_redis_env_var load_bosh_and_validate_current_deployment env_var = input[:env_var] app = input[:app] invoke :set_env, app: app, name: env_var, value: service_uri, restart: true end
create_redis()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 45 def create_redis require "cli" # bosh_cli's director client library service_name = input[:name] || "redis-#{Time.now.to_i}" resource_size = input[:size] security_group = input[:security_group] bosh_uuid = bosh_director_client.get_status["uuid"] bosh_cpi = bosh_director_client.get_status["cpi"] template_file = File.join(bosh_release_dir, "templates", bosh_cpi, "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" sh "mkdir -p deployments/redis" line "Creating deployment file #{deployment_file}..." 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 } } }.to_yaml end sh "bosh deployment #{deployment_file}" sh "bosh -n diff #{template_file}" sh "bosh -n deploy" end
delete_redis()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 108 def delete_redis load_bosh_and_validate_current_deployment sh "bosh delete deployment #{deployment_name}" end
prepare_redis()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 13 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
show_redis_uri()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 90 def show_redis_uri load_bosh_and_validate_current_deployment print service_uri end
Protected Instance Methods
bosh_director_client()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 126 def bosh_director_client @bosh_director_client ||= begin command = ::Bosh::Cli::Command::Deployment.new command.send(:auth_required) command.director end end
bosh_release_dir()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 118 def bosh_release_dir File.expand_path("../../../bosh_release", __FILE__) end
deployment_file()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 134 def deployment_file @current_deployment_file ||= ::Bosh::Cli::Command::Deployment.new.deployment end
deployment_name()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 149 def deployment_name @deployment["name"] end
load_bosh_and_validate_current_deployment()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 138 def load_bosh_and_validate_current_deployment require "cli" # bosh_cli's director client library unless File.exists?(deployment_file) fail "Target deployment file no longer exists: #{deployment_file}" end @deployment = YAML.load_file(deployment_file) unless @deployment["release"] && @deployment["release"]["name"] == release_name fail "Target deployment file is not for redis service: #{deployment_file}" end end
release_name()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 114 def release_name "redis" end
server_host()
click to toggle source
returns the first DNS entry for the running instance
# File lib/redis-cf-plugin/plugin.rb, line 161 def server_host @server_host ||= begin vms = bosh_director_client.fetch_vm_state(deployment_name, use_cache: false) if vms.empty? fail "Deployment has no running instances" end if vms.size > 1 warn "Deployment has more than 1 running instance (#{vms.size}); using first instance" end vm = vms.first vm["dns"].first end end
service_uri()
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 153 def service_uri password = @deployment["properties"]["redis"]["password"] port = @deployment["properties"]["redis"]["port"] db = 0 "redis://:#{password}@#{server_host}:#{port}/#{db}" end
within_bosh_release(&block)
click to toggle source
# File lib/redis-cf-plugin/plugin.rb, line 122 def within_bosh_release(&block) chdir(bosh_release_dir, &block) end