Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error while using class rabbitmq_user #771

Open
rehan2908 opened this issue Jan 30, 2019 · 9 comments
Open

Error while using class rabbitmq_user #771

rehan2908 opened this issue Jan 30, 2019 · 9 comments

Comments

@rehan2908
Copy link

rehan2908 commented Jan 30, 2019

Affected Puppet, Ruby, OS and module versions/distributions

  • Puppet: 6.0 ( Enterprise)
  • Ruby:
  • Distribution: Centos 7
  • Module version: 9.0.0

How to reproduce (e.g Puppet code you use)

i am trying to use rabbitmq module to create users but i am getting this error using rabbitmq_user class using below code,

class role::rabbitmq::rabbitmqusers (
  
  $admin_user_create    = $role::rabbitmq::rmqparams::admin_user_create,
  $admin_user           = $role::rabbitmq::rmqparams::admin_user,
  $admin_password       = $role::rabbitmq::rmqparams::admin_password,
  $application_user     = $role::rabbitmq::rmqparams::application_user,
  $application_password = $role::rabbitmq::rmqparams::application_password,
) inherits role::rabbitmq::rmqparams {
   
  rabbitmq_user {'admin':
      admin     => true,
      password => $admin_password,
  }
}

What are you seeing

Error: Failed to apply catalog: Cannot parse invalid user line: warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)

and when i see locale is set to LC_ALL=en_US.UTF-8 on the VM. and when i comment out the above code and run a puppet agent -t then it is working as expected.

What behaviour did you expect instead

rabbitmq creating users.

Output log

[root@l-aer-lin-app03 ~]# puppet agent -t
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Info: Caching catalog for l-aer-lin-app03.
Info: Applying configuration version 'l-aer-apl-pe01-production-8bb30257e45'
Error: Failed to apply catalog: Cannot parse invalid user line: warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)

Any additional information you'd like to impart

is it still related to
#671

@rick-pri
Copy link

rick-pri commented Feb 6, 2019

  • Puppet 5.5 OS
  • Distribution FreeBSD 12.0
  • Module version: 9.0.0
  • RabbitMQ version: 2.7.8

I think that #671 needs opening again because even with the environment variables line in the rabbitmq class I still get the same error about the locale.

@rick-pri
Copy link

rick-pri commented Feb 6, 2019

So, I forked the repo and have managed to get past the issue by adding a utf entry for LC_ALL into the environment in the lib/puppet/provider/rabbitmq_cli.rb file:

    def self.home_tmp_command(name, path)
      has_command name, path do
        environment HOME: '/tmp'
+       environment LC_ALL: 'en_GB.UTF-8'
      end
    end

I think that the language locale just has to be available on the system and utf-8. I don't think that this is the end solution, there must be a much better way to get this working (if it was python I could actually write the tests and get something better together to create an acutal PR to submit), but this worked for me whereas everything else was failing.

@wyardley
Copy link
Contributor

wyardley commented Feb 7, 2019

@JayH5: you have any thoughts about this one? I’d rather not hard-code env in here, and in the past, setting it in environment_variables (default updated in #694) seemed to work.

If we hard coded it, we’d have to pick a locale, and then things wouldn’t work if the user didn’t have that locale installed.

I don’t think there are actual cases where the output requires a non-ascii character set, but this is a requirement of the underlying tool that RabbitMQ uses for CLI

@JayH5
Copy link
Contributor

JayH5 commented Feb 7, 2019

@wyardley 😬 not really, haven't had this problem myself.

Adding the LC_ALL variable to the home_tmp_command function could work but..

  • When I wrote that function I was mostly just looking at list operations. There may be other areas where it's not used.
  • The function should probably get a new name.
  • It might make sense to only set LC_ALL to a default like en_US.UTF-8 only if it's not already set.

@rick-pri
Copy link

rick-pri commented Feb 7, 2019

Just as a note, I didn't check whether other language settings worked here, like LANG.

@wyardley
Copy link
Contributor

wyardley commented Feb 7, 2019

LANG would work too, I just feel like LC_ALL is a little narrower. It’s already supposed to be defaulted in environment_variables- @rick-pri - you’re not setting that in your Puppet code, right?

@JayH5: yeah, that’s what #694 was supposed to do, I think it sets it in the RMQ config vs in Puppet’s env directly, so wondering if somehow the new changes are causing that to get ignored or overridden, or if we can take those env vars and merge them in (that seems like it might not be a good idea though?)

Agree about renaming the function.

All of this is just one more reason that hitting the API directly is the cleanest solution.

@wyardley
Copy link
Contributor

wyardley commented Feb 7, 2019

And FWIW, setting the locale correctly on the instance itself should fix the problem. However, this affects enough users that we still need to set some kind of default.

@rick-pri
Copy link

@wyardley Sorry for the excessively long wait for me to reply to this. We're deploying on FreeBSD and I am setting a default in the login.conf with the line:

:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,LC_ALL=en_GB.UTF-8:\

What I'm wondering is if when puppet is run and it executes the rabbitmqctl command but that command doesn't inherit the shell's locale, and I can see from the rabbitmqctl script that it doesn't set the locale:

#!/bin/sh
##  The contents of this file are subject to the Mozilla Public License
##  Version 1.1 (the "License"); you may not use this file except in
##  compliance with the License. You may obtain a copy of the License
##  at http://www.mozilla.org/MPL/
##
##  Software distributed under the License is distributed on an "AS IS"
##  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
##  the License for the specific language governing rights and
##  limitations under the License.
##
##  The Original Code is RabbitMQ.
##
##  The Initial Developer of the Original Code is GoPivotal, Inc.
##  Copyright (c) 2007-2017 Pivotal Software, Inc.  All rights reserved.
##

# Exit immediately if a pipeline, which may consist of a single simple command,
# a list, or a compound command returns a non-zero status
set -e

# Each variable or function that is created or modified is given the export
# attribute and marked for export to the environment of subsequent commands.
set -a

# shellcheck source=/dev/null
#
# TODO: when shellcheck adds support for relative paths, change to
# shellcheck source=./rabbitmq-env
. "${0%/*}"/rabbitmq-env

HOME=/var/db/rabbitmq
run_escript rabbitmqctl_escript "${ESCRIPT_DIR:?must be defined}"/rabbitmqctl "$@"

The puppet daemon explicitly sets this when it runs:

...

# An UTF-8 locale is required
: LC_ALL=${LC_ALL:=C.UTF-8}
case $LC_ALL in
    *.UTF-8)
        ;;
    *.*)
        LC_ALL="${LC_ALL%.*}.UTF-8"
        ;;
    *)
        LC_ALL=C.UTF-8
        ;;
esac
export LC_ALL

run_rc_command "$1"

@witchbutter
Copy link

I am having the same issue where default_user and default_password have been defined in a manifest. Interestingly the error does not happen on any of my 3.6 version rabbit servers, only 3.7.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants