2013-02-06 3 views
0

클래스에서 내가 좋아하는 것이 작업을 수행합니다 : 불행하게도인형 오류 : 중복 정의

Duplicate definition: Service[ServiceName] is already defined in file /puppet/mycsass.pp at line 2; cannot redefine at /puppet/myclass.pp:9

+0

나는 인형이 무엇인지 모른다; 그러나 'MyClass'의 구조를 보면, 같은'name => "ServiceName"을 가진 "ServiceName-start"와 "ServiceName-Stop"서비스로 인한 오류입니까? –

+0

예, 같은 서비스를 먼저 중지하고 나중에 시작 하시겠습니까? – icn

+0

또한 [require => Service [ "ServiceNameStart"],'require => Service [ "ServiceName-start"],'? –

답변

1

:

class MyClass{ 
    service{"ServiceName-start": 
     name => "ServiceName", 
     ensure => "stopped", 
    } 
    package{"PackageName": 
     ensure => "installed", 
     require => Service["ServiceName-Start"], 
    } 
    service{"ServiceName-Stop": 
     name => "ServiceName", 
     ensure => "running", 
     require => Package["PackageName"] 
    } 
} 

나는이 오류가 발생했습니다 : 여기
stop a service 
reinstall a package 
start the previous service again 

내 클래스 그것은 당신이 원하는만큼 간단하지 않은 것 같습니다. Here's a brief explanation of the problem in the Puppet User's group.

이 견적 금액 포스트 업 :

class MyClass { 
    exec { "ServiceName-Stop": 
    command => "/bin/sh -c '/sbin/service ServiceName stop", 
    } 
    package{"PackageName": 
    ensure => "installed", 
    require => Service["ServiceName-Stop"], 
    } 
    service{"ServiceName-Start": 
    name => "ServiceName", 
    ensure => "running", 
    require => Package["PackageName"] 
    } 
} 
+0

이게 아무것도 고칠 수는 없지만 서비스의 이름이 거꾸로 있다고 생각합니다. 'ServiceName-start'는 서비스를 중지하고 'ServiceName-Stop'은 서비스를 시작합니다. 내 예제에서는 예제의 역순으로 레이블을 붙입니다. 내가 틀렸다면, 되돌릴 수 없다. :) – clang1234

0

하는 것이 될 수있다

Puppet is not a script engine, and its language is not a scripting language. You can write scripts in Puppet, but it is cumbersome. Puppet is all about achieving and maintaining particular states of system resources, intentionally de-emphasizing the mechanism for getting from here to there. Thus, "how do I make Puppet perform ?" is rarely a useful question.

이 게시물의 저자는 또한 내가 당신의 예를 들어 적응 한 다른 (하지만 덜 매력적인 솔루션)를 제공 여기에 가상 리소스가 유용 할 지 모르지만 ... 현재 사용중인 두 개의 .pp 파일의 현재 구조는 다음과 같습니다.

/etc/puppet/modules/testmodule/manifests/init.pp 
/etc/puppet/modules/testmodule/manifests/test.pp 

init.pp는 다음과 같습니다. 나는 서비스를 위해 mysqld를 사용했다.

class testmodule { 

    @service { "mysqld" : 
    ensure => stopped, 
    } 

} 

test.pp는 다음과 같습니다. 당신이 당신의 site.pp에서

class testmodule::test inherits testmodule { 

    realize(Service["mysqld"]) 

    package { "mysql" : 
    ensure => installed, 
    notify => Service["mysqld"], 
    } 

    Service["mysqld"] { 
    ensure => running, 
    } 

    realize(Service["mysqld"]) 

} 

을 수행 할 수 있습니다이 도움이

node 'my_nodename.com' { 
    include testmodule::test 
} 

희망 ....