如何使用Puppet部署档案

时间:2018-10-21 19:00:54

标签: ansible puppet idempotent

我一直在使用ansible部署在jenkins中创建的工件。剧本看起来像这样:

  1. 将tar.gz归档文件传输到远程主机(归档文件包含python代码)
  2. 停止python代码(它已设置为系统服务,该服务符号链接到/ home / arl / code中的脚本
  3. (递归)删除/ home / arl / code文件夹
  4. 将tar.gz文件提取到/ home / arl
  5. 启动代码的systemd脚本。

在p中,您可以使用服务提供商来管理服务。但是,由于要管理“状态”,因此无法将资源python_service声明为“ stopped”,然后在清单中将其声明为“ started”,因为这将导致重复的声明错误。在ansible中,这势在必行,这很容易实现。

有没有办法在木偶中实现它?

1 个答案:

答案 0 :(得分:1)

对于您正在做的事情,您将希望使用一系列Exec资源类型并使用->资源排序运算符。所以你的人偶清单看起来像这样:

scp_tarball_command = '/usr/bin/scp ...';
stop_python = '/usr/sbin/systemd stop whatever';
delete_code_dir = '/bin/rm -rf /home/arl/code';
untar_tarball = '/usr/bin/tar -xzf ...';
start_python = '/usr/sbin/systemd start whatever';

exec { $scp_tarball_command: creates => 'whatever'} ->
exec { $stop_python: refreshonly => true} ->
exec { $delete_code_dir: refreshonly => true} ->
exec { $untar_tarball: refreshonly => true} ->
exec { $start_python: refreshonly => true}

您需要在此处查看有关资源排序的详细信息:https://puppet.com/docs/puppet/5.3/types/exec.html

我也建议将代码放在类中,并用类参数替换硬编码的内容。