foreman_datacenter 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4965814107a18aa56bd5432f9c12a20df9068fdc
4
- data.tar.gz: 49d006b0462d88397420cb092448f7a22ce77a1c
3
+ metadata.gz: df3c278d9ecfa81fbb1142a10aaf00ecf23edee6
4
+ data.tar.gz: ff8b623eceefbdb49ff3ab107dbcd05bd5d54a1f
5
5
  SHA512:
6
- metadata.gz: 73314156c960f4473a1f9a1845f93b8aa4495187cbc1e4c043f66d4f439520f6ef2e137bce040092ca70fd3e0c173909d938b211c6e9983190be802c76a1436f
7
- data.tar.gz: c7309713cab68b36f9e98720c8134045583f24294f431f06d0ab6c524f3b4e1ea5043cf439def68794ed8ef9415311ebd44c541fbea980b26e1806480aa458d1
6
+ metadata.gz: d14004f3e7e39d7b05ef4c83d6b2d08671a793d3123459fed3c9afa777eb897c8df3bb633baa6b4d05de812eb7930a5f520537b9cc2bb7cda66b48bab1377760
7
+ data.tar.gz: 64a9f1c54c0650159ce15f5b3195cc1621b4feed90bfe371c093fb61f8c1c1dd65caea55b3301a4a67dd77e8cc29b2f7d723985a275e4591b8d726dfbabaf566
@@ -1,8 +1,13 @@
1
+ require 'rqrcode'
2
+ require 'prawn'
3
+ require 'prawn/measurement_extensions'
4
+
1
5
  module ForemanDatacenter
2
6
  class DevicesController < ApplicationController
3
7
  include Foreman::Controller::AutoCompleteSearch
4
8
 
5
- before_action :set_device, only: [:update, :destroy, :inventory, :destroy_interfaces]
9
+ before_action :set_device, only: [:update, :destroy, :inventory,
10
+ :destroy_interfaces, :qr_code]
6
11
 
7
12
  def index
8
13
  begin
@@ -86,6 +91,12 @@ module ForemanDatacenter
86
91
  redirect_to device_url(@device)
87
92
  end
88
93
 
94
+ def qr_code
95
+ send_data(generate_qr_code(@device),
96
+ filename: "#{@device.name_without_fqdn}.qr.pdf",
97
+ type: 'application/pdf')
98
+ end
99
+
89
100
  private
90
101
 
91
102
  def set_device
@@ -105,5 +116,20 @@ module ForemanDatacenter
105
116
  @device.populate_from_host(host)
106
117
  end
107
118
  end
119
+
120
+ def generate_qr_code(device)
121
+ name = device.name_without_fqdn
122
+ width = name.size * 5 + 40
123
+ qr_code = RQRCode::QRCode.new(device_url(device))
124
+ png = qr_code.as_png(border_modules: 1, size: 240).to_s
125
+ document = Prawn::Document.new(page_size: [36, width * 2], page_layout: :landscape, margin: 0) do
126
+ font_size(10)
127
+ image(StringIO.new(png), width: 36, scale: 1)
128
+ text_box(name, at: [38, 22])
129
+ image(StringIO.new(png), width: 36, scale: 1, at: [width, 36])
130
+ text_box(name, at: [width + 38, 22])
131
+ end
132
+ document.render
133
+ end
108
134
  end
109
135
  end
@@ -58,6 +58,7 @@ module ForemanDatacenter
58
58
  delegate :manufacturer_id, :is_console_server, :is_pdu, :is_network_device,
59
59
  to: :device_type, allow_nil: true
60
60
  delegate :console_url, :login, :password, to: :management_device
61
+ delegate :hostname, to: :host, allow_nil: true
61
62
 
62
63
  def mac_address
63
64
  ipmi_interface.try(:mac_address) || mgmt_interface.try(:mac_address)
@@ -107,6 +108,11 @@ module ForemanDatacenter
107
108
  self.serial = serial.value if serial
108
109
  end
109
110
 
111
+ def name_without_fqdn
112
+ match = name.match(/^([^.]*)/)
113
+ match[1] if match
114
+ end
115
+
110
116
  private
111
117
 
112
118
  def create_interfaces
@@ -1,27 +1,34 @@
1
1
  <% javascript 'foreman_datacenter/ajax' %>
2
2
  <% javascript 'foreman_datacenter/management_devices' %>
3
3
 
4
- <% title @device.name %>
4
+ <div class="row">
5
+ <div class="col-md-8">
6
+ <h1>
7
+ <% if @device.host %>
8
+ <%= link_to @device.name, host_path(@device.host) %>
9
+ <% else %>
10
+ <%= @device.name %>
11
+ <% end %></h1>
12
+ </div>
13
+ </div>
5
14
 
6
- <% title_actions display_link_if_authorized(
7
- _('Edit'),
8
- hash_for_edit_device_path(:id => @device).merge(:auth_object => @device, :authorizer => authorizer),
9
- :class => 'btn btn-warning'
10
- ),
11
- display_delete_if_authorized(
12
- hash_for_device_path(:id => @device).merge(:auth_object => @device, :authorizer => authorizer),
13
- :data => { :confirm => 'Are you sure?' },
14
- :action => :destroy,
15
- :class => 'btn btn-danger'
16
- ),
17
- display_link_if_authorized(
18
- _('Import from host'),
19
- @device.host ?
20
- hash_for_edit_device_path(@device, host_id: @device.host.id) :
21
- hash_for_import_to_device_path(target_device_id: @device.id),
22
- :class => 'btn btn-success'
23
- ),
24
- help_path %>
15
+ <div class="row">
16
+ <div class="col-md-offset-4 col-md-8 title_action">
17
+ <div class="btn-toolbar pull-right">
18
+ <%= link_to 'Edit', edit_device_path(@device), class: 'btn btn-warning' %>
19
+ <%= link_to 'Delete', device_path(@device), class: 'btn btn-danger',
20
+ action: :destroy, data: { confirm: 'Are you sure?' } %>
21
+ <%= link_to 'Import from hosts',
22
+ @device.host ?
23
+ edit_device_path(@device, host_id: @device.host.id) :
24
+ import_to_device_path(target_device_id: @device.id),
25
+ class: 'btn btn-success' %>
26
+ <%= link_to 'Download QR PDF file',
27
+ qr_code_device_path(@device),
28
+ class: 'btn btn-default' %>
29
+ </div>
30
+ </div>
31
+ </div>
25
32
 
26
33
  <ul class="nav nav-tabs">
27
34
  <li class="active"><%= link_to 'Info', device_path(@device) %></li>
data/config/routes.rb CHANGED
@@ -36,6 +36,7 @@ Foreman::Application.routes.draw do
36
36
  member do
37
37
  get :inventory
38
38
  delete :destroy_interfaces
39
+ get :qr_code
39
40
  end
40
41
  resources :device_bays, except: [:show, :index], shallow: true do
41
42
  member do
@@ -1,3 +1,3 @@
1
1
  module ForemanDatacenter
2
- VERSION = '0.1.7'.freeze
2
+ VERSION = '0.1.8'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_datacenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Ivanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-26 00:00:00.000000000 Z
11
+ date: 2016-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: prawn
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rqrcode
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.1
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rubocop
29
57
  requirement: !ruby/object:Gem::Requirement