foreman_netbox 1.0.2 → 1.1.0
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 +4 -4
- data/README.md +7 -0
- data/app/interactors/foreman_netbox/concerns/assign_tags.rb +21 -0
- data/app/interactors/foreman_netbox/sync_host/sync_device/create.rb +3 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/organizer.rb +1 -0
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/create.rb +2 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/update.rb +2 -2
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/create.rb +3 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/create.rb +6 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/delete.rb +1 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/update.rb +2 -14
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/update.rb +2 -3
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_site/create.rb +4 -1
- data/app/interactors/foreman_netbox/sync_host/sync_device/sync_site/update.rb +3 -9
- data/app/interactors/foreman_netbox/sync_host/sync_device/update.rb +3 -7
- data/app/interactors/foreman_netbox/sync_host/sync_tags/create.rb +30 -0
- data/app/interactors/foreman_netbox/sync_host/sync_tags/find.rb +26 -0
- data/app/interactors/foreman_netbox/sync_host/sync_tags/organizer.rb +22 -0
- data/app/interactors/foreman_netbox/sync_host/sync_tenant/create.rb +4 -1
- data/app/interactors/foreman_netbox/sync_host/sync_tenant/update.rb +3 -9
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/create.rb +3 -1
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/organizer.rb +1 -0
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/create.rb +3 -1
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/update.rb +3 -9
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/create.rb +6 -1
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/create.rb +7 -2
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/delete.rb +1 -1
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/update.rb +2 -14
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/update.rb +2 -3
- data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/update.rb +3 -7
- data/app/models/concerns/foreman_netbox/user_usergroup_common_extensions.rb +1 -1
- data/app/models/orchestration/netbox.rb +3 -0
- data/app/services/foreman_netbox/cached_netbox_parameters.rb +8 -8
- data/app/services/foreman_netbox/netbox_parameters.rb +8 -17
- data/app/services/foreman_netbox/netbox_parameters_comparator.rb +2 -2
- data/lib/foreman_netbox/version.rb +1 -1
- data/test/integration/foreman_netbox/sync_k8s_physical_host_test.rb +12 -8
- data/test/integration/foreman_netbox/sync_rhel_physical_host_test.rb +12 -8
- data/test/integration/foreman_netbox/sync_rhel_virtual_host_test.rb +12 -8
- data/test/interactors/foreman_netbox/sync_host/organizer_test.rb +18 -2
- data/test/interactors/foreman_netbox/sync_host/sync_device/create_test.rb +5 -3
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/create_test.rb +4 -3
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_device_type/update_test.rb +8 -3
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/create_test.rb +8 -4
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/create_test.rb +10 -5
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/delete_test.rb +2 -2
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/sync_ip_addresses/update_test.rb +5 -3
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_interfaces/update_test.rb +7 -5
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_site/create_test.rb +2 -2
- data/test/interactors/foreman_netbox/sync_host/sync_device/sync_site/update_test.rb +4 -3
- data/test/interactors/foreman_netbox/sync_host/sync_device/update_test.rb +19 -5
- data/test/interactors/foreman_netbox/sync_host/sync_tenant/create_test.rb +2 -2
- data/test/interactors/foreman_netbox/sync_host/sync_tenant/update_test.rb +5 -3
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/create_test.rb +4 -3
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/create_test.rb +7 -3
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_cluster/update_test.rb +5 -3
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/create_test.rb +5 -4
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/create_test.rb +9 -7
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/delete_test.rb +2 -2
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/sync_ip_addresses/update_test.rb +13 -4
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/update_test.rb +9 -4
- data/test/interactors/foreman_netbox/sync_host/sync_virtual_machine/update_test.rb +7 -4
- data/test/models/foreman_netbox/usergroup_test.rb +4 -4
- data/test/services/foreman_netbox/netbox_attributes_test.rb +10 -19
- data/test/services/foreman_netbox/netbox_parameters_comparator_test.rb +6 -16
- data/test/test_plugin_helper.rb +15 -3
- metadata +127 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9df549aa83fb9c91e18bba3c2690cb6f9c14977ca2364198b12b20cc01140069
|
4
|
+
data.tar.gz: 0adf0c06724a964efa56d7ca8b294ca73882c351a50c8063a1906f4ad3a429ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcd1893a719badc47fe8d083a46fa5ee403bc9f1c31a0963d05624c34f00dad74a8320cdaaf0917e6fc484c899f62fe56db277642e62ba240ef471d1214bd67c
|
7
|
+
data.tar.gz: 1e3e688b369849e00c54440e4de52507bdefd30109d4688fc478b22a1ceaa751593859be6fbc8480ce60a6ee0050f0ab783dbfc721df428d93aa3bfd44feb7de
|
data/README.md
CHANGED
@@ -4,6 +4,13 @@
|
|
4
4
|
|
5
5
|
This is a plugin for Foreman that introduces integration with [NetBox](https://netbox.readthedocs.io)
|
6
6
|
|
7
|
+
## Compatibility
|
8
|
+
|
9
|
+
| Netbox Version | Plugin Version |
|
10
|
+
| -------------- | -------------- |
|
11
|
+
| 2.8 | 1.0 |
|
12
|
+
| 2.11 | 1.1 |
|
13
|
+
|
7
14
|
## Installation
|
8
15
|
|
9
16
|
See [How_to_Install_a_Plugin](https://theforeman.org/manuals/2.3/index.html#6.1InstallaPlugin)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ForemanNetbox
|
4
|
+
module Concerns
|
5
|
+
module AssignTags
|
6
|
+
delegate :tags, to: :context
|
7
|
+
|
8
|
+
def assign_tags_to(object)
|
9
|
+
current_tag_ids = object.tags.pluck('id')
|
10
|
+
|
11
|
+
return if (default_tag_ids - current_tag_ids).empty?
|
12
|
+
|
13
|
+
object.tags = current_tag_ids | default_tag_ids
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_tag_ids
|
17
|
+
tags.map(&:id)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -5,6 +5,7 @@ module ForemanNetbox
|
|
5
5
|
module SyncDevice
|
6
6
|
class Create
|
7
7
|
include ::Interactor
|
8
|
+
include ForemanNetbox::Concerns::AssignTags
|
8
9
|
|
9
10
|
around do |interactor|
|
10
11
|
interactor.call unless context.device
|
@@ -27,7 +28,8 @@ module ForemanNetbox
|
|
27
28
|
device_type: device_type.id,
|
28
29
|
device_role: device_role.id,
|
29
30
|
site: site.id,
|
30
|
-
tenant: tenant&.id
|
31
|
+
tenant: tenant&.id,
|
32
|
+
tags: default_tag_ids
|
31
33
|
).compact
|
32
34
|
end
|
33
35
|
end
|
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncDeviceType
|
7
7
|
class Create
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
around do |interactor|
|
11
12
|
interactor.call unless context.device_type
|
@@ -24,7 +25,7 @@ module ForemanNetbox
|
|
24
25
|
|
25
26
|
def params
|
26
27
|
netbox_params.fetch(:device_type)
|
27
|
-
.merge(manufacturer: manufacturer.id)
|
28
|
+
.merge(manufacturer: manufacturer.id, tags: default_tag_ids)
|
28
29
|
.compact
|
29
30
|
end
|
30
31
|
end
|
@@ -6,14 +6,14 @@ module ForemanNetbox
|
|
6
6
|
module SyncDeviceType
|
7
7
|
class Update
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
around do |interactor|
|
11
12
|
interactor.call if context.device_type
|
12
13
|
end
|
13
14
|
|
14
15
|
def call
|
15
|
-
|
16
|
-
device_type.tags = (device_type.tags | new_tags) if new_tags.any?
|
16
|
+
assign_tags_to(device_type)
|
17
17
|
|
18
18
|
device_type.save
|
19
19
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncInterfaces
|
7
7
|
class Create
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
after do
|
11
12
|
context.interfaces.reload
|
@@ -20,7 +21,8 @@ module ForemanNetbox
|
|
20
21
|
new_interface.except(:type)
|
21
22
|
.merge(
|
22
23
|
type: new_interface.dig(:type, :value),
|
23
|
-
device: device.id
|
24
|
+
device: device.id,
|
25
|
+
tags: default_tag_ids
|
24
26
|
)
|
25
27
|
).save
|
26
28
|
end
|
@@ -7,6 +7,7 @@ module ForemanNetbox
|
|
7
7
|
module SyncIpAddresses
|
8
8
|
class Create
|
9
9
|
include ::Interactor
|
10
|
+
include ForemanNetbox::Concerns::AssignTags
|
10
11
|
|
11
12
|
def call
|
12
13
|
netbox_params.fetch(:ip_addresses, []).map do |ip_address|
|
@@ -21,7 +22,11 @@ module ForemanNetbox
|
|
21
22
|
.zero?
|
22
23
|
|
23
24
|
ForemanNetbox::API.client::IPAM::IpAddress.new(
|
24
|
-
ip_address.slice(:address
|
25
|
+
ip_address.slice(:address)
|
26
|
+
.merge(
|
27
|
+
assigned_object_type: 'dcim.interface', assigned_object_id: interface_id,
|
28
|
+
tags: default_tag_ids
|
29
|
+
)
|
25
30
|
).save
|
26
31
|
end
|
27
32
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -25,7 +25,7 @@ module ForemanNetbox
|
|
25
25
|
.map { |i| i.fetch(:address) }
|
26
26
|
|
27
27
|
context.ip_addresses
|
28
|
-
.select { |ip| ip['interface'
|
28
|
+
.select { |ip| ip['assigned_object_type'] == 'dcim.interface' && ip['assigned_object_id'] == netbox_interface.id }
|
29
29
|
.reject { |ip| host_interface_ips.include?(ip['address']) }
|
30
30
|
.each(&:delete)
|
31
31
|
end
|
@@ -7,12 +7,11 @@ module ForemanNetbox
|
|
7
7
|
module SyncIpAddresses
|
8
8
|
class Update
|
9
9
|
include ::Interactor
|
10
|
+
include ForemanNetbox::Concerns::AssignTags
|
10
11
|
|
11
12
|
def call
|
12
13
|
context.ip_addresses.each do |ip_address|
|
13
|
-
|
14
|
-
|
15
|
-
ip_address.tags = (ip_address.tags | new_tags) if new_tags.any?
|
14
|
+
assign_tags_to(ip_address)
|
16
15
|
|
17
16
|
ip_address.save
|
18
17
|
end
|
@@ -20,17 +19,6 @@ module ForemanNetbox
|
|
20
19
|
::Foreman::Logging.logger('foreman_netbox/import').error("#{self.class} error #{e}: #{e.backtrace}")
|
21
20
|
context.fail!(error: "#{self.class}: #{e}")
|
22
21
|
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
delegate :netbox_params, to: :context
|
27
|
-
|
28
|
-
def tags_map
|
29
|
-
netbox_params.fetch(:ip_addresses, [])
|
30
|
-
.each_with_object({}) do |item, memo|
|
31
|
-
memo[item[:address]] = item.fetch(:tags, [])
|
32
|
-
end
|
33
|
-
end
|
34
22
|
end
|
35
23
|
end
|
36
24
|
end
|
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncInterfaces
|
7
7
|
class Update
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
def call
|
11
12
|
context.interfaces.each { |netbox_interface| update(netbox_interface) }
|
@@ -22,9 +23,7 @@ module ForemanNetbox
|
|
22
23
|
return unless new_params
|
23
24
|
|
24
25
|
netbox_interface.mac_address = new_params[:mac_address] if netbox_interface.mac_address != new_params[:mac_address]
|
25
|
-
|
26
|
-
new_tags = new_params.fetch(:tags, []) - netbox_interface.tags
|
27
|
-
netbox_interface.tags = (netbox_interface.tags | new_tags) if new_tags.any?
|
26
|
+
assign_tags_to(netbox_interface)
|
28
27
|
|
29
28
|
netbox_interface.save
|
30
29
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncSite
|
7
7
|
class Create
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
around do |interactor|
|
11
12
|
interactor.call unless context.site
|
@@ -23,7 +24,9 @@ module ForemanNetbox
|
|
23
24
|
delegate :netbox_params, to: :context
|
24
25
|
|
25
26
|
def params
|
26
|
-
netbox_params.fetch(:site)
|
27
|
+
netbox_params.fetch(:site)
|
28
|
+
.merge(tags: default_tag_ids)
|
29
|
+
.compact
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
@@ -6,14 +6,14 @@ module ForemanNetbox
|
|
6
6
|
module SyncSite
|
7
7
|
class Update
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
around do |interactor|
|
11
12
|
interactor.call if context.site
|
12
13
|
end
|
13
14
|
|
14
15
|
def call
|
15
|
-
|
16
|
-
site.tags = (site.tags | new_tags) if new_tags.any?
|
16
|
+
assign_tags_to(site)
|
17
17
|
|
18
18
|
site.save
|
19
19
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -21,13 +21,7 @@ module ForemanNetbox
|
|
21
21
|
context.fail!(error: "#{self.class}: #{e}")
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
delegate :netbox_params, :site, to: :context
|
27
|
-
|
28
|
-
def new_site_params
|
29
|
-
netbox_params.fetch(:site, {})
|
30
|
-
end
|
24
|
+
delegate :site, to: :context
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|
@@ -6,8 +6,9 @@ module ForemanNetbox
|
|
6
6
|
class Update
|
7
7
|
include ::Interactor
|
8
8
|
include ForemanNetbox::Concerns::PrimaryIps
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
|
-
ATTRIBUTES = %i[name device_role device_type primary_ip4 primary_ip6 site tenant serial
|
11
|
+
ATTRIBUTES = %i[name device_role device_type primary_ip4 primary_ip6 site tenant serial].freeze
|
11
12
|
|
12
13
|
around do |interactor|
|
13
14
|
interactor.call if context.device
|
@@ -19,6 +20,7 @@ module ForemanNetbox
|
|
19
20
|
|
20
21
|
def call
|
21
22
|
assign_new_attributes
|
23
|
+
assign_tags_to(device)
|
22
24
|
|
23
25
|
device.save
|
24
26
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -73,12 +75,6 @@ module ForemanNetbox
|
|
73
75
|
|
74
76
|
device.serial = new_serial
|
75
77
|
end
|
76
|
-
|
77
|
-
def assign_tags
|
78
|
-
new_tags = new_device_params.fetch(:tags, []) - device.tags
|
79
|
-
|
80
|
-
device.tags = (device.tags | new_tags) if new_tags.any?
|
81
|
-
end
|
82
78
|
end
|
83
79
|
end
|
84
80
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ForemanNetbox
|
4
|
+
module SyncHost
|
5
|
+
module SyncTags
|
6
|
+
class Create
|
7
|
+
include ::Interactor
|
8
|
+
|
9
|
+
def call
|
10
|
+
context.tags.push(*new_tags)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def new_tags
|
16
|
+
SyncTags::Organizer::DEFAULT_TAGS
|
17
|
+
.reject { |params| existing_slugs.include?(params[:slug]) }
|
18
|
+
.map { |params| ForemanNetbox::API.client::Extras::Tag.new(params).save }
|
19
|
+
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
20
|
+
::Foreman::Logging.logger('foreman_netbox/import').error("#{self.class} error #{e}: #{e.backtrace}")
|
21
|
+
context.fail!(error: "#{self.class}: #{e}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def existing_slugs
|
25
|
+
@existing_slugs ||= context.tags.pluck(:slug)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ForemanNetbox
|
4
|
+
module SyncHost
|
5
|
+
module SyncTags
|
6
|
+
class Find
|
7
|
+
include ::Interactor
|
8
|
+
|
9
|
+
def call
|
10
|
+
context.tags = slugs.map do |slug|
|
11
|
+
ForemanNetbox::API.client.extras.tags.find_by(slug: slug)
|
12
|
+
end.compact
|
13
|
+
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
14
|
+
::Foreman::Logging.logger('foreman_netbox/import').error("#{self.class} error #{e}: #{e.backtrace}")
|
15
|
+
context.fail!(error: "#{self.class}: #{e}")
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def slugs
|
21
|
+
SyncTags::Organizer::DEFAULT_TAGS.pluck(:slug)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ForemanNetbox
|
4
|
+
module SyncHost
|
5
|
+
module SyncTags
|
6
|
+
class Organizer
|
7
|
+
include ::Interactor::Organizer
|
8
|
+
|
9
|
+
DEFAULT_TAGS = [
|
10
|
+
{ name: 'foreman', slug: 'foreman' }
|
11
|
+
].freeze
|
12
|
+
|
13
|
+
after do
|
14
|
+
context.raw_data[:tags] = context.tags.map(&:raw_data!)
|
15
|
+
end
|
16
|
+
|
17
|
+
organize SyncTags::Find,
|
18
|
+
SyncTags::Create
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -5,6 +5,7 @@ module ForemanNetbox
|
|
5
5
|
module SyncTenant
|
6
6
|
class Create
|
7
7
|
include ::Interactor
|
8
|
+
include ForemanNetbox::Concerns::AssignTags
|
8
9
|
|
9
10
|
around do |interactor|
|
10
11
|
interactor.call unless context.tenant
|
@@ -22,7 +23,9 @@ module ForemanNetbox
|
|
22
23
|
delegate :netbox_params, to: :context
|
23
24
|
|
24
25
|
def params
|
25
|
-
netbox_params.fetch(:tenant)
|
26
|
+
netbox_params.fetch(:tenant)
|
27
|
+
.merge(tags: default_tag_ids)
|
28
|
+
.compact
|
26
29
|
end
|
27
30
|
end
|
28
31
|
end
|
@@ -5,14 +5,14 @@ module ForemanNetbox
|
|
5
5
|
module SyncTenant
|
6
6
|
class Update
|
7
7
|
include ::Interactor
|
8
|
+
include ForemanNetbox::Concerns::AssignTags
|
8
9
|
|
9
10
|
around do |interactor|
|
10
11
|
interactor.call if context.tenant
|
11
12
|
end
|
12
13
|
|
13
14
|
def call
|
14
|
-
|
15
|
-
tenant.tags = (tenant.tags | new_tags) if new_tags.any?
|
15
|
+
assign_tags_to(tenant)
|
16
16
|
|
17
17
|
tenant.save
|
18
18
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -20,13 +20,7 @@ module ForemanNetbox
|
|
20
20
|
context.fail!(error: "#{self.class}: #{e}")
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
delegate :netbox_params, :tenant, to: :context
|
26
|
-
|
27
|
-
def new_tenant_params
|
28
|
-
netbox_params.fetch(:tenant, {})
|
29
|
-
end
|
23
|
+
delegate :tenant, to: :context
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -5,6 +5,7 @@ module ForemanNetbox
|
|
5
5
|
module SyncVirtualMachine
|
6
6
|
class Create
|
7
7
|
include ::Interactor
|
8
|
+
include ForemanNetbox::Concerns::AssignTags
|
8
9
|
|
9
10
|
around do |interactor|
|
10
11
|
interactor.call unless context.virtual_machine
|
@@ -25,7 +26,8 @@ module ForemanNetbox
|
|
25
26
|
def params
|
26
27
|
netbox_params.fetch(:virtual_machine).merge(
|
27
28
|
cluster: cluster.id,
|
28
|
-
tenant: tenant&.id
|
29
|
+
tenant: tenant&.id,
|
30
|
+
tags: default_tag_ids
|
29
31
|
).compact
|
30
32
|
end
|
31
33
|
end
|
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncCluster
|
7
7
|
class Create
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
around do |interactor|
|
11
12
|
interactor.call unless context.cluster
|
@@ -25,7 +26,8 @@ module ForemanNetbox
|
|
25
26
|
|
26
27
|
def params
|
27
28
|
netbox_params.fetch(:cluster).merge(
|
28
|
-
type: cluster_type&.id
|
29
|
+
type: cluster_type&.id,
|
30
|
+
tags: default_tag_ids
|
29
31
|
).compact
|
30
32
|
end
|
31
33
|
end
|
@@ -6,14 +6,14 @@ module ForemanNetbox
|
|
6
6
|
module SyncCluster
|
7
7
|
class Update
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
around do |interactor|
|
11
12
|
interactor.call if context.cluster
|
12
13
|
end
|
13
14
|
|
14
15
|
def call
|
15
|
-
|
16
|
-
cluster.tags = (cluster.tags | new_tags) if new_tags.any?
|
16
|
+
assign_tags_to(cluster)
|
17
17
|
|
18
18
|
cluster.save
|
19
19
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -21,13 +21,7 @@ module ForemanNetbox
|
|
21
21
|
context.fail!(error: "#{self.class}: #{e}")
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
delegate :netbox_params, :cluster, to: :context
|
27
|
-
|
28
|
-
def new_cluster_params
|
29
|
-
netbox_params.fetch(:cluster, {})
|
30
|
-
end
|
24
|
+
delegate :cluster, to: :context
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|
data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/create.rb
CHANGED
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncInterfaces
|
7
7
|
class Create
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
after do
|
11
12
|
context.interfaces.reload
|
@@ -17,7 +18,11 @@ module ForemanNetbox
|
|
17
18
|
.reject { |i| interfaces.map(&:name).include?(i[:name]) }
|
18
19
|
.map do |new_interface|
|
19
20
|
ForemanNetbox::API.client::Virtualization::Interface.new(
|
20
|
-
new_interface.except(:type)
|
21
|
+
new_interface.except(:type)
|
22
|
+
.merge(
|
23
|
+
virtual_machine: virtual_machine.id,
|
24
|
+
tags: default_tag_ids
|
25
|
+
)
|
21
26
|
).save
|
22
27
|
end
|
23
28
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -7,6 +7,7 @@ module ForemanNetbox
|
|
7
7
|
module SyncIpAddresses
|
8
8
|
class Create
|
9
9
|
include ::Interactor
|
10
|
+
include ForemanNetbox::Concerns::AssignTags
|
10
11
|
|
11
12
|
def call
|
12
13
|
netbox_params.fetch(:ip_addresses, []).map do |ip_address|
|
@@ -16,12 +17,16 @@ module ForemanNetbox
|
|
16
17
|
next unless ForemanNetbox::API.client
|
17
18
|
.ipam
|
18
19
|
.ip_addresses
|
19
|
-
.filter(
|
20
|
+
.filter(vminterface_id: interface_id, address: ip_address[:address])
|
20
21
|
.total
|
21
22
|
.zero?
|
22
23
|
|
23
24
|
ForemanNetbox::API.client::IPAM::IpAddress.new(
|
24
|
-
ip_address.slice(:address
|
25
|
+
ip_address.slice(:address)
|
26
|
+
.merge(
|
27
|
+
assigned_object_type: 'virtualization.vminterface', assigned_object_id: interface_id,
|
28
|
+
tags: default_tag_ids
|
29
|
+
)
|
25
30
|
).save
|
26
31
|
end
|
27
32
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -25,7 +25,7 @@ module ForemanNetbox
|
|
25
25
|
.map { |ip| ip.fetch(:address) }
|
26
26
|
|
27
27
|
context.ip_addresses
|
28
|
-
.select { |ip| ip['
|
28
|
+
.select { |ip| ip['assigned_object_type'] == 'virtualization.vminterface' && ip['assigned_object_id'] == netbox_interface.id }
|
29
29
|
.reject { |ip| host_interface_ips.include?(ip['address']) }
|
30
30
|
.each(&:delete)
|
31
31
|
end
|
@@ -7,12 +7,11 @@ module ForemanNetbox
|
|
7
7
|
module SyncIpAddresses
|
8
8
|
class Update
|
9
9
|
include ::Interactor
|
10
|
+
include ForemanNetbox::Concerns::AssignTags
|
10
11
|
|
11
12
|
def call
|
12
13
|
context.ip_addresses.each do |ip_address|
|
13
|
-
|
14
|
-
|
15
|
-
ip_address.tags = (ip_address.tags | new_tags) if new_tags.any?
|
14
|
+
assign_tags_to(ip_address)
|
16
15
|
|
17
16
|
ip_address.save
|
18
17
|
end
|
@@ -20,17 +19,6 @@ module ForemanNetbox
|
|
20
19
|
::Foreman::Logging.logger('foreman_netbox/import').error("#{self.class} error #{e}: #{e.backtrace}")
|
21
20
|
context.fail!(error: "#{self.class}: #{e}")
|
22
21
|
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
delegate :netbox_params, to: :context
|
27
|
-
|
28
|
-
def tags_map
|
29
|
-
netbox_params.fetch(:ip_addresses, [])
|
30
|
-
.each_with_object({}) do |item, memo|
|
31
|
-
memo[item[:address]] = item.fetch(:tags, [])
|
32
|
-
end
|
33
|
-
end
|
34
22
|
end
|
35
23
|
end
|
36
24
|
end
|
data/app/interactors/foreman_netbox/sync_host/sync_virtual_machine/sync_interfaces/update.rb
CHANGED
@@ -6,6 +6,7 @@ module ForemanNetbox
|
|
6
6
|
module SyncInterfaces
|
7
7
|
class Update
|
8
8
|
include ::Interactor
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
11
|
def call
|
11
12
|
context.interfaces.each { |netbox_interface| update(netbox_interface) }
|
@@ -22,9 +23,7 @@ module ForemanNetbox
|
|
22
23
|
return unless new_params
|
23
24
|
|
24
25
|
netbox_interface.mac_address = new_params[:mac_address] if netbox_interface.mac_address != new_params[:mac_address]
|
25
|
-
|
26
|
-
new_tags = new_params.fetch(:tags, []) - netbox_interface.tags
|
27
|
-
netbox_interface.tags = (netbox_interface.tags | new_tags) if new_tags.any?
|
26
|
+
assign_tags_to(netbox_interface)
|
28
27
|
|
29
28
|
netbox_interface.save
|
30
29
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -6,8 +6,9 @@ module ForemanNetbox
|
|
6
6
|
class Update
|
7
7
|
include ::Interactor
|
8
8
|
include ForemanNetbox::Concerns::PrimaryIps
|
9
|
+
include ForemanNetbox::Concerns::AssignTags
|
9
10
|
|
10
|
-
ATTRIBUTES = %i[name cluster disk memory primary_ip4 primary_ip6 tenant vcpus
|
11
|
+
ATTRIBUTES = %i[name cluster disk memory primary_ip4 primary_ip6 tenant vcpus].freeze
|
11
12
|
|
12
13
|
around do |interactor|
|
13
14
|
interactor.call if context.virtual_machine
|
@@ -19,6 +20,7 @@ module ForemanNetbox
|
|
19
20
|
|
20
21
|
def call
|
21
22
|
assign_new_attributes
|
23
|
+
assign_tags_to(virtual_machine)
|
22
24
|
|
23
25
|
virtual_machine.save
|
24
26
|
rescue NetboxClientRuby::LocalError, NetboxClientRuby::ClientError, NetboxClientRuby::RemoteError => e
|
@@ -70,12 +72,6 @@ module ForemanNetbox
|
|
70
72
|
vcpus = netbox_params.dig(:virtual_machine, :vcpus)
|
71
73
|
virtual_machine.vcpus = vcpus if virtual_machine.vcpus != vcpus
|
72
74
|
end
|
73
|
-
|
74
|
-
def assign_tags
|
75
|
-
new_tags = (netbox_params.dig(:virtual_machine, :tags) || []) - virtual_machine.tags
|
76
|
-
|
77
|
-
virtual_machine.tags = (virtual_machine.tags | new_tags) if new_tags.any?
|
78
|
-
end
|
79
75
|
end
|
80
76
|
end
|
81
77
|
end
|