Project

General

Profile

Bug #24697

foreman-rake db:seed fails on upgrade to Foraman 1.17.1

Added by Daniel Helgenberger 3 months ago. Updated 3 months ago.

Status:
Closed
Priority:
High
Assignee:
Category:
DB migrations
Target version:

Description

When upgrading our instance from 1.16.2 > 1.17.1, foreman_rake db:seed fails on 040-role.rb step with NoMethodError. I attached bookmarks, filters, roles, permissions from my database.

# foreman-rake db:seed --trace
/opt/theforeman/tfm/root/usr/share/gems/gems/sequel-4.20.0/lib/sequel/database/schema_generator.rb:19: warning: constant ::Fixnum is deprecated
/opt/theforeman/tfm/root/usr/share/gems/gems/sequel-4.20.0/lib/sequel/database/schema_generator.rb:19: warning: constant ::Bignum is deprecated
/usr/share/foreman/lib/core_extensions.rb:183: warning: already initialized constant ActiveSupport::MessageEncryptor::DEFAULT_CIPHER
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/message_encryptor.rb:22: warning: previous definition of DEFAULT_CIPHER was here
** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
The PGconn, PGresult, and PGError constants are deprecated, and will be
removed as of version 1.0.

You should use PG::Connection, PG::Result, and PG::Error instead, respectively.

Called from /opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in `block in require'
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:abort_if_pending_migrations
Seeding /usr/share/foreman/db/seeds.d/020-partition_tables_list.rb
Seeding /usr/share/foreman/db/seeds.d/020-permissions_list.rb
Seeding /usr/share/foreman/db/seeds.d/020-provisioning_templates_list.rb
Seeding /usr/share/foreman/db/seeds.d/020-roles_list.rb
Seeding /usr/share/foreman/db/seeds.d/030-auth_sources.rb
Seeding /usr/share/foreman/db/seeds.d/030-permissions.rb
Seeding /usr/share/foreman/db/seeds.d/035-admin.rb
Seeding /usr/share/foreman/db/seeds.d/040-roles.rb
rake aborted!
NoMethodError: undefined method `id' for nil:NilClass
/usr/share/foreman/app/models/role.rb:324:in `block in find_current_filter'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activerecord-5.1.4/lib/active_record/relation/delegation.rb:39:in `each'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activerecord-5.1.4/lib/active_record/relation/delegation.rb:39:in `each'
/usr/share/foreman/app/models/role.rb:324:in `detect'
/usr/share/foreman/app/models/role.rb:324:in `find_current_filter'
/usr/share/foreman/app/models/role.rb:320:in `filter_for_permissions_remove'
/usr/share/foreman/app/models/role.rb:178:in `filters_and_filterings_for_removal'
/usr/share/foreman/app/models/role.rb:173:in `block in find_for_permission_removal'
/usr/share/foreman/app/models/role.rb:172:in `each'
/usr/share/foreman/app/models/role.rb:172:in `inject'
/usr/share/foreman/app/models/role.rb:172:in `find_for_permission_removal'
/usr/share/foreman/app/models/role.rb:211:in `remove_permissions!'
/usr/share/foreman/lib/seed_helper.rb:92:in `block in update_role_permissions'
/usr/share/foreman/app/models/role.rb:234:in `ignore_locking'
/usr/share/foreman/lib/seed_helper.rb:84:in `update_role_permissions'
/usr/share/foreman/lib/seed_helper.rb:63:in `create_role'
/usr/share/foreman/db/seeds.d/040-roles.rb:10:in `block (4 levels) in <top (required)>'
/usr/share/foreman/db/seeds.d/040-roles.rb:9:in `each'
/usr/share/foreman/db/seeds.d/040-roles.rb:9:in `block (3 levels) in <top (required)>'
/usr/share/foreman/app/models/concerns/authorizable.rb:115:in `skip_permission_check'
/usr/share/foreman/db/seeds.d/040-roles.rb:5:in `block (2 levels) in <top (required)>'
/opt/theforeman/tfm/root/usr/share/gems/gems/audited-4.4.1/lib/audited/auditor.rb:283:in `without_auditing'
/usr/share/foreman/db/seeds.d/040-roles.rb:4:in `block in <top (required)>'
/opt/theforeman/tfm/root/usr/share/gems/gems/audited-4.4.1/lib/audited/auditor.rb:283:in `without_auditing'
/usr/share/foreman/db/seeds.d/040-roles.rb:3:in `<top (required)>'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `load'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `block in load'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258:in `load_dependency'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `load'
/usr/share/foreman/db/seeds.rb:38:in `block (2 levels) in <top (required)>'
/usr/share/foreman/app/models/concerns/foreman/thread_session.rb:93:in `as'
/usr/share/foreman/app/models/concerns/foreman/thread_session.rb:99:in `as_anonymous_admin'
/usr/share/foreman/db/seeds.rb:37:in `block in <top (required)>'
/usr/share/foreman/db/seeds.rb:31:in `each'
/usr/share/foreman/db/seeds.rb:31:in `<top (required)>'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `load'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `block in load'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258:in `load_dependency'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:286:in `load'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/railties-5.1.4/lib/rails/engine.rb:549:in `load_seed'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activerecord-5.1.4/lib/active_record/tasks/database_tasks.rb:270:in `load_seed'
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activerecord-5.1.4/lib/active_record/railties/databases.rake:184:in `block (2 levels) in <top (required)>'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/task.rb:250:in `each'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain'
/opt/rh/rh-ruby24/root/usr/share/ruby/monitor.rb:214:in `mon_synchronize'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:152:in `invoke_task'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:108:in `each'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:108:in `block in top_level'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:117:in `run_with_threads'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:102:in `top_level'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:80:in `block in run'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/lib/rake/application.rb:77:in `run'
/opt/rh/rh-ruby24/root/usr/share/gems/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
/opt/rh/rh-ruby24/root/usr/bin/rake:23:in `load'
/opt/rh/rh-ruby24/root/usr/bin/rake:23:in `<main>'
Tasks: TOP => db:seed

