initial commit master
authorMartin S. Benonisen <m.s.benonisen@usit.uio.no>
Tue, 19 Jan 2016 11:46:29 +0000 (12:46 +0100)
committerMartin S. Benonisen <m.s.benonisen@usit.uio.no>
Tue, 19 Jan 2016 11:46:29 +0000 (12:46 +0100)
ap-deploy.rb [new file with mode: 0755]
config.yaml.template [new file with mode: 0644]

diff --git a/ap-deploy.rb b/ap-deploy.rb
new file mode 100755 (executable)
index 0000000..2f5590f
--- /dev/null
@@ -0,0 +1,106 @@
+#!/usr/bin/ruby
+require 'optparse'
+require 'ostruct'
+require 'pp'
+require 'optparse/time'
+require 'rubygems'
+require 'highline/import'
+require 'yaml'
+
+Options = Struct.new(:name)
+
+class Parser
+  def self.parse(args)
+    options = OpenStruct.new
+    options.config = []
+    options.key = ""
+    options.appliance = ""
+    options.cert = ""
+    options.chain = []
+    options.vi_server = ""
+    opt_parser = OptionParser.new do |opts|
+      opts.banner = "Usage: ap-deploy.rb [options]"
+
+      opts.on("-cCONFIG", "--config CONFIG", "Access Point configuration file") do |c|
+        options.config << c
+      end
+
+      opts.on("-k", "--key KEYFILE", "File containing cert private key") do |key|
+        options.key = key
+      end
+      opts.on("-o", "--ova OVAFILE", "Appliance ova file") do |ova|
+        options.appliance = ova
+      end
+      opts.on("-C", "--cert CERTIFICATE", "Certificate file") do |cert|
+        options.cert = cert
+      end
+      opts.on("--chain CERTCHAIN", "Can be used multiple times to include certificate chain") do |chain|
+        options.chain << chain
+      end
+      opts.on("-v", "--vi-server VISERVER", "vcenter server to connect to") do |visrv|
+        options.vi_server = visrv
+      end
+    end
+      opt_parser.parse!(args)
+      options
+  end
+end
+
+$options = Parser.parse(ARGV)
+
+$admin_pw = ask("admin password:  ") { |q| q.echo = "*" }
+$root_pw = ask("Root password:  ") { |q| q.echo = "*" }
+$vcenter_user = ask("vCenter username:  ") { |q| q.echo = true }
+$vcenter_pw = ask("vCenter password:  ") { |q| q.echo = "*" }
+
+def cert_to_oneline(file)
+  f = File.read(file)
+  if f =~ /\r\n/
+    f.gsub("\r\n", "\\\\\\\\n")
+  elsif f =~ /\n/
+    f.gsub("\n", "\\\\\\\\n")
+  end
+end
+
+def deploy(configfile)
+  config = YAML.load_file(configfile)
+  config.each { |key, value| instance_variable_set("@#{key}", value) }
+  ovf_command = `which ovftool`.tr("\n","")
+  viserver = "vi://#{$vcenter_user}:#{$vcenter_pw}@#{$options.vi_server}/#{@dc}/host/#{@host}"
+  $chain = cert_to_oneline($options.cert)
+  $key = cert_to_oneline($options.key)
+  ovf_args="\
+--X:enableHiddenProperties \
+--X:waitForIp \
+--powerOffTarget \
+--powerOn \
+--overwrite \
+--vmFolder=#{@folder} \
+--net:Internet=\"#{@external_nic}\" \
+--net:ManagementNetwork=\"#{@mgmt_nic}\" \
+--net:BackendNetwork=\"#{@backend_nic}\" \
+--deploymentOption=#{@deployment_option} \
+--prop:ip0=#{@external_ip} \
+--prop:DNS=#{@dns} \
+-ds=#{@ds} \
+--name=#{@name} \
+--ipAllocationPolicy=fixedPolicy \
+--prop:adminPassword=#{$admin_pw} \
+--prop:rootPassword=#{$root_pw} \
+--prop:settingsJSON='{\
+\"edgeServiceSettingsList\": { \"edgeServiceSettingsList\": \
+[ { \"identifier\": \"VIEW\", \"enabled\": true, \"proxyDestinationUrl\": \"#{@connection_server_url}\", \
+\"proxyDestinationUrlThumbprints\": \"#{@cert_sha1}\", \
+\"pcoipEnabled\": true, \"pcoipExternalUrl\": \"#{@pcoip_external_url}\", \
+\"blastEnabled\": true, \"blastExternalUrl\": \"#{@blast_external_url}\", \
+\"tunnelEnabled\": true, \"tunnelExternalUrl\": \"#{@tunnel_external_url}\", \
+\"proxyPattern\":\"/\" } ] }, \"certificateWrapper\": { \"privateKeyPem\": \"#{$key}\", \"certChainPem\": \"#{$chain}\" }}' \
+ #{$options.appliance} \
+ #{viserver}"
+
+  command = "#{ovf_command} #{ovf_args}"
+  system( command )
+end
+
+
+$options.config.each { |configfile| deploy(configfile) }
diff --git a/config.yaml.template b/config.yaml.template
new file mode 100644 (file)
index 0000000..ee5beab
--- /dev/null
@@ -0,0 +1,97 @@
+folder: ""
+
+external_nic: ""
+
+# (Required) Specifies public IPv4 address used for
+# accessing this virtual machine on the Internet.
+# NOTE The computer name is set through a DNS
+# query of this Int
+external_ip: ""
+
+
+mgmt_nic: ""
+
+# Specifies the IP address of the interface that is
+# connected to the management network.
+# If not configured, the administration server
+# listens on the Internet-facing interface.
+# Default:  none.
+mgmt_ip: ""
+
+# Specifies the IP address of the interface that is
+# connected to the back-end network.
+# If not configured, network traffic sent to the
+# backend systems is routed through the other
+# network interfaces.
+# Default:  none.
+backend_nic: ""
+backend_ip: ""
+
+# {onenic|twonic|threenic}
+# Specifies how many network interfaces are
+# available in the Access Point virtual machine.
+# By default, this property is not set, which means
+# that one NIC is used.
+deployment_option: ""
+
+# (Required) Specifies one or more space-separated
+# IPv4 addresses of the domain name servers for
+# this virtual machine (example:  192.0.2.1
+# 192.0.2.2). You can specify up to three servers.
+# By default, this property is not set, which means
+# that the system uses the DNS server that is
+# associated with the Internet-facing NIC.
+# CAUTION If you leave this option blank and if no
+# DNS server is associated with the Internet-facing
+# NIC, the appliance will not be deployed
+# correctly.
+dns: ""
+
+# Specifies the Syslog server used for logging
+# Access Point events.
+# This value can be a URL or a host name or IP
+# address. The scheme and port number are
+# optional (example:  syslog: //server.example.com: 
+# 514).
+# By default, this property is not set, which means
+# that no events are logged to a syslog server.
+syslog_url: ""
+
+# Appliance name
+name: ""
+
+# (Required) Specifies the destination URL of the
+# load balancer or View Connection Server that the
+# Access Point appliance directs traffic to.
+# The destination URL must contain the protocol,
+# host name or IP address, and port number
+# (example:  https: //load-balancer.example.com: 
+# 443)
+# Default:  none.
+connection_server_url: ""
+
+# If you do not provide a comma-separated list of
+# thumbrpints, the server certificates must be
+# issued by a trusted CA.
+# The format includes the algorithm (sha1 or md5)
+# and the hexadecimal thumbprint digits (example: 
+# sha1: b6 77 dc 9c 19 94 2e f1 78 f0 ad 4b ec 85 d1
+# 7a f8 8b dc 34). To find these properties, browse
+# to the View Connection Server, click the lock icon
+# in the address bar, and view the certificate
+# details.
+# Default:  none.
+cert_sha1: ""
+
+pcoip_external_url: ""
+blast_external_url: ""
+tunnel_external_url: ""
+
+# vCenter url, example: vc.example.com
+vc: ""
+# Name of datacenter
+dc: ""
+# Name of vcenter host
+host: ""
+# Name of datastore
+ds: ""