FAQ
*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. *
*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"
$scPath = "C:\\Windows\\System32\\sc.exe"
$findPath = "C:\\Windows\\System32\\find.exe"


# 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.
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'

*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

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+unsubscribe@googlegroups.com.
To post to this group, send email to puppet-users@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.

Search Discussions

  • Josh Cooper at Feb 12, 2013 at 4:58 pm

    On Tue, Feb 12, 2013 at 5:19 AM, Carlos Tapia 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 <servicename>` 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+unsubscribe@googlegroups.com.
    To post to this group, send email to puppet-users@googlegroups.com.
    Visit this group at http://groups.google.com/group/puppet-users?hl=en.
    For more options, visit https://groups.google.com/groups/opt_out.

    Josh

    --
    Josh Cooper
    Developer, Puppet Labs

    --
    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+unsubscribe@googlegroups.com.
    To post to this group, send email to puppet-users@googlegroups.com.
    Visit this group at http://groups.google.com/group/puppet-users?hl=en.
    For more options, visit https://groups.google.com/groups/opt_out.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppuppet-users @
categoriespuppet
postedFeb 12, '13 at 1:20p
activeFeb 12, '13 at 4:58p
posts2
users2
websitepuppetlabs.com

2 users in discussion

Carlos Tapia: 1 post Josh Cooper: 1 post

People

Translate

site design / logo © 2022 Grokbase