Оверлейные программы неспециалиста и Марионетка

Вы соединяетесь с системой от интернет-соединения с фиксированным/статичным IP-адресом? раз так Вы могли добавить в белый список позволенные соединения и блок остальные.

3
задан 3 March 2011 в 16:42
2 ответа

Я не знаю хинду, перевозку или специфические особенности неспециалиста, и я не вижу существующих модулей в марионеточном штамповочном прессе модуля, но от беглого взгляда на некоторую хинду документацию неспециалиста похоже, что это было бы довольно просто для записи этого самостоятельно с Марионеткой:

stage { "first": before => Stage[main] } # Set up first stage, before main

class layman { # "overlays"?
  package { "layman": ensure => present }
  # Then everything else (file, execs, whatever) to configure layman,
  # overlays, etc
  # Looks to me like you need to change /etc/make.conf, /etc/layman/layman.cfg
  # and write some execs that run "layman -a <overlay-name>"
  # depending on output of "layman -i <overlay-name>"
  # or possibly grepping /var/lib/layman/overlays.xmls
}

class{"layman": stage => "first"} # Set layman class to run in the first stage

Вместо того, чтобы использовать этапы Вы могли вместо этого иметь require => Class[layman] на весь package операторы, которым нужен он. Используя требуют, является более подробным; я использовал бы его, если бы мне только были нужны несколько вещей, или если я требовал определенного наложения. Я полагаю, что необходимо обычно избегать использования, требует, чтобы крест подготовил границы, однако, поскольку это и избыточно и вероятно щекотать странные ошибки.

Альтернатива, в зависимости от того, в чем Вы нуждаетесь, избегает этапов и только делает явный, требуют упорядочивания. Я действительно наполняю как это RHEL и конфеткой repos:

# In a "layman" module.
class layman {
  [...]
}

define layman::overlay() {
  exec {
    "layman -a $name":
      require => Class[layman],
      creates => "/var/lib/layman/${name}",
  }
}

class layman::overlay::php {
  layman::overlay { "php": }
}

class layman::overlay::apache2 {
  layman::overlay { "apache2": }
}

class apache {
  include layman::overlay::apache2
  package { "apache2":
    ensure => present,
    require => Class[layman::overlay::apache2];
  }
  file { "/etc/apache2/conf.d/whatever.conf":
    source => "...",
    require => Package[apache2],
    notify => Service[apache2];
  }
  service { "apache2":
    ensure => running,
    enable => true,
    require => [ Package[apache2], File["/etc/apache2/conf.d/whatever.conf"] ];
  }

}

# "yoursite" module or "somephpapp" module
class yoursite::somephpapp {
  include apache
  include layman::overlay::php
  package { "somephpapp":
    ensure => present,
    require => [ Class[apache], Class[layman::overlay::php] ];
  }
  file {
    "/path/to/somephpapp.conf":
      source => "...",
      require => Package[somephpapp],
      notify => Service[apache2]; # probably not actually required, example
  }
}
3
ответ дан 3 December 2019 в 06:19

В дополнение к ответу freiheit вот то, с чем я закончил.

class packages-layman {
    Exec { path => '/usr/bin:/bin:/usr/sbin:/sbin', loglevel => 'debug' }

    package { 'app-portage/layman': ensure => 'installed' }

    file { '/etc/eix-sync.conf':
        ensure => present,
        content => '*',
    }

    line { 'layman-make.conf-overlay':
        file => '/etc/make.conf',
        line => 'source /var/lib/layman/make.conf',
    }

    exec { 'layman-list':
        command => 'layman -o "http://dev.mycompany.com" -L',
        require => [
            Package['app-portage/layman'],
            Service['openvpn']
        ],
    }

    exec { 'layman-my-overlay':
        command => 'layman -o "http://dev.mycompany.com" -a myoverlay',
        returns => [0,1],
        require => Exec['layman-list'],
    }

    exec { 'layman-eix-sync':
        command => 'eix-sync',
        require => [
            File['/etc/eix-sync.conf'],
            Line['layman-make.conf-overlay'],
            Exec['layman-my-overlay'],
        ],
    }
}

Обратите внимание, что должностное лицо 'списка неспециалиста' там для преодоления то, что, кажется, ошибка в версии неспециалиста на хинду, который препятствует тому, чтобы оверлейные программы работали, пока они не были перечислены.

Марионетка может выбрать к командам выполнения в любом произвольном порядке, таким образом, порядок различных задач осуществляется с весь require записи. Для проверки задача происходит после этого, используйте a require как так:

package { 'app-misc/my-custom-package':
    ensure => 'installed',
    require => Exec['layman-eix-sync']
}

Этому нужно это определение line от Марионетки Wiki, чтобы позволить Вам отредактировать одни строки большего файла:

define line($file, $line, $ensure = 'present') {
    case $ensure {
        default : { err ( "unknown ensure value ${ensure}" ) }
        present: {
            exec { "/bin/echo '${line}' >> '${file}'":
                unless => "/bin/grep -qFx '${line}' '${file}'"
            }
        }
        absent: {
            exec { "/usr/bin/perl -ni -e 'print unless /^\\Q${line}\\E\$/' '${file}'":
                onlyif => "/bin/grep -qFx '${line}' '${file}'"
            }
        }
    }
}
1
ответ дан 3 December 2019 в 06:19

Теги

Похожие вопросы