Project

General

Profile

Actions

Bug #23232

closed

Foreman should validate host associations are in the host's taxonomies

Added by Chris Duryee about 6 years ago. Updated almost 6 years ago.

Status:
Closed
Priority:
Normal
Category:
Organizations and Locations
Target version:
Difficulty:
Triaged:
Fixed in Releases:
Found in Releases:

Description

If you register a brand-new client to a new capsule on a new katello using bootstrap.py without https://github.com/Katello/katello-client-bootstrap/issues/248, you will get this error:

Validation failed: Name must not include periods

repro steps:

  • vagrant up centos7-katello-3.6
  • vagrant up centos7-foreman-proxy-3.6
  • vagrant up centos7 for use as test client

on katello server:

hammer ping
hammer -u admin -p changeme activation-key create --name MYAK --organization-id 1
hammer -u admin -p changeme hostgroup create --name MYHG

on client:

yum install subscription-manager (bootstrap will need it)
  1. ensure you are using a bootstrap.py without https://github.com/Katello/katello-client-bootstrap/issues/248
    curl http://centos7-foreman-proxy-3-6.dhcp129-144.example.com/pub/bootstrap.py > ./bootstrap.py
    python bootstrap.py -s centos7-foreman-proxy-3-6.dhcp129-144.example.com -g MYHG -a MYAK

(this will error that the HG needs an OS and location, we'll fix that)

back on katello server:

hammer -u admin -p changeme os list
hammer -u admin -p changeme location list
hammer -u admin -p changeme hostgroup list
hammer -u admin -p changeme hostgroup update --operatingsystem-id 1 --location-ids 2 --id 1

back on client again:

python bootstrap.py -s centos7-foreman-proxy-3-6.dhcp129-144.example.com -g MYHG -a MYAK --location "Default Location" --force

error!

Validation failed: Name must not include periods

production.log:

[app] [I] Started POST "/rhsm/consumers?owner=Default_Organization&activation_keys=MYAK" for 192.168.121.96 at 2018-04-11 16:10:34 +0000
[app] [I] Processing by Katello::Api::Rhsm::CandlepinProxiesController#consumer_activate as JSON
[app] [I] Parameters: {"facts"=>"[FILTERED]", "contentTags"=>[], "type"=>"system", "name"=>"client.dhcp129-144.example.com", "owner"=>"Default_Organization", "activation_keys"=>"MYAK"}
[app] [I] Current user: foreman_admin (administrator)
[app] [I] Current user: foreman_admin (administrator)
[katello/cp_proxy] [E] <Class> ActiveRecord::RecordInvalid
[katello/cp_proxy] [E] name: ["must not include periods"]
[app] [I] Completed 422 Unprocessable Entity in 808ms (Views: 0.1ms | ActiveRecord: 19.4ms)

It looks like the domain can't be found, which causes the shortname of the host to be its fqdn. Workaround:

hammer -u admin -p changeme domain update --id 1 --location-ids 2 --organization-ids 1

Note that this bug has a workaround in bootstrap.py. Ideally a more descriptive error message would be raised if the domain is not accessible in the org/location.

Actions #1

Updated by Chris Duryee about 6 years ago

  • Bugzilla link set to 1566166
Actions #2

Updated by Justin Sherrill about 6 years ago

  • Category set to Hosts
  • translation missing: en.field_release set to 352
Actions #3

Updated by Chris Duryee about 6 years ago

  • Subject changed from unable to register client to freshly installed capsule on fresh katello to "Validation failed: Name must not include periods" if domain is not found during registration
  • Description updated (diff)
Actions #4

Updated by Stephen Benjamin about 6 years ago

This is a weird one. bootstrap.py does an unscoped API query to retrieve the domain ID. It passes in that domain_id to the API for host create, which happily assigns it to the host.

If you look at the actual AR records with default scoping, host.domain is nil because it can't find a domain by that ID in the host's scope. Foreman's host name checking relies on host.domain to strip it out and check the "shortname" for periods, which causes the validation error we see.

There's at least a Foreman bug here, I don't think it should blindly accept ID's without checking taxonomic scope but that's a big bucket of worms to fix correctly.

Actions #5

Updated by Stephen Benjamin about 6 years ago

  • Project changed from Katello to Foreman
  • Subject changed from "Validation failed: Name must not include periods" if domain is not found during registration to Foreman should validate host associations are in the host's taxonomies
  • Category changed from Hosts to Organizations and Locations
  • Assignee set to Stephen Benjamin

Really a foreman issue, going to fix there.

Actions #6

Updated by The Foreman Bot about 6 years ago

  • Status changed from New to Ready For Testing
  • Pull request https://github.com/theforeman/foreman/pull/5494 added
Actions #7

Updated by Stephen Benjamin almost 6 years ago

  • Status changed from Ready For Testing to Closed
  • % Done changed from 0 to 100
Actions #8

Updated by Marek Hulán almost 6 years ago

  • translation missing: en.field_release changed from 352 to 353

In fact, this was fixed in Foreman, resetting the release.

Actions

Also available in: Atom PDF