0

クラスで私はこれをしたいと思います:

stop a service
reinstall a package
start the previous service again

これが私のクラスです:

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"]
    }
}

このエラーが発生しました:

定義の重複: Service[ServiceName] はファイル /puppet/mycsass.pp の 2 行目で既に定義されています。/puppet/myclass.pp:9 で再定義できません

4

2 に答える 2

1

残念ながら、それはあなたが望むほど単純ではないようです。Puppetユーザーのグループの問題について簡単に説明します。

この見積もりは、投稿をまとめたものです。

Puppetはスクリプトエンジンではなく、その言語はスクリプト言語ではありません。Puppetでスクリプトを書くことはできますが、面倒です。Puppetは、システムリソースの特定の状態を達成および維持することを目的としており、ここからそこに到達するためのメカニズムを意図的に強調しません。したがって、「Puppetを実行させるにはどうすればよいですか?」有用な質問になることはめったにありません。

投稿者はまた、私があなたの例に適応させた代替の(魅力的ではないが)解決策を提供します:

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"]
  }
}
于 2013-02-06T18:59:09.580 に答える
0

よくわかりませんが、ここで仮想リソースが役立つかもしれません...私が使用している2つの.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 は次のようになります。

class testmodule::test inherits testmodule {

  realize(Service["mysqld"])

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

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

  realize(Service["mysqld"])

}

あなたのsite.ppでできること:

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

お役に立てれば....

于 2013-02-06T22:05:33.863 に答える