puppetlabs/puppet · error · ArgumentError

Password minimum age must be provided as a number.

Error message

Password minimum age must be provided as a number.

What it means

The user type's `password_min_age` property (days before a password may be changed; maps to chage -m) validates that the value's string form matches /^-?\d+$/ (lib/puppet/type/user.rb:297); strings are munged via Integer(). Words, decimals, or empty strings raise ArgumentError.

Source

Thrown at lib/puppet/type/user.rb:297

      sensitive true
    end

    newproperty(:password_min_age, :required_features => :manages_password_age) do
      desc "The minimum number of days a password must be used before it may be changed."

      munge do |value|
        case value
        when String
          Integer(value)
        else
          value
        end
      end

      validate do |value|
        if value.to_s !~ /^-?\d+$/
          raise ArgumentError, _("Password minimum age must be provided as a number.")
        end
      end
    end

    newproperty(:password_max_age, :required_features => :manages_password_age) do
      desc "The maximum number of days a password may be used before it must be changed."

      munge do |value|
        case value
        when String
          Integer(value)
        else
          value
        end
      end

      validate do |value|
        if value.to_s !~ /^-?\d+$/

View on GitHub (pinned to e227c27540)

Solutions

  1. Pass an integer or integer string, e.g. password_min_age => 7
  2. Cast/clean the upstream data (Integer($min_age)) before assigning
  3. Leave the parameter unset rather than '' when there is no policy

Example fix

# before
user { 'alice':
  ensure           => present,
  password_min_age => '7 days',
}

# after
user { 'alice':
  ensure           => present,
  password_min_age => 7,
}
Defensive patterns

Strategy: validation

Validate before calling

if $password_min_age != undef and "$password_min_age" !~ /^-?\d+$/ {
  fail('password_min_age must be an integer (days)')
}

Type guard

def valid_age?(v)
  v.is_a?(Integer) || (v.is_a?(String) && v =~ /\A-?\d+\z/)
end

Try / catch

begin
  Puppet::Type.type(:user).new(name: 'a', password_min_age: '7 days')
rescue ArgumentError => e
  raise unless e.message.include?('minimum age')
  # Integer()-cast the days value and rebuild
end

Prevention

When it happens

Trigger: `password_min_age => '7 days'`; `=> 0.5`; `=> ''`; arrays. Negative values pass validation (regex allows a minus) and are passed through to chage, which may then fail.

Common situations: Unit confusion ('7 days' vs 7); float data from external HR systems; empty Hiera keys resolving to '' instead of undef.

Related errors


AI-assisted analysis of puppetlabs/puppet@e227c27540 (2026-08-21). Data as JSON: /api/errors/40efdd84e06748b6. Report an issue: GitHub.