Thanks for your help Rob!
Yes even, I have second doubts about if statement, I will find some other
way to fix this conditional statement.
On Wednesday, May 3, 2017 at 6:21:52 AM UTC-7, Rob Nelson wrote:
>
> I think some characters got gobbled during pasting or by Google Groups; it
> looks like the parameter block to your type is missing the start/finish.
> But that's syntax, I'm sure you've got it right or can fix any typos
> yourself.
>
> The suggestion I have is about a common anti-pattern: Don't Repeat
> Yourself (DRY). You have two exec resource declarations, only of which is
> instantiated, with the same parameter list for both. The only difference is
> interpolation of the password, which is set inside the control flow. Moving
> the exec instantiation *after* the conditional blocks helps with
> maintenance in the long term, but also makes it easier for someone to read
> your code later (including future you!) and see that the end result is a
> single resource. That would look something like this:
>
> define certificate-generator (
> user => root,
> group => root,
> ) {
> if ( $env != 'test' or $env != 'qa') {
> case $::target_cert_type {
> 'type1': {
> $password = '123'
> }
> 'type2': {
> $password = '345'
> }
> default: {
> fail("No password defined")
> }
> }
> }
> else {
> case $::target_cert_type {
> 'type1': {
> $password = '567'
> }
> 'type2': {
> $password = '789'
> }
> default: {
> fail("No password defined ")
> }
> }
> }
>
> # Single exec resource here with variable inputs determined above
> exec { "certificate-generator":
> command => 'sh certgen.sh',
> path => '/bin/bash',
> logoutput => true,
> onlyif => "test ! -f ${cert_basedir}/${host}.jks"
> source => "puppet:///modules/mymodule/certgen/certgen.sh $password"
> }
> }
>
> I still have a concern about your if statements, though. If `env` is
> `prod`, it obviously matches for if ( $env != 'test' or $env != 'qa').
> But if `env` is `qa`, it STILL matches because $env != 'test'
> is true and it never reaches the $env != 'qa' comparison. And if it's
> `test`, it still matches because after failing the first test, it passes
> the second test. The `else` condition is never reached that I can see.
> Changing that to an AND match, or using equality and swapping the if/else
> blocks, appears closer to the described desired state.
>
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/b207bbc1-8ca7-4fce-886e-96edc7230557%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.