Removing role.rb shows it is the only one with an error:

# mv /usr/share/foreman/db/seeds.d/040-roles.rb .
# foreman-rake db:seed
/opt/theforeman/tfm/root/usr/share/gems/gems/sequel-4.20.0/lib/sequel/database/schema_generator.rb:19: warning: constant ::Fixnum is deprecated
/opt/theforeman/tfm/root/usr/share/gems/gems/sequel-4.20.0/lib/sequel/database/schema_generator.rb:19: warning: constant ::Bignum is deprecated
/usr/share/foreman/lib/core_extensions.rb:183: warning: already initialized constant ActiveSupport::MessageEncryptor::DEFAULT_CIPHER
/opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/message_encryptor.rb:22: warning: previous definition of DEFAULT_CIPHER was here
The PGconn, PGresult, and PGError constants are deprecated, and will be
removed as of version 1.0.

You should use PG::Connection, PG::Result, and PG::Error instead, respectively.

Called from /opt/theforeman/tfm-ror51/root/usr/share/gems/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in `block in require'
Seeding /usr/share/foreman/db/seeds.d/020-partition_tables_list.rb
Seeding /usr/share/foreman/db/seeds.d/020-permissions_list.rb
Seeding /usr/share/foreman/db/seeds.d/020-provisioning_templates_list.rb
Seeding /usr/share/foreman/db/seeds.d/020-roles_list.rb
Seeding /usr/share/foreman/db/seeds.d/030-auth_sources.rb
Seeding /usr/share/foreman/db/seeds.d/030-permissions.rb
Seeding /usr/share/foreman/db/seeds.d/035-admin.rb
Seeding /usr/share/foreman/db/seeds.d/050-taxonomies.rb
Seeding /usr/share/foreman/db/seeds.d/060-architectures.rb
Seeding /usr/share/foreman/db/seeds.d/070-provisioning_templates.rb
Seeding /usr/share/foreman/db/seeds.d/080-partition_tables.rb
Seeding /usr/share/foreman/db/seeds.d/100-installation_media.rb
Seeding /usr/share/foreman/db/seeds.d/110-smart_proxy_features.rb
Seeding /usr/share/foreman/db/seeds.d/130-compute_profiles.rb
Seeding /usr/share/foreman/db/seeds.d/150-bookmarks.rb
Seeding /usr/share/foreman/db/seeds.d/160-mail_notifications.rb
Seeding /usr/share/foreman/db/seeds.d/170-notification_blueprints.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman-tasks-0.11.2/db/seeds.d/20-foreman_tasks_permissions.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_discovery-11.0.0/db/seeds.d/50_discovery_templates.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman-tasks-0.11.2/db/seeds.d/60-dynflow_proxy_feature.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_discovery-11.0.0/db/seeds.d/60_discovery_proxy_feature.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman-tasks-0.11.2/db/seeds.d/61-foreman_tasks_bookmarks.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_discovery-11.0.0/db/seeds.d/70_discovery_mail_notification.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_discovery-11.0.0/db/seeds.d/80_discovery_ui_notification.rb
Seeding /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_discovery-11.0.0/db/seeds.d/90_add_permissions_from_default_roles.rb
All seed files executed

foreman_db.txt foreman_db.txt 62 KB Filters, roles, permissions from my database Daniel Helgenberger, 08/23/2018 09:08 AM

Related issues

Related to Foreman - Bug #21342: Role needs to be updated if their permissions changed in new versionClosed2017-10-16
Related to Foreman - Feature #19039: Lock plugin rolesClosed2017-03-27
Related to Foreman - Bug #24231: foreman-rake db:seed errorNeed more information

Associated revisions

Revision ada7d6ef (diff)
Added by Tomer Brisker 3 months ago

Fixes #24697 - Don't remove permissions from default role

The default role may have permissions added by users. They should remain
without removal. If a seeded permissions needs removal from the default
role, it should be explicitly removed in a migration.
Additionally, attempting to remove permissions with filters from a role
led to a failure due to an incorrect search parameter which has now been
fixed.

Revision b5bfdb65 (diff)
Added by Michael Moll 3 months ago

Refs #24697 - remove now unneeded Rubocop disabling

History

#1 Updated by Daniel Helgenberger 3 months ago

  • Subject changed from foreman-rake db:seed fails on upgrade to Foramen 1.17.1 to foreman-rake db:seed fails on upgrade to Foraman 1.17.1

#2 Updated by Adam Winberg 3 months ago

I had this error as well, both upgrading to 1.17 and then to 1.18. In my case it seems to be because I hade made edits to the filters in the 'Default role'. This role is not locked so I guess I presumed it was ok to make adjustments to it, but once I had reset the role to the default filters (view_bookmarks and view_tasks) the db:seed task worked.

#3 Updated by Daniel Helgenberger 3 months ago

Thanks, Adam! I'll try it right away - however, currently on 1.16.2 I cannot find a way to reset it. Can can you post you post your filters?

#4 Updated by Adam Winberg 3 months ago

As I understand it, from the file

/usr/share/foreman/db/seeds.d/020-roles_list.rb
, there are only two filters/permissions on the default role:

Bookmark/view_bookmarks
(Miscellaneous)/view_tasks

After I removed all my filters on the default role except those two, it worked for me.

#5 Updated by Daniel Helgenberger 3 months ago

Thanks, I think I also need from foreman tasks:

Foreman tasks/task    view_foreman_tasks            owner.id = current_user    

#6 Updated by Tomer Brisker 3 months ago

  • Priority changed from Normal to High

I confirm this issue is present in current nightly as well. Having a modified `default role` role will cause db:seed to fail.

#7 Updated by Tomer Brisker 3 months ago

More precisely:
- If there is a permission added to the default role with no filters, it will be removed when seeding.
- If there is a permission added with a specific filter, it will cause the db:seed task to fail.

#8 Updated by Tomer Brisker 3 months ago

  • Bugzilla link set to 1621029

#9 Updated by Daniel Helgenberger 3 months ago

Dumb question, should the Default Role be locked in the first place?

Adam and I only ran into the issue because it is unlocked and we assumed it is fine to edit it. Further, I edited this a while back, several forman versions ago and this is the first time I hit this.

#10 Updated by Tomer Brisker 3 months ago

  • Related to Bug #21342: Role needs to be updated if their permissions changed in new version added

#11 Updated by Tomer Brisker 3 months ago

#12 Updated by The Foreman Bot 3 months ago

  • Assignee set to Tomer Brisker
  • Status changed from New to Ready For Testing
  • Pull request https://github.com/theforeman/foreman/pull/5992 added

#13 Updated by Tomer Brisker 3 months ago

  • Target version set to 1.18.2
  • Found in Releases 1.17.0, 1.17.0-RC1, 1.17.0-RC2, 1.17.1, 1.17.2, 1.17.3, 1.18.0, 1.18.0-RC1, 1.18.0-RC2, 1.18.0-RC3, 1.18.1, 1.19.0-RC1, 1.19.0-RC2, 1.19.0-RC3 added

#14 Updated by The Foreman Bot 3 months ago

  • Pull request https://github.com/theforeman/foreman/pull/5999 added

#15 Updated by The Foreman Bot 3 months ago

  • Pull request https://github.com/theforeman/foreman/pull/6000 added

#16 Updated by The Foreman Bot 3 months ago

  • Pull request https://github.com/theforeman/foreman/pull/5990 added

#17 Updated by Tomer Brisker 3 months ago

  • Status changed from Ready For Testing to Closed

#18 Updated by Tomer Brisker 3 months ago

  • Pull request deleted (https://github.com/theforeman/foreman/pull/5990)

#19 Updated by Tomer Brisker 3 months ago

  • Fixed in Releases 1.17.4, 1.18.2, 1.19.0, 1.20.0 added

#20 Updated by Marek Hulán 4 days ago

  • Related to Bug #24231: foreman-rake db:seed error added

Also available in: Atom PDF