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
- Pass an integer or integer string, e.g. password_min_age => 7
- Cast/clean the upstream data (Integer($min_age)) before assigning
- 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
- Type policy parameters as Integer in Puppet signatures
- Normalize '' to undef in lookup layers
- Remember units are whole days for chage-backed properties
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
- Password maximum age must be provided as a number.
- Invalid value %{value}
- Invalid value %{value}.
- Invalid hold value %{value}. %{doc}
- Repeat must be a number
AI-assisted analysis of puppetlabs/puppet@e227c27540 (2026-08-21).
Data as JSON: /api/errors/40efdd84e06748b6.
Report an issue: GitHub.