Showing
10 changed files
with
95 additions
and
33 deletions
@@ -2,13 +2,12 @@ class DashboardController < ApplicationController | @@ -2,13 +2,12 @@ class DashboardController < ApplicationController | ||
2 | def index | 2 | def index |
3 | @hosts = Host.all | 3 | @hosts = Host.all |
4 | 4 | ||
5 | - @hosts.map { |host| | ||
6 | - if host.lxd_config.auth == 'untrusted' | ||
7 | - session[:return_to] = request.env["REQUEST_URI"] | ||
8 | - redirect_to controller: 'hosts', action: 'auth', id: host.id | ||
9 | - return | ||
10 | - end | ||
11 | - } | 5 | +# @hosts.map { |host| |
6 | +# if host.connected and not host.authenticated | ||
7 | +# session[:return_to] = request.env["REQUEST_URI"] | ||
8 | +# redirect_to controller: 'hosts', action: 'auth', id: host.id | ||
9 | +# end | ||
10 | +# } | ||
12 | end | 11 | end |
13 | end | 12 | end |
14 | # vim: set et ts=2 sw=2: | 13 | # vim: set et ts=2 sw=2: |
@@ -7,9 +7,7 @@ class Certificate < ActiveRecord::Base | @@ -7,9 +7,7 @@ class Certificate < ActiveRecord::Base | ||
7 | def self.get | 7 | def self.get |
8 | @@cert ||= find_by active: true | 8 | @@cert ||= find_by active: true |
9 | @@cert ||= create | 9 | @@cert ||= create |
10 | - if @@cert.is_expired? | ||
11 | - @@cert = @@cert.update | ||
12 | - end | 10 | + @@cert = @@cert.update if @@cert.expires_soon? |
13 | @@cert | 11 | @@cert |
14 | end | 12 | end |
15 | 13 |
@@ -10,7 +10,7 @@ class Host < ActiveRecord::Base | @@ -10,7 +10,7 @@ class Host < ActiveRecord::Base | ||
10 | super(true) | 10 | super(true) |
11 | when super.expires_soon? | 11 | when super.expires_soon? |
12 | old = super | 12 | old = super |
13 | - new = Certificate.get.update | 13 | + new = Certificate.get |
14 | Lxd::Certificate.new(api: api(old), certificate: new.to_s).add | 14 | Lxd::Certificate.new(api: api(old), certificate: new.to_s).add |
15 | self.certificate_id = new.id | 15 | self.certificate_id = new.id |
16 | self.save | 16 | self.save |
@@ -35,8 +35,16 @@ class Host < ActiveRecord::Base | @@ -35,8 +35,16 @@ class Host < ActiveRecord::Base | ||
35 | Lxd::Certificate.new(api: api).add password | 35 | Lxd::Certificate.new(api: api).add password |
36 | end | 36 | end |
37 | 37 | ||
38 | + def connected | ||
39 | + lxd_config != nil | ||
40 | + end | ||
41 | + | ||
42 | + def authenticated | ||
43 | + lxd_config != nil and lxd_config.auth == 'trusted' | ||
44 | + end | ||
45 | + | ||
38 | private | 46 | private |
39 | - def api certificate = nil | 47 | + def api certificate=nil |
40 | @api ||= Lxd::API.get self, certificate | 48 | @api ||= Lxd::API.get self, certificate |
41 | end | 49 | end |
42 | end | 50 | end |
1 | module Lxd::API | 1 | module Lxd::API |
2 | def self.get host, certificate = nil | 2 | def self.get host, certificate = nil |
3 | certificate ||= host.certificate | 3 | certificate ||= host.certificate |
4 | + | ||
4 | uri = URI.parse host.uri | 5 | uri = URI.parse host.uri |
5 | con = Net::HTTP.new uri.host, uri.port ? uri.port : 8443 | 6 | con = Net::HTTP.new uri.host, uri.port ? uri.port : 8443 |
6 | con.use_ssl = true | 7 | con.use_ssl = true |
@@ -8,14 +9,33 @@ module Lxd::API | @@ -8,14 +9,33 @@ module Lxd::API | ||
8 | con.key = OpenSSL::PKey::RSA.new certificate.key | 9 | con.key = OpenSSL::PKey::RSA.new certificate.key |
9 | con.verify_mode = OpenSSL::SSL::VERIFY_NONE | 10 | con.verify_mode = OpenSSL::SSL::VERIFY_NONE |
10 | 11 | ||
11 | - resp = self.call con, Net::HTTP::Get.new('/') | ||
12 | - return Lxd::API::V1_0.new con if resp['metadata'].include? '/1.0' | ||
13 | - raise "unsupported api version" | 12 | + resp = call con, Net::HTTP::Get.new('/') |
13 | + api = Lxd::API::V1_0.new con if resp['metadata'].include? '/1.0' | ||
14 | + raise Lxd::API::Exception 'unsupported api version' unless api | ||
15 | + return api unless block_given? | ||
16 | + yield api | ||
17 | + rescue Lxd::API::Exception => e | ||
18 | + Rails.logger.error { "#{e.message} #{e.backtrace.join("\n")}" } | ||
19 | + nil | ||
20 | + rescue => e | ||
21 | + Rails.logger.error { | ||
22 | + format( | ||
23 | + 'Error connecting: %s, %s %s', | ||
24 | + host.uri, e.message, e.backtrace.join("\n") | ||
25 | + ) | ||
26 | + } | ||
27 | + nil | ||
28 | + ensure | ||
29 | + con.close if block_given? | ||
14 | end | 30 | end |
15 | 31 | ||
16 | def self.call con, req | 32 | def self.call con, req |
17 | resp = con.request req | 33 | resp = con.request req |
18 | - raise "request failure: " + resp.code unless resp.code != 200 | 34 | + unless resp.code != 200 |
35 | + raise Lxd::API::Exception( | ||
36 | + "request failure: (#{resp.code}) #{resp.message}" | ||
37 | + ) | ||
38 | + end | ||
19 | JSON.parse resp.body | 39 | JSON.parse resp.body |
20 | end | 40 | end |
21 | 41 | ||
@@ -25,6 +45,17 @@ module Lxd::API | @@ -25,6 +45,17 @@ module Lxd::API | ||
25 | 45 | ||
26 | def call req | 46 | def call req |
27 | handle_response(Lxd::API.call @con, req) | 47 | handle_response(Lxd::API.call @con, req) |
48 | + rescue Lxd::API::Exception => e | ||
49 | + Rails.logger.error { "#{e.message} #{e.backtrace.join("\n")}" } | ||
50 | + nil | ||
51 | + rescue => e | ||
52 | + Rails.logger.error { | ||
53 | + format( | ||
54 | + 'Error connecting: %s, %s %s', | ||
55 | + host.uri, e.message, e.backtrace.join("\n") | ||
56 | + ) | ||
57 | + } | ||
58 | + nil | ||
28 | end | 59 | end |
29 | 60 | ||
30 | def get uri | 61 | def get uri |
app/models/lxd/api/exception.rb
0 → 100644
@@ -48,7 +48,11 @@ class Lxd::API::V1_0 | @@ -48,7 +48,11 @@ class Lxd::API::V1_0 | ||
48 | 400 to 599: negative action result | 48 | 400 to 599: negative action result |
49 | 600 to 999: future use | 49 | 600 to 999: future use |
50 | """ | 50 | """ |
51 | - raise "api error: (" + resp['error_code'].to_s + ") " + resp['error'] if resp['error_code'] and resp['error_code'] != 403 | 51 | + if resp['error_code'] and resp['error_code'] != 403 |
52 | + raise Lxd::API::Exception( | ||
53 | + "api error: (#{resp['error_code']}) #{resp['error']}" | ||
54 | + ) | ||
55 | + end | ||
52 | resp['metadata'] | 56 | resp['metadata'] |
53 | end | 57 | end |
54 | end | 58 | end |
@@ -4,6 +4,7 @@ class Lxd::Certificate | @@ -4,6 +4,7 @@ class Lxd::Certificate | ||
4 | attr_accessor :api, :uri, :type, :certificate, :fingerprint | 4 | attr_accessor :api, :uri, :type, :certificate, :fingerprint |
5 | 5 | ||
6 | def self.all api | 6 | def self.all api |
7 | + return [] unless api | ||
7 | api.certificates.map { |cert| | 8 | api.certificates.map { |cert| |
8 | Lxd::Certificate.new({api: api}.merge cert) | 9 | Lxd::Certificate.new({api: api}.merge cert) |
9 | } | 10 | } |
@@ -5,6 +5,7 @@ class Lxd::Config | @@ -5,6 +5,7 @@ class Lxd::Config | ||
5 | :config, :environment, :public | 5 | :config, :environment, :public |
6 | 6 | ||
7 | def self.get api | 7 | def self.get api |
8 | + return nil unless api | ||
8 | Lxd::Config.new({api: api}.merge api.config) | 9 | Lxd::Config.new({api: api}.merge api.config) |
9 | end | 10 | end |
10 | 11 |
1 | <h1>Dashboard#index</h1> | 1 | <h1>Dashboard#index</h1> |
2 | -<% Certificate.all.each do |cert| -%> | ||
3 | -<p>Fingerprint: <%= cert.cert_fpr %> | ||
4 | -Serial: <%= cert.cert.serial %></p> | ||
5 | -<% end -%> | 2 | +<p> |
3 | +<h2>Lex-deeit certificate</h2> | ||
4 | +<h3>Fingerprint</h3> | ||
5 | +<%= Certificate.get.cert_fpr %> | ||
6 | +<h3>Serial</h3> | ||
7 | +<%= Certificate.get.cert.serial %> | ||
8 | +</p> | ||
6 | <hr/> | 9 | <hr/> |
7 | <% @hosts.each do |host| -%> | 10 | <% @hosts.each do |host| -%> |
8 | -<p><%= host.lxd_config.inspect %></p> | ||
9 | -<% host.lxd_certificates.each do |certificate| -%> | ||
10 | -<p><%= certificate.fingerprint %></p> | ||
11 | -<% end -%> | 11 | + <p> |
12 | + <h2><%= host.name %></h2> | ||
13 | + <h3>Url:</h3> | ||
14 | + <%= host.uri %> | ||
15 | + <h3>Connection status:</h3> | ||
16 | + <% case -%> | ||
17 | + <% when host.authenticated -%> | ||
18 | + authenticated | ||
19 | + <% when host.connected -%> | ||
20 | + connected | ||
21 | + <% else -%> | ||
22 | + not connected | ||
23 | + <% end -%> | ||
24 | + <% if host.authenticated -%> | ||
25 | + <h3>Config:</h3> | ||
26 | + <%= host.lxd_config.config %> | ||
27 | + <h3>Host known certificates</h3> | ||
28 | + <ul> | ||
29 | + <% host.authenticated and host.lxd_certificates.each do |certificate| -%> | ||
30 | + <li><%= certificate.fingerprint %></li> | ||
31 | + <% end -%> | ||
32 | + </ul> | ||
33 | + <% end -%> | ||
34 | + </p> | ||
35 | + <hr/> | ||
12 | <% end -%> | 36 | <% end -%> |
37 | +<!-- vim: set ts=2 sw=2: --> |
@@ -19,14 +19,6 @@ | @@ -19,14 +19,6 @@ | ||
19 | <%= f.label :uri %><br> | 19 | <%= f.label :uri %><br> |
20 | <%= f.text_field :uri %> | 20 | <%= f.text_field :uri %> |
21 | </div> | 21 | </div> |
22 | - <div class="field"> | ||
23 | - <%= f.label :password %><br> | ||
24 | - <%= f.password_field :password %> | ||
25 | - </div> | ||
26 | - <div class="field"> | ||
27 | - <%= f.label :password_confirmation %><br> | ||
28 | - <%= f.password_field :password_confirmation %> | ||
29 | - </div> | ||
30 | <div class="actions"> | 22 | <div class="actions"> |
31 | <%= f.submit %> | 23 | <%= f.submit %> |
32 | </div> | 24 | </div> |
Please
register
or
login
to post a comment