在puppet中传输和删除文件

Moh*_*rie 1 puppet

我正在尝试将木偶大师的文件复制到木偶代理中.用它来安装.然后删除该文件.我已经测试了脚本,直到安装部分,它工作正常.唯一的问题是删除文件时.添加几行后,我收到此错误.

Error: Failed to apply catalog: Duplicate declaration: File[/home/mypackage-4.4.0.rpm] is already declared in file /etc/puppet/manifests/site.pp:23; cannot redeclare at /etc/puppet/manifests/site.pp:31
Run Code Online (Sandbox Code Playgroud)

这是我写的pp文件:

class mypackage {
    $version = '4.6.0'
    if $::operatingsystem == 'CentOS' {
            exec { "mypackage-uninstall":
                    path    => ['/usr/bin','/usr/sbin/','/bin','/sbin'],
                    command => "/bin/rpm -e mypackage",
            }
            file { "mypackage-${version}.rpm":
                    path    =>"/home/mypackage-${version}.rpm",
                    source  => "puppet:///modules/mypackage-${version}.rpm"
            }
            exec { "mypackage-install":
                    path    => ['/usr/bin','/usr/sbin','/bin','/sbin'],
                    command => "/bin/rpm -ivh /home/mypackage-${version}.rpm",
                    require => file["/home/mypackage-${version}.rpm"],
            }
#this is the part that i add to delete back what has been copied to the agent
            file { "mypackage-${version}.rpm":
                    path    => /home/mypackage-${version}.rpm",
                    ensure  => absent,
            }
     }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将声明更改为file {"mypackage-remove":.但同样的错误出现了.如何声明用于复制的文件并将其声明为删除?

我正在使用CentOS 6.0.我的木偶大师和经纪人都是3.7.5.

kka*_*lpl 5

在Puppet中,您可以定义所需的资源状态.

Puppet是一种配置管理解决方案,允许您定义IT基础架构的状态,然后自动强制执行所需的状态.

所以没有像文件这样的东西存在一段时间,然后它神奇地消失了.如果您使用file资源下载/复制文件,则无法通过file资源将其删除.要删除它,请使用exec例如.

exec { "remove file":
        path    => ['/usr/bin','/usr/sbin','/bin','/sbin'],
        command => "rm /home/mypackage-${version}.rpm",
        require => File["/home/mypackage-${version}.rpm"],
}
Run Code Online (Sandbox Code Playgroud)

更新: 一些值得一提的事情:

  1. 在创建排序关系时,使用资源引用.所以不是:

    require => file["/home/mypackage-${version}.rpm"]
    
    Run Code Online (Sandbox Code Playgroud)

    但:

    require => File["/home/mypackage-${version}.rpm"]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以file根据需要多次使用资源来定义不同的文件,但每个资源必须是唯一的.

    您可以通过使其标题和名称/名称变量包含$ title或其他参数的值来使实例之间的资源不同.

    对于文件资源,path属性是namevar.这意味着它也必须是独一无二的.仅更改文件名而不更改路径仍会导致Duplicate declaration错误.