Puppet远程文件

puppet 4.4 之前的版本不支持 http 方式同步文件。可以用如下代码来自定义远程文件功能:

  define remote_file($remote_location=undef, $mode='0644', $service=undef, $md5=undef){
    exec{ "retrieve_${title}":
    unless => "/usr/bin/md5sum ${title} |/usr/bin/grep -w ${md5}",
    command => "/usr/bin/curl -s ${remote_location} --create-dirs -o /tmp${title} && /usr/bin/md5sum /tmp${title} |/usr/bin/grep -w ${md5} && /usr/bin/mv -f ${title} /tmp && /usr/bin/mv -f /tmp${title} ${title} || exit 1",
    #creates => $title,
    }

    file{$title:
    mode    => $mode,
    require => Exec["retrieve_${title}"],
    notify => Service["$service"]
    }
  }

creates => $title, 此参数是文件不存在时才创建,应删去

调用示例

remote_file {
  '/usr/local/bin/kube-proxy':
    mode => '0755',
    service => 'kube-proxy',
    md5 => '7f88a9057292971b10ad6de794f9ba62',
    remote_location => 'http://yum.intra.xxx.cn/soft/k8s/kube-proxy'
}

做成模块

也可以做成模块,结构如下:

[root@itop puppet]# tree utils/
utils/
└── manifests
    ├── init.pp
    └── wget.pp

init.pp

class utils {
    include utils::wget
}

wget.pp

class utils::wget {
  define remote_file($remote_location=undef, $mode='0644', $service=undef, $md5=undef){
    exec{ "retrieve_${title}":
    unless => "/usr/bin/md5sum ${title} |/usr/bin/grep -w ${md5}",
    command => "/usr/bin/curl -s ${remote_location} --create-dirs -o /tmp${title} && /usr/bin/md5sum /tmp${title} |/usr/bin/grep -w ${md5} && /usr/bin/mv -f ${title} /tmp && /usr/bin/mv -f /tmp${title} ${title} || exit 1",
    #creates => $title,
    }

    file{$title:
    mode    => $mode,
    require => Exec["retrieve_${title}"],
    notify => Service["$service"]
    }
  }
}

调用

class k8sdev::worker {
  include utils::wget
  utils::wget::remote_file {
    '/usr/local/bin/kube-proxy':
      mode => '0755',
      service => 'kube-proxy',
      md5 => '7f88a9057292971b10ad6de794f9ba62',
      remote_location => 'http://yum.intra.xxx.cn/soft/k8s/kube-proxy'
  }

参考

1. https://serverfault.com/questions/639966/can-puppet-file-source-be-from-a-web-service
2. https://stackoverflow.com/questions/18844199/how-to-fetch-a-remote-file-e-g-from-github-in-a-puppet-file-resou

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注