memo

2012-03-23

puppet でヨソの class の定義を上書きする方法

すでに include されている class a の中で /tmp/a.txt が定義されているけど、 class b が読み込まれた場合は違う内容にしたい。

class a {
  file { '/tmp/a.txt':
    content => "a\n",
  }
}

class b {
  file { '/tmp/b.txt':
    content => "b\n",
  }

  include b::a
}

class b::a inherits a {
  File['/tmp/a.txt'] {
    content => "b::a\n",
  }
}


node "localhost" {
  include a
  include b
}

ヨソの class (この場合は a) を継承した子 class (b::a) を作って、そこで定義を上書きした上で、その子 class を include する。

class b の中で直接 b::a を定義した場合は、 a の定義の方が優先して使われるようなので注意。

とかいちいち調べるの面倒くさいし憶えても使いどころが無いので、いい加減 ruby 勉強してそっちで書くべきなのだろうな。