如何使用puppet安装本地rpm

如何使用puppet安装本地rpm,puppet,Puppet,我正在尝试使用puppet安装特定的rpm,我的init.pp是: class nmap { package {'nmap': provider => 'rpm', source => "<Local PATH to the RPM>", } } 它可以工作,但如何使用。/files/指定源路径并成功应用 当我使用: source=>'puppet:///files/nmap-6.45-1.x86_64.rpm“, 我得到一个错误: Debug:

我正在尝试使用puppet安装特定的rpm,我的init.pp是:

class nmap {
  package {'nmap':
    provider => 'rpm',
    source => "<Local PATH to the RPM>",
  }
}
它可以工作,但如何使用
。/files/
指定源路径并成功应用

当我使用:

source=>'puppet:///files/nmap-6.45-1.x86_64.rpm“,

我得到一个错误:

Debug:执行'/bin/rpm-ipuppet:///files/nmap-6.45-1.x86_64.rpm“
错误:执行'/bin/rpm-ipuppet:///files/nmap-6.45-1.x86_64.rpm'返回1:错误:打开puppet:///files/nmap-6.45-1.x86_64.rpm 失败:没有这样的文件或目录

Error:/Stage[main]/Nmap/Package[Nmap]/sure:从缺席到现在的更改失败:执行'/bin/rpm-i'puppet:///files/nmap-6.45-1.x86_64.rpm'返回1:错误:打开puppet:///files/nmap-6.45-1.x86_64.rpm 失败:没有这样的文件或目录
`

运行命令时:

sudo puppet apply--modulepath=/home/user1/qa/puppet\u qa/modules/-e“include nmap”--debug

与资源类型不同,该类型不支持puppet。安装前,您需要使用
文件
资源下载
rpm
。如果这是一个反复出现的问题,请创建一个
定义类型
,一次性完成这些操作(想想宏),例如


编辑:通常建议使用本地yum repo,另请参见下面@rojs的第一条评论。

您使用的模块名称似乎是
nmap
。您可以像这样使用相同的
source
参数

source => 'puppet:///modules/nmap/nmap-6.45-1.x86_64.rpm',
  puppet:///modules/<modulename>/<file you want to access>
访问模块下文件的语法如下所示

source => 'puppet:///modules/nmap/nmap-6.45-1.x86_64.rpm',
  puppet:///modules/<modulename>/<file you want to access>
puppet:///modules//
请参见此处的链接,“rpm”软件包可以通过以下方式安装:

 package{'epel-release-6':
            provider => 'rpm',
            ensure => 'present',
            source => '/usr/local/rpms/epel-release-latest-6.noarch.rpm',
        }

编辑:更正输入错误,确保让我们从头开始:

在服务器上:

$rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
$yum -y install puppetserver
$vi /etc/sysconfig/puppetserver #change JAVA args
$systemctl start puppetserver
$systemctl enable puppetserver
$vi /etc/puppetlabs/puppet/puppet.conf #Add “dns_alt_names” in [master]
关于代理:

$rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
$yum -y install puppet-agent
$systemctl start puppet
$systemctl enable puppet
$vi /etc/puppetlabs/puppet/puppet.conf # Add “server = pupmaster” in [main]


puppet cert list
puppet cert sign




/etc/puppetlabs/code/environments/production/manifests/site.pp:

node webserver {
  class { 'apache': }
}

node dbserver {
  class { ‘mysql’: }
}


mkdir –p /etc/puppetlabs/code/environments/production/modules/apache/{manifests, files}
apacheinstall.pp:

  class apache::apacheinstall {

    if $osfamily == 'redhat' {

            package { 'httpd':
                      ensure => 'latest'
                    }

            service {'httpd':
                       ensure => 'running',
                      require => Package["httpd"],
                    }

            file { '/var/www/html/ndex.html':
                    mode => "0644",
                    owner => 'root',
                    group => 'root',
                    source => 'puppet:///modules/apache/index.html',
                  }
    }
    elsif $osfamily == 'debian' {

            package { 'apache2':
                      ensure => 'latest'
                    }

            service {'httpd':
                      ensure => 'running',
                      require => Package["httpd"],
                    }
    }
  }
  class apache::mysqlinstall {

            exec { 'wget':
            path      => [ "/bin/", "/sbin/", "/usr/bin/", "/usr/sbin/" ],
            command   => "/usr/bin/wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm && rpm -ivh /tmp/mysql57-community-release-el7-9.noarch.rpm",
            cwd       => '/tmp/',
            creates   => '/etc/firstruns/p1.done',
            }
  }
INIT.pp

  class apache {
    notify { 'Installing and Configuring Webserver for $osfamily': }
    include apache::mysqlinstall
  }
Mysqlinstall.pp:

  class apache::apacheinstall {

    if $osfamily == 'redhat' {

            package { 'httpd':
                      ensure => 'latest'
                    }

            service {'httpd':
                       ensure => 'running',
                      require => Package["httpd"],
                    }

            file { '/var/www/html/ndex.html':
                    mode => "0644",
                    owner => 'root',
                    group => 'root',
                    source => 'puppet:///modules/apache/index.html',
                  }
    }
    elsif $osfamily == 'debian' {

            package { 'apache2':
                      ensure => 'latest'
                    }

            service {'httpd':
                      ensure => 'running',
                      require => Package["httpd"],
                    }
    }
  }
  class apache::mysqlinstall {

            exec { 'wget':
            path      => [ "/bin/", "/sbin/", "/usr/bin/", "/usr/sbin/" ],
            command   => "/usr/bin/wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm && rpm -ivh /tmp/mysql57-community-release-el7-9.noarch.rpm",
            cwd       => '/tmp/',
            creates   => '/etc/firstruns/p1.done',
            }
  }

回答正确,但我要补充一点,在puppet存储库中存储RPM并每次编写文件和包资源会很快过时。最好设置您自己的yum服务器并从那里分发rpm。需要做一些工作来设置,但一旦设置完成,事情就会变得更容易。//,上面的内容适用于带有puppetlabs/centos-6.6-32-Puppet vagrant box的Puppet,来自vagrantbox.es.provider=>“rpm”对我来说不见了;否则,首先,yum会搜索包-在我的情况下,这会失败有时这样测试更容易:
sudo puppet apply-e“package{['your-rpm']:sure=>'ver.1';}
而不是包括文件。$mysql\u password=“myT0pS3cretPa55worD”在site.pp中