github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+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'