foreman_netbox 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/app/contracts/foreman_netbox/device_contract.rb +3 -3
- data/app/contracts/foreman_netbox/params/interface_params.rb +6 -8
- data/app/contracts/foreman_netbox/params/ip_address_params.rb +5 -7
- data/app/contracts/foreman_netbox/params/tenant_params.rb +4 -6
- data/app/contracts/foreman_netbox/virtual_machine_contract.rb +3 -3
- data/app/interactors/foreman_netbox/sync_host/sync_device/save_netbox_url.rb +1 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/update.rb +2 -0
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/save_netbox_url.rb +1 -1
- data/app/lib/foreman_netbox/api.rb +2 -2
- data/app/models/orchestration/netbox.rb +1 -1
- data/db/migrate/20230303095650_fix_netbox_settings_category_to_dsl.rb +9 -0
- data/lib/foreman_netbox/engine.rb +28 -11
- data/lib/foreman_netbox/version.rb +1 -1
- data/test/integration/foreman_netbox/sync_rhel_virtual_host_test.rb +1 -1
- data/test/interactors/foreman_netbox/sync_host/organizer_test.rb +4 -4
- data/test/interactors/foreman_netbox/sync_host/sync_device/update_test.rb +30 -0
- data/test/test_plugin_helper.rb +4 -9
- metadata +112 -76
- data/app/models/setting/netbox.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b8ad442bf38c2bf5ac0ed5b94580b108a16d267a2ae2a37f456a73ebb1f8cd6
|
4
|
+
data.tar.gz: e31f39d22ea73a0bda27093a4f8474740836899c4d0379cc8763a1b9ec766e24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab087e119d4a0fd10f4847a4e6aaa829e55e2b1036393058ccc90363a098ea12fa156fd7f62c1eba98d0e2a15e0f3fd0aeec77d65f4a78a515ff6b16b6739f13
|
7
|
+
data.tar.gz: 47561411ae532f4229a45ce71443f89fadc94aae271d25be9e201148500cfa7f013ff7e24c94c1134738e95f7a200ed204378a4dee65cd72e7694e64f81c5911
|
data/README.md
CHANGED
@@ -4,9 +4,9 @@ module ForemanNetbox
|
|
4
4
|
class DeviceContract < Dry::Validation::Contract
|
5
5
|
# rubocop:disable Metrics/BlockLength
|
6
6
|
params do
|
7
|
-
optional(:tenant).hash(ForemanNetbox::Params::TenantParams
|
8
|
-
optional(:ip_addresses).array(ForemanNetbox::Params::IpAddressParams
|
9
|
-
optional(:interfaces).array(ForemanNetbox::Params::InterfaceParams
|
7
|
+
optional(:tenant).hash(ForemanNetbox::Params::TenantParams)
|
8
|
+
optional(:ip_addresses).array(ForemanNetbox::Params::IpAddressParams)
|
9
|
+
optional(:interfaces).array(ForemanNetbox::Params::InterfaceParams)
|
10
10
|
|
11
11
|
required(:device).filled(:hash) do
|
12
12
|
required(:name).filled(:string)
|
@@ -2,15 +2,13 @@
|
|
2
2
|
|
3
3
|
module ForemanNetbox
|
4
4
|
module Params
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
required(:
|
9
|
-
required(:value).filled(:string)
|
10
|
-
end
|
11
|
-
optional(:mac_address).maybe(:string)
|
12
|
-
optional(:tags).array(:string)
|
5
|
+
InterfaceParams = Dry::Schema.Params do
|
6
|
+
required(:name).filled(:string)
|
7
|
+
required(:type).filled(:hash) do
|
8
|
+
required(:value).filled(:string)
|
13
9
|
end
|
10
|
+
optional(:mac_address).maybe(:string)
|
11
|
+
optional(:tags).array(:string)
|
14
12
|
end
|
15
13
|
end
|
16
14
|
end
|
@@ -2,14 +2,12 @@
|
|
2
2
|
|
3
3
|
module ForemanNetbox
|
4
4
|
module Params
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
required(:
|
9
|
-
required(:name).filled(:string)
|
10
|
-
end
|
11
|
-
optional(:tags).array(:string)
|
5
|
+
IpAddressParams = Dry::Schema.Params do
|
6
|
+
required(:address).filled(:string)
|
7
|
+
required(:interface).filled(:hash) do
|
8
|
+
required(:name).filled(:string)
|
12
9
|
end
|
10
|
+
optional(:tags).array(:string)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -2,12 +2,10 @@
|
|
2
2
|
|
3
3
|
module ForemanNetbox
|
4
4
|
module Params
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
optional(:tags).array(:string)
|
10
|
-
end
|
5
|
+
TenantParams = Dry::Schema.Params do
|
6
|
+
required(:name).filled(:string)
|
7
|
+
required(:slug).filled(:string)
|
8
|
+
optional(:tags).array(:string)
|
11
9
|
end
|
12
10
|
end
|
13
11
|
end
|
@@ -3,9 +3,9 @@
|
|
3
3
|
module ForemanNetbox
|
4
4
|
class VirtualMachineContract < Dry::Validation::Contract
|
5
5
|
params do
|
6
|
-
optional(:tenant).hash(ForemanNetbox::Params::TenantParams
|
7
|
-
optional(:ip_addresses).array(ForemanNetbox::Params::IpAddressParams
|
8
|
-
optional(:interfaces).array(ForemanNetbox::Params::InterfaceParams
|
6
|
+
optional(:tenant).hash(ForemanNetbox::Params::TenantParams)
|
7
|
+
optional(:ip_addresses).array(ForemanNetbox::Params::IpAddressParams)
|
8
|
+
optional(:interfaces).array(ForemanNetbox::Params::InterfaceParams)
|
9
9
|
|
10
10
|
required(:virtual_machine).filled(:hash) do
|
11
11
|
required(:name).filled(:string)
|
@@ -21,7 +21,7 @@ module ForemanNetbox
|
|
21
21
|
delegate :url, to: :netbox_facet, prefix: true, allow_nil: true
|
22
22
|
|
23
23
|
def netbox_device_url
|
24
|
-
"#{Setting
|
24
|
+
"#{Setting[:netbox_url]}/dcim/devices/#{device&.id}" if device&.id
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -23,7 +23,7 @@ module ForemanNetbox
|
|
23
23
|
def netbox_virtual_machine_url
|
24
24
|
return unless context.virtual_machine&.id
|
25
25
|
|
26
|
-
"#{Setting
|
26
|
+
"#{Setting[:netbox_url]}/virtualization/virtual-machines/#{context.virtual_machine&.id}"
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -4,8 +4,8 @@ module ForemanNetbox
|
|
4
4
|
class API
|
5
5
|
def self.client
|
6
6
|
NetboxClientRuby.configure do |config|
|
7
|
-
config.netbox.api_base_url = "#{Setting
|
8
|
-
config.netbox.auth.token = Setting
|
7
|
+
config.netbox.api_base_url = "#{Setting['netbox_url']}/api"
|
8
|
+
config.netbox.auth.token = Setting['netbox_api_token']
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class FixNetboxSettingsCategoryToDsl < ActiveRecord::Migration[6.0]
|
4
|
+
def up
|
5
|
+
# rubocop:disable Rails/SkipsModelValidations
|
6
|
+
Setting.where(category: 'Setting::Netbox').update_all(category: 'Setting') if column_exists?(:settings, :category)
|
7
|
+
# rubocop:enable Rails/SkipsModelValidations
|
8
|
+
end
|
9
|
+
end
|
@@ -10,14 +10,6 @@ module ForemanNetbox
|
|
10
10
|
|
11
11
|
config.autoload_paths += Dir["#{config.root}/app/interactors"]
|
12
12
|
|
13
|
-
initializer 'foreman_netbox.load_default_settings', before: :load_config_initializers do
|
14
|
-
require_dependency File.expand_path('../../app/models/setting/netbox.rb', __dir__) if begin
|
15
|
-
Setting.table_exists?
|
16
|
-
rescue StandardError
|
17
|
-
(false)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
13
|
# Add any db migrations
|
22
14
|
initializer 'foreman_netbox.load_app_instance_data' do |app|
|
23
15
|
ForemanNetbox::Engine.paths['db/migrate'].existent.each do |path|
|
@@ -27,7 +19,7 @@ module ForemanNetbox
|
|
27
19
|
|
28
20
|
initializer 'foreman_netbox.register_plugin', :before => :finisher_hook do |_app|
|
29
21
|
Foreman::Plugin.register :foreman_netbox do
|
30
|
-
requires_foreman '>= 1
|
22
|
+
requires_foreman '>= 3.1'
|
31
23
|
|
32
24
|
# Netbox Facet
|
33
25
|
register_facet(ForemanNetbox::NetboxFacet, :netbox_facet) do
|
@@ -42,6 +34,31 @@ module ForemanNetbox
|
|
42
34
|
onlyif: proc { |host| host.netbox_facet.synchronized_at }
|
43
35
|
end
|
44
36
|
|
37
|
+
settings do
|
38
|
+
category(:netbox, N_('Netbox')) do
|
39
|
+
setting 'netbox_url',
|
40
|
+
type: :string,
|
41
|
+
default: '-',
|
42
|
+
full_name: N_('Netbox URL'),
|
43
|
+
description: N_('URL where Netbox is reachable')
|
44
|
+
setting 'netbox_api_token',
|
45
|
+
type: :string,
|
46
|
+
default: '-',
|
47
|
+
full_name: N_('Netbox API token'),
|
48
|
+
description: N_('API token to Netbox')
|
49
|
+
setting 'netbox_orchestration_enabled',
|
50
|
+
type: :boolean,
|
51
|
+
default: false,
|
52
|
+
full_name: N_('Netbox Orchestration'),
|
53
|
+
description: N_('Enable Netbox Orchestration')
|
54
|
+
setting 'netbox_skip_site_update',
|
55
|
+
type: :boolean,
|
56
|
+
default: false,
|
57
|
+
full_name: N_('Skip Site Update'),
|
58
|
+
description: N_('Skip updating Site attribute for Devices')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
45
62
|
logger :import, enabled: true
|
46
63
|
end
|
47
64
|
end
|
@@ -54,8 +71,8 @@ module ForemanNetbox
|
|
54
71
|
::Usergroup.include(ForemanNetbox::UserUsergroupCommonExtensions)
|
55
72
|
|
56
73
|
NetboxClientRuby.configure do |config|
|
57
|
-
config.netbox.api_base_url = Setting
|
58
|
-
config.netbox.auth.token = Setting
|
74
|
+
config.netbox.api_base_url = Setting['netbox_url']
|
75
|
+
config.netbox.auth.token = Setting['netbox_api_token']
|
59
76
|
end
|
60
77
|
rescue StandardError => e
|
61
78
|
Rails.logger.warn "ForemanNetbox: skipping engine hook (#{e})\n#{e.backtrace.join("\n")}"
|
@@ -61,7 +61,7 @@ class SyncRhelVirtualHostTest < ActiveSupport::TestCase
|
|
61
61
|
|
62
62
|
assert_equal host.name, subject.virtual_machine.name
|
63
63
|
assert_equal host.owner.netbox_tenant_name, subject.virtual_machine.tenant.name
|
64
|
-
assert_equal
|
64
|
+
assert_equal host.compute_object.cpus.to_f, subject.virtual_machine.vcpus
|
65
65
|
assert_equal host.compute_object.memory_mb, subject.virtual_machine.memory
|
66
66
|
assert_equal host.compute_object.volumes.first.size_gb, subject.virtual_machine.disk
|
67
67
|
assert_equal host.compute_object.cluster, subject.virtual_machine.cluster.name
|
@@ -56,7 +56,7 @@ class SyncHostOrganizerTest < ActiveSupport::TestCase
|
|
56
56
|
end
|
57
57
|
|
58
58
|
test 'save synchronization status when it succeeds' do
|
59
|
-
stub_request(:patch, "#{Setting
|
59
|
+
stub_request(:patch, "#{Setting[:netbox_url]}/api/dcim/devices/1.json").to_return(
|
60
60
|
status: 200, headers: { 'Content-Type': 'application/json' },
|
61
61
|
body: { id: 1 }.to_json
|
62
62
|
)
|
@@ -64,12 +64,12 @@ class SyncHostOrganizerTest < ActiveSupport::TestCase
|
|
64
64
|
host.reload
|
65
65
|
|
66
66
|
assert_not_nil host.netbox_facet.synchronized_at
|
67
|
-
assert_equal "#{Setting
|
67
|
+
assert_equal "#{Setting[:netbox_url]}/dcim/devices/1", host.netbox_facet.url
|
68
68
|
assert_nil host.netbox_facet.synchronization_error
|
69
69
|
end
|
70
70
|
|
71
71
|
test 'save synchronization status when it fails' do
|
72
|
-
stub_request(:patch, "#{Setting
|
72
|
+
stub_request(:patch, "#{Setting[:netbox_url]}/api/dcim/devices/1.json").to_return(
|
73
73
|
status: 500, headers: { 'Content-Type': 'application/json' }
|
74
74
|
)
|
75
75
|
subject
|
@@ -83,7 +83,7 @@ class SyncHostOrganizerTest < ActiveSupport::TestCase
|
|
83
83
|
private
|
84
84
|
|
85
85
|
def stub_get_netbox_request(path, results:)
|
86
|
-
stub_request(:get, "#{Setting
|
86
|
+
stub_request(:get, "#{Setting[:netbox_url]}/api/#{path}").to_return(
|
87
87
|
status: 200, headers: { 'Content-Type': 'application/json' },
|
88
88
|
body: {
|
89
89
|
count: 1,
|
@@ -199,4 +199,34 @@ class UpdateDeviceTest < ActiveSupport::TestCase
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
end
|
202
|
+
|
203
|
+
context 'when netbox_skip_site_update setting is enabled' do
|
204
|
+
setup do
|
205
|
+
Setting[:netbox_skip_site_update] = true
|
206
|
+
end
|
207
|
+
|
208
|
+
let(:new_site_id) { device_data.dig(:site, :id) + 1 }
|
209
|
+
let(:site) { OpenStruct.new(id: new_site_id) }
|
210
|
+
let(:device_tags) do
|
211
|
+
default_tags.map { |t| { 'id' => t.id, 'name' => t.name, 'slug' => t.slug } }
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'does not update site of device' do
|
215
|
+
device_tags.each do |t|
|
216
|
+
stub_request(:get, "#{Setting[:netbox_url]}/api/extras/tags/#{t['id']}.json")
|
217
|
+
.to_return(
|
218
|
+
status: 200, headers: { 'Content-Type': 'application/json' },
|
219
|
+
body: {
|
220
|
+
id: t['id'],
|
221
|
+
name: t['name'],
|
222
|
+
slug: t['slug']
|
223
|
+
}.to_json
|
224
|
+
)
|
225
|
+
end
|
226
|
+
stub_patch = stub_request(:patch, "#{Setting[:netbox_url]}/api/dcim/devices/#{device.id}.json")
|
227
|
+
|
228
|
+
assert_not_equal device.site.id, new_site_id
|
229
|
+
assert_not_requested(stub_patch)
|
230
|
+
end
|
231
|
+
end
|
202
232
|
end
|
data/test/test_plugin_helper.rb
CHANGED
@@ -10,15 +10,10 @@ FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories
|
|
10
10
|
FactoryBot.reload
|
11
11
|
|
12
12
|
def setup_default_netbox_settings(netbox_url: 'https://netbox.example.com', netbox_api_token: 'api_key')
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
else
|
18
|
-
Setting[:netbox_url] = netbox_url
|
19
|
-
Setting[:netbox_api_token] = netbox_api_token
|
20
|
-
Setting[:netbox_orchestration_enabled] = true
|
21
|
-
end
|
13
|
+
Setting[:netbox_url] = netbox_url
|
14
|
+
Setting[:netbox_api_token] = netbox_api_token
|
15
|
+
Setting[:netbox_orchestration_enabled] = true
|
16
|
+
Setting[:netbox_skip_site_update] = false
|
22
17
|
end
|
23
18
|
|
24
19
|
def setup_netbox_integration_test
|
metadata
CHANGED
@@ -1,99 +1,129 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_netbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dmTECH GmbH
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-configurable
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.13'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
22
|
+
version: '0.17'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
29
|
+
version: '0.13'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.17'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: dry-container
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.7'
|
40
|
+
- - "<"
|
32
41
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
42
|
+
version: '0.12'
|
34
43
|
type: :runtime
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
|
-
- - "
|
47
|
+
- - ">="
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.7
|
49
|
+
version: '0.7'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0.12'
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: dry-core
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
|
-
- - "
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.6'
|
60
|
+
- - "<"
|
46
61
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
62
|
+
version: '0.9'
|
48
63
|
type: :runtime
|
49
64
|
prerelease: false
|
50
65
|
version_requirements: !ruby/object:Gem::Requirement
|
51
66
|
requirements:
|
52
|
-
- - "
|
67
|
+
- - ">="
|
53
68
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.6
|
69
|
+
version: '0.6'
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0.9'
|
55
73
|
- !ruby/object:Gem::Dependency
|
56
74
|
name: dry-inflector
|
57
75
|
requirement: !ruby/object:Gem::Requirement
|
58
76
|
requirements:
|
59
77
|
- - '='
|
60
78
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
79
|
+
version: 0.3.0
|
62
80
|
type: :runtime
|
63
81
|
prerelease: false
|
64
82
|
version_requirements: !ruby/object:Gem::Requirement
|
65
83
|
requirements:
|
66
84
|
- - '='
|
67
85
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
86
|
+
version: 0.3.0
|
69
87
|
- !ruby/object:Gem::Dependency
|
70
88
|
name: dry-schema
|
71
89
|
requirement: !ruby/object:Gem::Requirement
|
72
90
|
requirements:
|
73
|
-
- - "
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.6'
|
94
|
+
- - "<"
|
74
95
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
96
|
+
version: '1.12'
|
76
97
|
type: :runtime
|
77
98
|
prerelease: false
|
78
99
|
version_requirements: !ruby/object:Gem::Requirement
|
79
100
|
requirements:
|
80
|
-
- - "
|
101
|
+
- - ">="
|
81
102
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.6
|
103
|
+
version: '1.6'
|
104
|
+
- - "<"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '1.12'
|
83
107
|
- !ruby/object:Gem::Dependency
|
84
108
|
name: dry-validation
|
85
109
|
requirement: !ruby/object:Gem::Requirement
|
86
110
|
requirements:
|
87
|
-
- - "
|
111
|
+
- - ">="
|
88
112
|
- !ruby/object:Gem::Version
|
89
113
|
version: 1.5.2
|
114
|
+
- - "<"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 1.9.0
|
90
117
|
type: :runtime
|
91
118
|
prerelease: false
|
92
119
|
version_requirements: !ruby/object:Gem::Requirement
|
93
120
|
requirements:
|
94
|
-
- - "
|
121
|
+
- - ">="
|
95
122
|
- !ruby/object:Gem::Version
|
96
123
|
version: 1.5.2
|
124
|
+
- - "<"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 1.9.0
|
97
127
|
- !ruby/object:Gem::Dependency
|
98
128
|
name: interactor
|
99
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,16 +142,22 @@ dependencies:
|
|
112
142
|
name: netbox-client-ruby
|
113
143
|
requirement: !ruby/object:Gem::Requirement
|
114
144
|
requirements:
|
115
|
-
- - "
|
145
|
+
- - ">="
|
116
146
|
- !ruby/object:Gem::Version
|
117
147
|
version: 0.5.5
|
148
|
+
- - "<"
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: 0.8.0
|
118
151
|
type: :runtime
|
119
152
|
prerelease: false
|
120
153
|
version_requirements: !ruby/object:Gem::Requirement
|
121
154
|
requirements:
|
122
|
-
- - "
|
155
|
+
- - ">="
|
123
156
|
- !ruby/object:Gem::Version
|
124
157
|
version: 0.5.5
|
158
|
+
- - "<"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 0.8.0
|
125
161
|
- !ruby/object:Gem::Dependency
|
126
162
|
name: rdoc
|
127
163
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +178,14 @@ dependencies:
|
|
142
178
|
requirements:
|
143
179
|
- - "~>"
|
144
180
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
181
|
+
version: 1.45.1
|
146
182
|
type: :development
|
147
183
|
prerelease: false
|
148
184
|
version_requirements: !ruby/object:Gem::Requirement
|
149
185
|
requirements:
|
150
186
|
- - "~>"
|
151
187
|
- !ruby/object:Gem::Version
|
152
|
-
version: 1.
|
188
|
+
version: 1.45.1
|
153
189
|
- !ruby/object:Gem::Dependency
|
154
190
|
name: rubocop-rails
|
155
191
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,7 +290,6 @@ files:
|
|
254
290
|
- app/models/concerns/foreman_netbox/user_usergroup_common_extensions.rb
|
255
291
|
- app/models/foreman_netbox/netbox_facet.rb
|
256
292
|
- app/models/orchestration/netbox.rb
|
257
|
-
- app/models/setting/netbox.rb
|
258
293
|
- app/services/foreman_netbox/cached_netbox_parameters.rb
|
259
294
|
- app/services/foreman_netbox/netbox_parameters.rb
|
260
295
|
- app/services/foreman_netbox/netbox_parameters_comparator.rb
|
@@ -263,6 +298,7 @@ files:
|
|
263
298
|
- db/migrate/20200527135812_create_netbox_facet.rb
|
264
299
|
- db/migrate/20200604141933_add_sync_info_to_netbox_facet.rb
|
265
300
|
- db/migrate/20200708093607_add_raw_data_to_netbox_facet.rb
|
301
|
+
- db/migrate/20230303095650_fix_netbox_settings_category_to_dsl.rb
|
266
302
|
- lib/foreman_netbox.rb
|
267
303
|
- lib/foreman_netbox/engine.rb
|
268
304
|
- lib/foreman_netbox/version.rb
|
@@ -348,70 +384,70 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
348
384
|
- !ruby/object:Gem::Version
|
349
385
|
version: '0'
|
350
386
|
requirements: []
|
351
|
-
rubygems_version: 3.
|
387
|
+
rubygems_version: 3.1.6
|
352
388
|
signing_key:
|
353
389
|
specification_version: 4
|
354
390
|
summary: Adds integration with NetBox
|
355
391
|
test_files:
|
392
|
+
- test/integration/foreman_netbox/sync_rhel_physical_host_test.rb
|
393
|
+
- test/integration/foreman_netbox/sync_rhel_virtual_host_test.rb
|
394
|
+
- test/integration/foreman_netbox/sync_k8s_physical_host_test.rb
|
395
|
+
- test/models/host/managed_test.rb
|
396
|
+
- test/models/foreman_netbox/location_test.rb
|
397
|
+
- test/models/foreman_netbox/nics/base_test.rb
|
398
|
+
- test/models/foreman_netbox/usergroup_test.rb
|
399
|
+
- test/models/foreman_netbox/netbox_facet_test.rb
|
356
400
|
- test/factories/host.rb
|
357
401
|
- test/factories/netbox_facet.rb
|
358
|
-
- test/fixtures/
|
402
|
+
- test/fixtures/netbox_virtual_machine_raw_data.json
|
403
|
+
- test/fixtures/netbox_device_raw_data.json
|
359
404
|
- test/fixtures/facts/rhel_physical_host.json
|
360
405
|
- test/fixtures/facts/rhel_virtual_host.json
|
361
|
-
- test/fixtures/
|
362
|
-
- test/
|
363
|
-
- test/
|
364
|
-
- test/
|
365
|
-
- test/
|
406
|
+
- test/fixtures/facts/k8s_physical_host.json
|
407
|
+
- test/test_plugin_helper.rb
|
408
|
+
- test/jobs/foreman_netbox/sync_host_job_test.rb
|
409
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/find_test.rb
|
410
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/update_test.rb
|
411
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/create_test.rb
|
412
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/sync_cluster_type/find_test.rb
|
413
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/sync_cluster_type/create_test.rb
|
414
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/find_test.rb
|
415
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/update_test.rb
|
416
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/delete_test.rb
|
417
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/find_test.rb
|
418
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/update_test.rb
|
419
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/create_test.rb
|
420
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/delete_test.rb
|
421
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/find_test.rb
|
422
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/update_test.rb
|
423
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/create_test.rb
|
424
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/create_test.rb
|
425
|
+
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/save_netbox_url_test.rb
|
426
|
+
- test/interactors/foreman_netbox/sync_host/sync_tenant/find_test.rb
|
427
|
+
- test/interactors/foreman_netbox/sync_host/sync_tenant/update_test.rb
|
428
|
+
- test/interactors/foreman_netbox/sync_host/sync_tenant/create_test.rb
|
366
429
|
- test/interactors/foreman_netbox/sync_host/organizer_test.rb
|
367
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
430
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_site/find_test.rb
|
431
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_site/update_test.rb
|
432
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_site/create_test.rb
|
368
433
|
- test/interactors/foreman_netbox/sync_host/sync_device/find_test.rb
|
369
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
370
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_role/create_test.rb
|
371
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_role/find_test.rb
|
372
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/create_test.rb
|
434
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/update_test.rb
|
373
435
|
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/find_test.rb
|
374
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/sync_manufacturer/create_test.rb
|
375
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/sync_manufacturer/find_test.rb
|
376
436
|
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/update_test.rb
|
377
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
378
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
379
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
380
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/create_test.rb
|
437
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/sync_manufacturer/find_test.rb
|
438
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/sync_manufacturer/create_test.rb
|
439
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/create_test.rb
|
381
440
|
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/delete_test.rb
|
382
441
|
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/find_test.rb
|
383
442
|
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/update_test.rb
|
443
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/create_test.rb
|
444
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/delete_test.rb
|
445
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/find_test.rb
|
384
446
|
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/update_test.rb
|
385
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
386
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
387
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
388
|
-
- test/interactors/foreman_netbox/sync_host/sync_device/
|
389
|
-
- test/interactors/foreman_netbox/sync_host/
|
390
|
-
- test/interactors/foreman_netbox/sync_host/sync_tenant/find_test.rb
|
391
|
-
- test/interactors/foreman_netbox/sync_host/sync_tenant/update_test.rb
|
392
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/create_test.rb
|
393
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/find_test.rb
|
394
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/save_netbox_url_test.rb
|
395
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/create_test.rb
|
396
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/find_test.rb
|
397
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/sync_cluster_type/create_test.rb
|
398
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/sync_cluster_type/find_test.rb
|
399
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/update_test.rb
|
400
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/create_test.rb
|
401
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/delete_test.rb
|
402
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/find_test.rb
|
403
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/create_test.rb
|
404
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/delete_test.rb
|
405
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/find_test.rb
|
406
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/update_test.rb
|
407
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/update_test.rb
|
408
|
-
- test/interactors/foreman_netbox/sync_host/sync_virtual_machine/update_test.rb
|
409
|
-
- test/jobs/foreman_netbox/sync_host_job_test.rb
|
410
|
-
- test/models/foreman_netbox/location_test.rb
|
411
|
-
- test/models/foreman_netbox/netbox_facet_test.rb
|
412
|
-
- test/models/foreman_netbox/nics/base_test.rb
|
413
|
-
- test/models/foreman_netbox/usergroup_test.rb
|
414
|
-
- test/models/host/managed_test.rb
|
447
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/create_test.rb
|
448
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/create_test.rb
|
449
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_role/find_test.rb
|
450
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/sync_device_role/create_test.rb
|
451
|
+
- test/interactors/foreman_netbox/sync_host/sync_device/save_netbox_url_test.rb
|
415
452
|
- test/services/foreman_netbox/netbox_attributes_test.rb
|
416
453
|
- test/services/foreman_netbox/netbox_parameters_comparator_test.rb
|
417
|
-
- test/test_plugin_helper.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class Setting
|
4
|
-
class Netbox < ::Setting
|
5
|
-
BLANK_ATTRS << 'netbox_url'
|
6
|
-
BLANK_ATTRS << 'netbox_api_token'
|
7
|
-
URI_BLANK_ATTRS << 'netbox_url'
|
8
|
-
|
9
|
-
def self.default_settings
|
10
|
-
[
|
11
|
-
set('netbox_url', N_('URL where Netbox is reachable'), nil, N_('Netbox URL')),
|
12
|
-
set('netbox_api_token', N_('API token to Netbox'), nil, N_('Netbox API token'), nil, encrypted: true),
|
13
|
-
set('netbox_orchestration_enabled', N_('Enable Netbox Orchestration'), false, N_('Netbox Orchestration'))
|
14
|
-
]
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.load_defaults
|
18
|
-
# Check the table exists
|
19
|
-
return unless super
|
20
|
-
|
21
|
-
transaction do
|
22
|
-
default_settings.each { |s| create! s.update(category: 'Setting::Netbox') }
|
23
|
-
end
|
24
|
-
|
25
|
-
true
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.humanized_category
|
29
|
-
N_('Netbox')
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|