2015-03-11 2 views
1

Я хочу управлять файлом config.xml службы jenkins с марионеткой. Проблема в том, что если Puppet изменяет файл config.xml и перезапускает службу jenkins, файл config.xml перезаписывается загруженной в настоящее время конфигурацией дженкинсов, а изменения, сделанные марионеткой, теряются.puppet обнаруживает, если файл изменен, но не меняет его

Вот что я есть сейчас:

file { '/var/lib/jenkins/config.xml': 
    source => 'puppet:///modules/jenkins/config.xml', 
    owner  => jenkins, 
    group  => jenkins, 
    mode  => '0644' 
} 

service { 'jenkins': 
    ensure => running, 
    enable => true, 
    subscribe => File['/var/lib/jenkins/config.xml'] 
} 

Мой подход, чтобы остановить службу Дженкинс, чем скопировать config.xml и запустить службу снова ... естественно служба не должна быть остановлена ​​и снова начал каждый раз, когда марионетка запускается, но только при изменении config.xml. Я не знаю, как это сделать с марионеткой, и даже если это возможно. Есть идеи?

Любая помощь будет высоко ценится

+0

в этом случае установить владельца файла в корневой/корень, чтобы остановить Дженкинс, чтобы изменить его. – BMW

+0

Благодарим вас за ответ @BMW. Я попробовал ваше предложение, но оно не работает, потому что марионетка запускает службу jenkins как root, и поэтому служба jenkins может изменить владельца файла config.xml обратно в jenkins: jenkins. –

ответ

1

Это своего рода болезненная вещь, чтобы справиться с куклой, но один из способов сделать это, чтобы обнаружить изменения в файл промежуточной, а затем использовать Exec для секвенирования изменения файла:

file { '/some/staging/path/config.xml': 
    source => 'puppet:///modules/jenkins/config.xml', 
    owner  => jenkins, 
    group  => jenkins, 
    mode  => '0644', 
    notify => Exec['Update Jenkins Config'] 
} 

exec { 'Update Jenkins Config': 
    command  => '/sbin/service jenkins stop && /bin/cp /some/staging/path/config.xml /var/lib/jenkins/config.xml && /sbin/service jenkins start', 
    refreshonly => true 
} 
+0

Спасибо за ваше решение, я проведу его в понедельник. –

1
file { '/var/lib/jenkins/config.xml': 
    source => 'puppet:///modules/jenkins/config.xml', 
    owner  => jenkins, 
    group  => jenkins, 
    mode  => '0644', 
    notify => Service["jenkins"] 
} 

service { 'jenkins': 
    ensure => running, 
    enable => true, 
    subscribe => File['/var/lib/jenkins/config.xml'] 
} 

Это будет уведомлять службы Дженкинс о первоначальном создании или изменений в файл.

0

еще будет использовать transition module. вот пример:

transition { 'stop jenkins service': 
    resource => Service['jenkins'], 
    attributes => { ensure => stopped }, 
    prior_to => File['/var/lib/jenkins/config.xml'], 
}  

file { '/var/lib/jenkins/config.xml': 
    source => 'puppet:///modules/jenkins/config.xml', 
    owner  => jenkins, 
    group  => jenkins, 
    mode  => '0644', 
} 

service { 'jenkins': 
    ensure => running, 
    enable => true, 
} 
Смежные вопросы