Ok. Is there anything I could do now to workaround this? The only thing
worked for me so far was to periodically go through discovered hosts and
remove duplicate entries.
Thanks!
Konstantin.
On Oct 26, 2017, at 07:18, Lukas Zapletal lzap@redhat.com wrote:
Ok this confirms it. Bug #21479: Multiple discovered hosts with same MAC address - Discovery - Foreman we will
fix later.
We don’t have an unique index on DB level, just in Rails level and a
second NIC with same MAC can sneak in. The relevant code in core is:
validate :mac_uniqueness, :if => Proc.new { |nic| nic.managed? &&
nic.host && nic.host.managed? && !nic.host.compute? && !nic.virtual? &&
nic.mac.present? }
which will not trigger for Discovery at all (host is not managed). In
discovery we try to search for existing host and if not found, we will
create new discovered host. This does not work correctly, we have turned
off validator for some reason:
host.save(:validate => false) if host.new_record?
So the validation for uniqueness won’t hit.
On Wed, Oct 25, 2017 at 6:50 PM, ‘Konstantin Orekhov’ via Foreman users < > foreman-users@googlegroups.com> wrote:
Please use foreman-rake (I assume this is a packaged .deb install).
This is CentOS7 install and foreman-rake did work. Here’s the result:
[root@spc01 ~]# cd ~foreman
[root@spc01 foreman]# foreman-rake console
Successfully encrypted field for Setting::Auth oauth_consumer_key
Successfully decrypted field for Setting::Auth oauth_consumer_key
Successfully decrypted field for Setting::Auth oauth_consumer_key
Successfully decrypted field for Setting::Auth oauth_consumer_key
Successfully decrypted field for Setting::Auth oauth_consumer_key
Successfully encrypted field for Setting::Auth oauth_consumer_secret
Successfully decrypted field for Setting::Auth oauth_consumer_secret
Successfully decrypted field for Setting::Auth oauth_consumer_secret
Successfully decrypted field for Setting::Auth oauth_consumer_secret
Successfully decrypted field for Setting::Auth oauth_consumer_secret
/usr/share/foreman/lib/tasks/console.rake:6: warning: already
initialized constant ARGV
For some operations a user must be set, try User…current = User.first
Loading production environment (Rails 4.2.5.1)
Failed to load console gems, starting anyway
irb(main):001:0> ::Nic::Managed.where(:mac => “b4:99:ba:aa:4b:64”,
:primary => true)
=> #<ActiveRecord::Relation [#<Nic::Managed id: 619163, mac:
“b4:99:ba:aa:4b:64”, ip: “10.8.161.191”, type: “Nic::Managed”, name:
“macb499baaa4b64”, host_id: 458555, subnet_id: nil, domain_id: nil, attrs:
{“netmask”=>“255.255.255.0”, “mtu”=>“1500”, “network”=>“10.8.161.0”,
“speed”=>“1000”, “duplex”=>“full”, “port”=>“Twisted Pair”,
“auto_negotiation”=>“true”, “wol”=>true}, created_at: “2017-10-20
03:44:00”, updated_at: “2017-10-20 03:44:02”, provider: nil, username: nil,
password: nil, virtual: false, link: true, identifier: “eth0”, tag: “”,
attached_to: “”, managed: true, mode: “balance-rr”, attached_devices: “”,
bond_options: “”, primary: true, provision: true, compute_attributes: {},
execution: true, ip6: nil, subnet6_id: nil>]>
irb(main):002:0>
However, just as in my previous example, DB has 2 different IDs with that
MAC:
[root@spc01 ~]# mysql -u foreman -p$DB_PASS foreman -e “SELECT * FROM
hosts WHERE type = ‘Host::Discovered’ and NAME = ‘macb499baaa4b64’\G;”
*************************** 1. row ***************************
id: 430926
name: macb499baaa4b64
last_compile: NULL
last_report: 2017-09-30 06:56:07
updated_at: 2017-09-30 06:56:09
created_at: 2017-03-17 14:09:15
root_pass: NULL
architecture_id: NULL
operatingsystem_id: NULL
environment_id: NULL
ptable_id: NULL
medium_id: NULL
build: 0
comment: NULL
disk: NULL
installed_at: NULL
model_id: 7
hostgroup_id: NULL
owner_id: 10
owner_type: User
enabled: 1
puppet_ca_proxy_id: NULL
managed: 0
use_image: NULL
image_file: NULL
uuid: NULL
compute_resource_id: NULL
puppet_proxy_id: NULL
certname: NULL
image_id: NULL
organization_id: NULL
location_id: NULL
type: Host::Discovered
otp: NULL
realm_id: NULL
compute_profile_id: NULL
provision_method: NULL
grub_pass:
global_status: 0
lookup_value_matcher: NULL
discovery_rule_id: NULL
salt_proxy_id: NULL
salt_environment_id: NULL
pxe_loader: NULL
*************************** 2. row ***************************
id: 458555
name: macb499baaa4b64
last_compile: NULL
last_report: 2017-10-25 16:47:08
updated_at: 2017-10-25 16:47:09
created_at: 2017-10-20 03:44:00
root_pass: NULL
architecture_id: NULL
operatingsystem_id: NULL
environment_id: NULL
ptable_id: NULL
medium_id: NULL
build: 0
comment: NULL
disk: NULL
installed_at: NULL
model_id: NULL
hostgroup_id: NULL
owner_id: NULL
owner_type: NULL
enabled: 1
puppet_ca_proxy_id: NULL
managed: 0
use_image: NULL
image_file: NULL
uuid: NULL
compute_resource_id: NULL
puppet_proxy_id: NULL
certname: NULL
image_id: NULL
organization_id: NULL
location_id: NULL
type: Host::Discovered
otp: NULL
realm_id: NULL
compute_profile_id: NULL
provision_method: NULL
grub_pass:
global_status: 0
lookup_value_matcher: NULL
discovery_rule_id: NULL
salt_proxy_id: NULL
salt_environment_id: NULL
pxe_loader: NULL
[root@spc01 ~]#
https://lh3.googleusercontent.com/-wBk_VPoo0Fs/WfDA4guCc6I/AAAAAAAAAEs/ZIrmiIJEh64IGPxH0dz0y3aqO90F7WDdgCLcBGAs/s1600/Screen%2BShot%2B2017-10-25%2Bat%2B9.49.21%2BAM.png
–
You received this message because you are subscribed to the Google Groups
"Foreman users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to foreman-users+unsubscribe@googlegroups.com.
To post to this group, send email to foreman-users@googlegroups.com.
Visit this group at https://groups.google.com/group/foreman-users.
For more options, visit https://groups.google.com/d/optout.
–
Later,
Lukas @lzap Zapletal
–
You received this message because you are subscribed to a topic in the
Google Groups “Foreman users” group.
To unsubscribe from this topic, visit https://groups.google.com/d/
topic/foreman-users/xGZvRqHbWcA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to
foreman-users+unsubscribe@googlegroups.com.
To post to this group, send email to foreman-users@googlegroups.com.
Visit this group at https://groups.google.com/group/foreman-users.
For more options, visit https://groups.google.com/d/optout.
–
You received this message because you are subscribed to the Google Groups
"Foreman users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to foreman-users+unsubscribe@googlegroups.com.
To post to this group, send email to foreman-users@googlegroups.com.
Visit this group at https://groups.google.com/group/foreman-users.
For more options, visit https://groups.google.com/d/optout.