簡體   English   中英

up檢測文件是否已更改但不更改

[英]puppet detect if a file changed but don't change it

我想用puppet管理jenkins-service的config.xml文件。 問題在於,如果Puppet更改config.xml文件並重新啟動jenkins服務,則config.xml文件將被當前加載的jenkins配置覆蓋,並且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']
}

我的方法是停止jenkins服務,而不是復制config.xml並再次啟動該服務...自然,不應在每次運行puppet時停止並重新啟動該服務,而只有在config.xml更改時才停止。 我不知道如何用p來做到這一點,即使可能的話。 有任何想法嗎?

任何幫助將非常感激

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

這將在初始創建或文件更改時通知服務詹金斯。

使用puppet處理這是一件很痛苦的事情,但是一種方法是檢測到臨時文件的更改,然后使用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
}

另一種方法是使用過渡模塊 這是一個例子:

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,
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM