On Tue, Feb 12, 2013 at 5:19 AM, Carlos Tapia <
carlos.tapia.corva...@gmail.com> wrote:
> *Hi guys!*
> *
> *
> *I'm trying to perform a service creation using SC and if this service
> is already created, using an "unless" we can avoid it. *
>
This is the resource I use to install the jenkins agent service:
exec { 'install-service':
command => "sc.exe create ${jenkins::servicename} start= demand
binpath= ${jenkins::serviceexe} displayname= ${jenkins::servicename}",
path => "${path}",
logoutput => true,
unless=> "sc.exe query ${jenkins::servicename}",
}
Note that `sc.exe query ` will return zero if the service
exists, preventing the service from being reinstalled.
> *Sound very simple, but for any reason, when instructions are called by
> puppet they are not working instead you call directly, same instructions,
> using DOS, where works sweet.*
> *
> *
> *Here is part of the code:*
>
> $cmd = "C:\\Windows\\System32\\cmd.exe"
>
It's not necessary to wrap the sc.exe command in cmd.exe. That sort of
thing is only necessary when trying to execute built-ins like echo, mkdir,
etc. So for example, to echo, you have to do: cmd.exe /c echo 'foo'
$scPath = "C:\\Windows\\System32\\sc.exe"
> $findPath = "C:\\Windows\\System32\\find.exe"
>
Notice in my exec resource above, I set path => ${path} and then executed
'sc.exe'. This tells the exec resource to use the `path` fact, so that I
don't have to specify where `sc.exe` lives. For example, if SYSTEMDRIVE is
'D:'
# Create Service
> exec{'Create Service nsc-devops':
> command => "${cmd} /c \"${scPath} create nsc-devops binPath=
> \"C:\\NSClient++\\nsclient++.exe\" DisplayName= \"NSClient Devops\" Start=
> \"auto\"\"",
> path=> 'c:\windows',
> unless => "${scPath} query nsc-devops | ${findPath} \"nsc-devops\"",
> }
>
> # Modify Service Description
> exec{'Modify Service nsc-devops':
> command => "${cmd} /c \"${scPath} description nsc-devops \"NSClient++
> managed by DevOps\"\"",
> path=> 'c:\windows',
> unless => "${cmd} /c \"${scPath} query nsc-devops\" | ${findPath}
> \"nsc-devops\"",
> }
>
>
> *and below the error.*
>
> Debug: Exec[Create Service nsc-devops](provider=windows): Executing check
> 'C:\Windows\System32\cmd.exe /c "C:\Windows\System32\sc.exe query
> nsc-devops" | C:\Windows\System32\find.exe "nsc-devops"'
> Debug: Executing 'C:\Windows\System32\cmd.exe /c
> "C:\Windows\System32\sc.exe query nsc-devops" |
> C:\Windows\System32\find.exe "nsc-devops"'
> Debug: /Stage[main]/Nagios-devops/Exec[Create Service nsc-devops]/unless:
> [SC] EnumQueryServicesStatus:OpenService FAILED 123:
> Debug: /Stage[main]/Nagios-devops/Exec[Create Service nsc-devops]/unless:
> Debug: /Stage[main]/Nagios-devops/Exec[Create Service nsc-devops]/unless:
> The filename, directory name, or volume label syntax is incorrect.
>
So error 123 is "The filename, directory name, ... is incorrect". That's
because cmd.exe is trying to execute "C:\Windows\System32\sc.exe query
nsc-devops", instead of executing C:\Windows\System32\sc.exe with the
arguments 'query' and 'nsc-devops'
Debug: Exec[Create Service nsc-devops](provider=windows): Executing
> 'C:\Windows\System32\cmd.exe /c "C:\Windows\System32\sc.exe create
> nsc-devops binPath= "C:\NSClient++\nsclient++.exe" DisplayName= "NSClient
> Devops" Sta
> rt= "auto""'
> Debug: Executing 'C:\Windows\System32\cmd.exe /c
> "C:\Windows\System32\sc.exe create nsc-devops binPath=
> "C:\NSClient++\nsclient++.exe" DisplayName= "NSClient Devops" Start=
> "auto""'
> Notice: /Stage[main]/Nagios-devops/Exec[Create Service
> nsc-devops]/returns: [SC] CreateService FAILED 1073:
> Notice: /Stage[main]/Nagios-devops/Exec[Create Service nsc-devops]/returns:
> Notice: /Stage[main]/Nagios-devops/Exec[Create Service
> nsc-devops]/returns: The specified service already exists.
> Error: C:\Windows\System32\cmd.exe /c "C:\Windows\System32\sc.exe create
> nsc-devops binPath= "C:\NSClient++\nsclient++.exe" DisplayName= "NSClient
> Devops" Start= "auto"" returned 49 instead of one of [0]
> C:/Program Files (x86)/Puppet
> Labs/Puppet/puppet/lib/puppet/util/errors.rb:60:in `fail'
>
I think you need to use something other than 'create' to modify the
description for a service that already exists.
>
> *If I run the line that puppet marks as faulted, this is windows' answer:*
> C:\>C:\Windows\System32\cmd.exe /c "C:\Windows\System32\sc.exe query
> nsc-devops" | C:\Windows\System32\find.exe "nsc-devops"
> SERVICE_NAME: nsc-devops
>
>
Just do `c:\windows\system32\sc.exe query nsc-devops`, or just `sc.exe
query nsc-devops` with the path trick above. If the service exists, it will
return exit code 0, otherwise non-zero.
> Any idea???
> Thanks for your help!
>
> BR,
> Carlos!
>
> --
> 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 puppet-users+unsubscr...@googlegro