foreman_datacenter 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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