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