Ok this confirms it. http://projects.theforeman.org/issues/21479 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 <
[email protected]> 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 [email protected].
> To post to this group, send email to [email protected].
> 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 the Google Groups 
"Foreman users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/foreman-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to