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'