lib/kite/render.rb in kite-0.1.0 vs lib/kite/render.rb in kite-0.2.0
- old
+ new
@@ -2,24 +2,66 @@
# Subcommand for rendering manifests, deployments etc.
class Render < Base
include Kite::Helpers
+ no_commands do
+ def ingress_db_file
+ "config/ingress.yml"
+ end
+
+ def ingress_db
+ @db ||= YAML.load(File.read(ingress_db_file)) rescue {}
+ end
+
+ def ingress_db_save!
+ create_file ingress_db_file, YAML.dump(ingress_db), force: true
+ end
+
+ def ingress_add_entry(hostname, upstreams, args = {})
+ raise "upstreams argument should be an array" unless upstreams.is_a?(Array)
+ args[:port] ||= 80
+ args[:protocol] ||= "http"
+ ingress_db[hostname] = {
+ upstreams: upstreams,
+ port: args[:port],
+ protocol: args[:protocol],
+ }
+ ingress_db_save!
+ end
+ end
+
desc "manifest <type>", "Renders a manifest of selected type"
+ long_desc <<-LONGDESC
+ Available types:
+ \x5 BOSH Render Bosh environement
+ \x5 CONCOURSE Render Concourse deployment
+ \x5 VAULT Render Vault deployment
+ \x5 INGRESS Render Ingress deployment
+ \x5 PROMETHEUS Render Prometheus deployment
+ \x5 OAUTH Render OAuth (UAA) deployment
+ LONGDESC
method_option :cloud, type: :string, desc: "Cloud provider", enum: %w{aws gcp}, required: true
# Render a manifest of selected type based on <b>config/cloud.yml</b> and <b>terraform apply</b> results
def manifest(type)
+ type = type.downcase
say "Rendering #{type} manifest", :green
@values = parse_cloud_config
@tf_output = parse_tf_state('terraform/terraform.tfstate') if options[:cloud] == 'aws'
if options[:cloud] == 'aws'
@private_subnet = IPAddr.new(@values['aws']['private_subnet']['network']).to_range.to_a
+ @public_subnet = IPAddr.new(@values['aws']['public_subnet']['network']).to_range.to_a
else
@private_subnet = IPAddr.new(@values['gcp']['subnet_cidr']).to_range.to_a
end
+ @static_ip_vault = @private_subnet[11].to_s
+ @static_ips_concourse = [@private_subnet[12]].map(&:to_s)
+ @static_ip_prometheus_stack = @private_subnet[18].to_s
+ @static_ip_oauth = @private_subnet[23].to_s
+
case type
when "bosh"
directory("#{options[:cloud]}/deployments/bosh", 'deployments/bosh')
template("#{options[:cloud]}/bosh-vars.yml.erb", 'config/bosh-vars.yml')
copy_file("#{options[:cloud]}/docs/bosh.md", "docs/bosh.md")
@@ -29,18 +71,42 @@
when "concourse"
directory("#{options[:cloud]}/deployments/concourse", "deployments/concourse")
copy_file("#{options[:cloud]}/docs/concourse.md", "docs/concourse.md")
template("#{options[:cloud]}/bin/concourse-deploy.sh.tt", "bin/concourse-deploy.sh")
chmod('bin/concourse-deploy.sh', 0755)
+ ingress_add_entry(@values['concourse']['hostname'], @static_ips_concourse, port: 8080)
when "vault"
template("#{options[:cloud]}/deployments/vault/vault.yml.erb", "deployments/vault/vault.yml")
copy_file("#{options[:cloud]}/docs/vault.md", "docs/vault.md")
template("#{options[:cloud]}/bin/vault-deploy.sh.tt", "bin/vault-deploy.sh")
chmod('bin/vault-deploy.sh', 0755)
+ ingress_add_entry(@values['vault']['hostname'], [@static_ip_vault], port: 8200)
- when "nginx"
- template("#{options[:cloud]}/deployments/nginx/nginx.yml.erb", "deployments/nginx/nginx.yml")
+ when "ingress"
+ template("#{options[:cloud]}/deployments/ingress/ingress.yml.erb", "deployments/ingress/ingress.yml")
+ copy_file("#{options[:cloud]}/docs/ingress.md", "docs/ingress.md")
+ template("#{options[:cloud]}/bin/ingress-deploy.sh.tt", "bin/ingress-deploy.sh")
+ template("#{options[:cloud]}/bin/ingress-update.sh.tt", "bin/ingress-update.sh")
+ chmod('bin/ingress-deploy.sh', 0755)
+ chmod('bin/ingress-update.sh', 0755)
+
+ when "prometheus"
+ directory("#{options[:cloud]}/deployments/prometheus", "deployments/prometheus")
+ copy_file("#{options[:cloud]}/docs/prometheus.md", "docs/prometheus.md")
+ template("#{options[:cloud]}/bin/prometheus-deploy.sh.tt", "bin/prometheus-deploy.sh")
+ chmod('bin/prometheus-deploy.sh', 0755)
+ ingress_add_entry(@values['alertmanager']['hostname'], [@static_ip_prometheus_stack], port: 9093)
+ ingress_add_entry(@values['grafana']['hostname'], [@static_ip_prometheus_stack], port: 3000)
+ ingress_add_entry(@values['prometheus']['hostname'], [@static_ip_prometheus_stack], port: 9090)
+
+ when "oauth"
+ directory("#{options[:cloud]}/deployments/oauth", "deployments/oauth")
+ copy_file("#{options[:cloud]}/config/oauth.yml", "config/oauth.yml")
+ template("#{options[:cloud]}/docs/oauth.md", "docs/oauth.md")
+ template("#{options[:cloud]}/bin/oauth-deploy.sh.tt", "bin/oauth-deploy.sh")
+ chmod('bin/oauth-deploy.sh', 0755)
+ ingress_add_entry(@values['oauth']['hostname'], [@static_ip_oauth], port: 8080)
else
say "Manifest type not specified"
end