Uninitialized constant Proxy::Provider (NameError)

Problem:

Trying to install the smart_proxy_dns_route53 plugin, however, I’m getting presented with a stack trace.

Expected outcome:

Plugin installs successfully with no errors

Foreman and Proxy versions:

Foreman Smart Proxy: 1.20.1

Foreman and Proxy plugin versions:

foreman-tasks The goal of this plugin is to unify the way of showing task statuses across the Foreman instance. It defines Task model for keeping the information about the tasks and Lock for assigning the tasks to resources. The locking allows dealing with preventing multiple colliding tasks to be run on the same resource. It also optionally provides Dynflow infrastructure for using it for managing the tasks. Ivan Nečas 0.14.3
foreman_ansible Ansible integration with Foreman Daniel Lobato Garcia 2.2.11
foreman_cockpit This plugin adds a tab to see your host’s Cockpit components, such as console, journal, and networking if the host has Cockpit installed. Daniel Lobato Garcia 2.0.3
foreman_column_view Displays an additional column in the Foreman Hosts view and/or additional entries in the Host show page Greg Sutcliffe 0.4.0
foreman_hooks Plugin engine for Foreman that enables running custom hook scripts on Foreman events Dominic Cleal 0.3.15
foreman_memcache Adds memcache support to foreman Ohad Levy 0.1.1
foreman_remote_execution A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality. Foreman Remote Execution team 1.6.5
foreman_slack Sends events (like host built) from Foreman to Slack. Shlomi Zadok 0.0.3

Other relevant data:
[e.g. logs from Foreman and/or the Proxy, modified templates, commands issued, etc]

Installed using the following steps:

  • Installed the following gems and added them to /usr/share/foreman/bundler.d/Gemfile.local.rb:
    • smart_proxy_dns_route53
    • gem route53
    • gem ruby-hmac
  • Updated /etc/foreman-proxy/settings.d/dns.yml:
---
# DNS management
:enabled: true
# valid providers:
#   dns_dnscmd (Microsoft Windows native implementation)
#   dns_nsupdate
#   dns_nsupdate_gss (for GSS-TSIG support)
#   dns_libvirt (dnsmasq via libvirt)
:use_provider: dns_route53
# use this setting if you want to override default TTL setting (86400)
:dns_ttl: 86400
  • Updated _/etc/foreman-proxy/settings.d/_dns_route53.yml:
---
#
# Configuration file for 'dns_route53' DNS provider
#

## Set the following keys for the AWS credentials in use:
:aws_access_key: "<REDACTED>"
:aws_secret_key: "<REDACTED>"
  • Restarted foreman and httpd service (the former doesn’t seem to do anything,however, the latter does).

I’m then shown the error messages below (truncated).

(for logs, surround with three back-ticks to get proper formatting, e.g.)

uninitialized constant Proxy::Provider (NameError)
  /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_hooks-0.3.15/lib/foreman_hooks/as_dependencies_hook.rb:4:in `load_missing_constant'
  /opt/rh/rh-ruby25/root/usr/local/share/gems/gems/smart_proxy_dns_route53-3.0.1/lib/smart_proxy_dns_route53/dns_route53_plugin.rb:5:in `<module:Route53>'
  /opt/rh/rh-ruby25/root/usr/local/share/gems/gems/smart_proxy_dns_route53-3.0.1/lib/smart_proxy_dns_route53/dns_route53_plugin.rb:4:in `<top (required)>'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:59:in `require'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:59:in `require'
  /opt/theforeman/tfm/root/usr/share/gems/gems/polyglot-0.3.5/lib/polyglot.rb:65:in `require'
  /opt/rh/rh-ruby25/root/usr/local/share/gems/gems/smart_proxy_dns_route53-3.0.1/lib/smart_proxy_dns_route53.rb:1:in `<top (required)>'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:135:in `require'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:39:in `require'
  /opt/theforeman/tfm/root/usr/share/gems/gems/polyglot-0.3.5/lib/polyglot.rb:65:in `require'
  /opt/theforeman/tfm/root/usr/share/gems/gems/bundler_ext-0.4.1/lib/bundler_ext/runtime.rb:41:in `block in system_require'
  /opt/theforeman/tfm/root/usr/share/gems/gems/bundler_ext-0.4.1/lib/bundler_ext/runtime.rb:37:in `each'
  /opt/theforeman/tfm/root/usr/share/gems/gems/bundler_ext-0.4.1/lib/bundler_ext/runtime.rb:37:in `system_require'
  /opt/theforeman/tfm/root/usr/share/gems/gems/bundler_ext-0.4.1/lib/bundler_ext.rb:19:in `block in system_require'
  /opt/theforeman/tfm/root/usr/share/gems/gems/bundler_ext-0.4.1/lib/bundler_ext.rb:14:in `each'
  /opt/theforeman/tfm/root/usr/share/gems/gems/bundler_ext-0.4.1/lib/bundler_ext.rb:14:in `system_require'
  /usr/share/foreman/config/application.rb:17:in `<top (required)>'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:59:in `require'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:59:in `require'
  /usr/share/foreman/config/environment.rb:2:in `<top (required)>'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:59:in `require'
  /opt/rh/rh-ruby25/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:59:in `require'
  config.ru:5:in `block in <main>'
  /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/rack-2.0.5/lib/rack/builder.rb:55:in `instance_eval'
  /opt/theforeman/tfm-ror52/root/usr/share/gems/gems/rack-2.0.5/lib/rack/builder.rb:55:in `initialize'
  config.ru:1:in `new'
  config.ru:1:in `<main>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `eval'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:112:in `preload_app'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:158:in `<module:App>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'

You are installing a smart proxy plugin in Foreman itself. There is also a RPM package for this which is probably easier to use.

1 Like

If I just have a Foreman server with no smart proxies setup, can I still use this?

You can install the smart proxy on the same server as the foreman server, but in order to manage external services such as DNS you must use a smart proxy.

1 Like

I’ve reviewed my settings and I think I already have the smart proxy setup on the Foreman server:

Am I misunderstanding something or missing a step?

It looks like the smart proxy Route53 DNS plugin is not installed properly - please make sure you install it and follow the configuration instructions in https://github.com/theforeman/smart_proxy_dns_route53