github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/integration/assets/service_broker/setup_new_broker.rb (about) 1 #!/usr/bin/env ruby 2 3 require 'json' 4 require 'pp' 5 require 'securerandom' 6 7 broker_name = ARGV[0] 8 broker_name ||= 'async-broker' 9 10 env = ARGV[1] 11 env ||= 'bosh-lite' 12 13 puts "Setting up broker `#{broker_name}` on #{env}" 14 15 env_to_domain_mapping = { 16 'bosh-lite' => 'bosh-lite.com', 17 'a1' => 'a1-app.cf-app.com', 18 'tabasco' => 'tabasco-app.cf-app.com' 19 } 20 21 $service_name = nil 22 23 def uniquify_config 24 puts 'Creating a unique configuration for broker' 25 26 raw_config = File.read('data.json') 27 config = JSON.parse(raw_config) 28 catalog = config['behaviors']['catalog']['body'] 29 30 plan_mapping = {} 31 catalog['services'] = catalog['services'].map do |service| 32 $service_name = service['name'] = "fake-service-#{SecureRandom.uuid}" 33 service['id'] = SecureRandom.uuid 34 35 service['dashboard_client']['id'] = SecureRandom.uuid 36 service['dashboard_client']['secret'] = SecureRandom.uuid 37 38 service['plans'] = service['plans'].map do |plan| 39 original_id = plan['id'] 40 plan['id'] = SecureRandom.uuid 41 plan_mapping[original_id] = plan['id'] 42 plan 43 end 44 service 45 end 46 47 config['behaviors'].each do |action, behavior| 48 next if action == 'catalog' 49 50 behavior.keys.each do |plan_id| 51 next if plan_id == 'default' 52 53 response = behavior[plan_id] 54 new_plan_id = plan_mapping[plan_id] 55 behavior[new_plan_id] = response 56 behavior.delete(plan_id) 57 end 58 end 59 60 File.open('data.json', 'w') do |file| 61 file.write(JSON.pretty_generate(config)) 62 end 63 end 64 65 def push_broker(broker_name) 66 puts "Pushing the broker" 67 IO.popen("cf push #{broker_name}") do |cmd_output| 68 cmd_output.each { |line| puts line } 69 end 70 puts 71 puts 72 end 73 74 def create_service_broker(broker_name, url) 75 output = [] 76 IO.popen("cf create-service-broker #{broker_name} user password #{url}") do |cmd| 77 cmd.each do |line| 78 puts line 79 output << line 80 end 81 end 82 output 83 end 84 85 def broker_already_exists?(output) 86 output.any? { |line| line =~ /service broker url is taken/ } 87 end 88 89 def update_service_broker(broker_name, url) 90 puts 91 puts "Broker already exists. Updating" 92 IO.popen("cf update-service-broker #{broker_name} user password #{url}") do |cmd| 93 cmd.each { |line| puts line } 94 end 95 puts 96 end 97 98 def enable_service_access 99 IO.popen("cf enable-service-access #{$service_name}") do |cmd| 100 cmd.each { |line| puts line } 101 end 102 end 103 104 uniquify_config 105 push_broker(broker_name) 106 107 url = "http://#{broker_name}.#{env_to_domain_mapping[env]}" 108 109 output = create_service_broker(broker_name, url) 110 if broker_already_exists?(output) 111 update_service_broker(broker_name, url) 112 end 113 114 enable_service_access 115 116 puts 117 puts 'Setup complete'