Назад | Перейти на главную страницу

марионеточные параметризованные классы

У меня возникают проблемы с получением параметризованных классов, работающих в марионетке 2.6.4 (клиент и главный)

######## from /etc/puppet/manifests/nodes.pp 
# defining one node to use certain version
#######################################################
node 'dev-internal-000008.domain.com' {
         include software($version="dev-2011.02.11")
}
# from /etc/puppet/modules/software/manifests/init.pp

Я устанавливаю версию по умолчанию

#
class software($version="dev-2011.02.04b") {
  File {
    links => follow
  }

  file { "/opt/software_AIR":
    ensure => directory
  }

  file { "/opt/software_AIR/share":
    source => "puppet://puppet/software/air/$version",
    recurse => "true",
  }
}
#

ошибки от кукловода

#
err: Could not parse for environment production: Syntax error at '='; expected ')' at /etc/puppet/manifests/nodes.pp:10 on node dev-internal-domain.com
#

нашел исправление для этого

пытаться

node 'dev-internal-000008.domain.com' {
  class { customsoftware:version => "dev-2011.02.04b" }
}

Параметризованные классы не работают с include, К сожалению. Вы должны использовать новый синтаксис объявления альтернативного класса который был введен одновременно с параметризованными классами:

node 'dev-internal-000008.domain.com' {
    # include software($version="dev-2011.02.11") # (doesn't work)
    class {'software':
        version => "dev-2011.02.11",
    } # works
}

Вещи:

  • Обратите внимание, что это выглядит как ресурс (file, serviceи т. д.) декларация.
  • Тот факт, что определение и объявление начинаются со слова class, сбивает с толку, но будьте осторожны, и все будет в порядке.
  • Вы не можете объявить класс таким образом более одного раза, как вы можете с include. Ожидается, что это изменится в 2.7, и, вероятно, будет введен более удобный синтаксис.

Вы также можете использовать селектор на основе имени хоста:

class {'software':
    version         => $::hostname ? {
      /hostname1/   => 'dev-2011.02.11',
      default       => 'dev-2011.02.04b',
    },
}