Class: Kontena::Machine::Azure::MasterProvisioner
- Inherits:
-
Object
- Object
- Kontena::Machine::Azure::MasterProvisioner
- Includes:
- RandomName
- Defined in:
- lib/kontena/machine/azure/master_provisioner.rb
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#http_client ⇒ Object
readonly
Returns the value of attribute http_client.
Instance Method Summary collapse
- #cloud_service(name) ⇒ Object
- #create_virtual_network(name, location) ⇒ Object
- #erb(template, vars) ⇒ Object
- #generate_cloud_service_name ⇒ Object
-
#initialize(subscription_id, certificate) ⇒ MasterProvisioner
constructor
A new instance of MasterProvisioner.
- #master_running? ⇒ Boolean
- #run!(opts) ⇒ Object
- #user_data(vars) ⇒ Object
- #virtual_network_exist?(name) ⇒ Boolean
Methods included from RandomName
Constructor Details
#initialize(subscription_id, certificate) ⇒ MasterProvisioner
Returns a new instance of MasterProvisioner.
16 17 18 19 20 21 22 23 24 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 16 def initialize(subscription_id, certificate) abort('Invalid management certificate') unless File.exists?(File.(certificate)) @client = ::Azure client.management_certificate = certificate client.subscription_id = subscription_id client.vm_management.initialize_external_logger(Logger.new) # We don't want all the output end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
12 13 14 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 12 def client @client end |
#http_client ⇒ Object (readonly)
Returns the value of attribute http_client.
12 13 14 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 12 def http_client @http_client end |
Instance Method Details
#cloud_service(name) ⇒ Object
112 113 114 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 112 def cloud_service(name) client.cloud_service_management.get_cloud_service(name) end |
#create_virtual_network(name, location) ⇒ Object
120 121 122 123 124 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 120 def create_virtual_network(name, location) address_space = ['10.0.0.0/20'] = {subnet: [{:name => 'subnet-1', :ip_address=>'10.0.0.0', :cidr=>23}]} client.network_management.set_network_configuration(name, location, address_space, ) end |
#erb(template, vars) ⇒ Object
93 94 95 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 93 def erb(template, vars) ERB.new(template).result(OpenStruct.new(vars).instance_eval { binding }) end |
#generate_cloud_service_name ⇒ Object
108 109 110 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 108 def generate_cloud_service_name "kontena-master-#{generate_name}-#{rand(1..99)}" end |
#master_running? ⇒ Boolean
102 103 104 105 106 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 102 def master_running? http_client.get(path: '/').status == 200 rescue false end |
#run!(opts) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 26 def run!(opts) abort('Invalid ssh key') unless File.exists?(File.(opts[:ssh_key])) if opts[:ssl_cert] abort('Invalid ssl cert') unless File.exists?(File.(opts[:ssl_cert])) ssl_cert = File.read(File.(opts[:ssl_cert])) end cloud_service_name = generate_cloud_service_name vm_name = cloud_service_name master_url = '' ShellSpinner "Creating Azure Virtual Machine #{vm_name.colorize(:cyan)}" do if opts[:virtual_network].nil? location = opts[:location].downcase.gsub(' ', '-') default_network_name = "kontena-#{location}" create_virtual_network(default_network_name, opts[:location]) unless virtual_network_exist?(default_network_name) opts[:virtual_network] = default_network_name opts[:subnet] = 'subnet-1' end userdata_vars = { ssl_cert: ssl_cert, auth_server: opts[:auth_server], version: opts[:version], vault_secret: opts[:vault_secret], vault_iv: opts[:vault_iv] } params = { vm_name: vm_name, vm_user: 'core', location: opts[:location], image: '2b171e93f07c4903bcad35bda10acf22__CoreOS-Stable-766.3.0', custom_data: Base64.encode64(user_data(userdata_vars)), ssh_key: opts[:ssh_key] } = { cloud_service_name: cloud_service_name, deployment_name: vm_name, virtual_network_name: opts[:virtual_network], subnet_name: opts[:subnet], tcp_endpoints: '80,443', private_key_file: opts[:ssh_key], ssh_port: 22, vm_size: opts[:size], } virtual_machine = client.vm_management.create_virtual_machine(params,) if opts[:ssl_cert] master_url = "https://#{virtual_machine.ipaddress}" else master_url = "http://#{virtual_machine.ipaddress}" end end Excon.defaults[:ssl_verify_peer] = false @http_client = Excon.new("#{master_url}", :connect_timeout => 10) ShellSpinner "Waiting for #{vm_name.colorize(:cyan)} to start" do sleep 5 until master_running? end puts "Kontena Master is now running at #{master_url}" puts "Use #{"kontena login #{master_url}".colorize(:light_black)} to complete Kontena Master setup" end |
#user_data(vars) ⇒ Object
97 98 99 100 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 97 def user_data(vars) cloudinit_template = File.join(__dir__ , '/cloudinit_master.yml') erb(File.read(cloudinit_template), vars) end |
#virtual_network_exist?(name) ⇒ Boolean
116 117 118 |
# File 'lib/kontena/machine/azure/master_provisioner.rb', line 116 def virtual_network_exist?(name) client.network_management.list_virtual_networks.find{|n| n.name == name} end |