【问题标题】:puppet detect if a file changed but don't change itpuppet 检测文件是否更改但不更改
【发布时间】:2015-03-11 08:14:33
【问题描述】:

我想用 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 更改。我不知道如何用 puppet 做到这一点,即使它是可能的。有什么想法吗?

任何帮助将不胜感激

【问题讨论】:

  • 在这种情况下,将文件的所有者设置为 root/root 以阻止 Jenkins 更改它。
  • 感谢@BMW 的回复。我尝试了您的建议,但它不起作用,因为 puppet 以 root 身份启动 jenkins 服务,因此 jenkins 服务可以将 config.xml 文件的所有者更改回 jenkins:jenkins。

标签: jenkins puppet rhel


【解决方案1】:

使用 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
}

【讨论】:

  • 感谢您的解决方案,我会在星期一测试它。
【解决方案2】:
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']
}

这将在初始创建或文件更改时通知服务 jenkins。

【讨论】:

    【解决方案3】:

    另一种方法是使用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,
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2018-09-13
      • 2016-11-01
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多