2015-12-02 73 views
2

我发现了一个傀儡模块,其作者只是添加了一堆修改,否则我必须手动完成自己的修改。如何从源代码本地构建和安装Puppet模块?

这实际上发生在20小时前。

我已经下载了主分支到一个zip文件,提取它到我的模块文件夹,并运行puppet module build --verbose /etc/puppet/modules/arioch-redis,无济于事。

我明白这绝对不是正常的行为,但我觉得这个问题值得一些关注。

从源代码使用模块,特别是在快速移动的项目中,或依靠快速反馈,肯定会有一个用例。

我已经对此进行了一些研究,请随时在评论中询问“您是否看过X”问题。

例如,我看了https://docs.puppetlabs.com/puppet/latest/reference/modules_publishing.html#build-your-module,但它似乎主要是为了将模块上传到Forge,而不是从源代码本地安装。

另外,我的尝试在“Build Your Module”部分失败。

以下全部三个似乎用“install librarian-puppet”来回答这个问题,但考虑到我们可以编写自己的模块,使用librarian-puppet来使用公开可用的git的源代码似乎很愚蠢库使用一个简单的模块:(我在寻找的答案,会发生什么后OP会在这个问题的答案创建私有回购)

Changing puppet module source

How to install a puppet file from a local repo with puppet module install(我的借口:我不t只需要使用puppet module install工具,我也可以使用其他木偶工具。)

Using puppet module straight from a cloned repo(我的借口:答案似乎并不相关的这个问题。)

Installing a puppet module from a manifest script(我的借口:再一次,最好的答案,我认为这是非常适合的问题,就是“不使用木偶为此,找到解决方法。“在这种情况下,解决方法是让Vagrant部分使用Shell Provisioning。)

如果这确实是重复或摘要,请在评论中说出来,也许我可以说明。编辑欢迎!

我需要破解metadata.json的内容吗?

我应该将这个资源库克隆到某个地方并将其链接到我自己的临时Forge帐户中吗?

摘要:

我怎么可能会得到模块的veeeeerry最新版本,当它传递特拉维斯其Git仓库,但伪造使它可用之前?

回答

5

从伪造下载的Puppet模块仍然是文件夹,puppet模块命令只是解开它们并下载与API的依赖关系。

所以,你的方法是关闭,你只需要确保该文件夹具有正确的目录名称:

因此,对于你的例子:

$ puppet module list 
/Users/foo/.puppet/modules 
├── fiddyspence-sysctl (v1.1.0) 
├── puppetlabs-apt (v1.8.0) 
├── puppetlabs-aws (v1.0.0) 
├── puppetlabs-nodejs (v0.7.1) 
└── puppetlabs-stdlib (v4.6.0) 
$ cd /Users/foo/.puppet/modules 
$ ll 
total 0 
drwxr-xr-x 15 foo staff 510 Mar 17 2015 apt 
drwxr-xr-x 18 foo staff 612 Mar 26 2015 aws 
drwxr-xr-x 14 foo staff 476 Jan 22 2015 nodejs 
drwxr-xr-x 17 foo staff 578 Apr 15 2015 stdlib 
drwxr-xr-x 12 foo staff 408 Feb 9 2015 sysctl 
$ wget https://github.com/arioch/puppet-redis/archive/master.zip 
--2015-12-02 11:56:24-- https://github.com/arioch/puppet-redis/archive/master.zip 
Resolving github.com... 192.30.252.130 
Connecting to github.com|192.30.252.130|:443... connected. 
HTTP request sent, awaiting response... 302 Found 
Location: https://codeload.github.com/arioch/puppet-redis/zip/master [following] 
--2015-12-02 11:56:24-- https://codeload.github.com/arioch/puppet-redis/zip/master 
Resolving codeload.github.com... 192.30.252.144 
Connecting to codeload.github.com|192.30.252.144|:443... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 29509 (29K) [application/zip] 
Saving to: 'master.zip' 

master.zip     100%[==================================================>] 28.82K --.-KB/s in 0.1s 

2015-12-02 11:56:25 (257 KB/s) - 'master.zip' saved [29509/29509] 

$ unzip master.zip 
Archive: master.zip 
4fb33b960a09bfb459eff20ee112bfc9e0a1c096 
    creating: puppet-redis-master/ 
    inflating: puppet-redis-master/.fixtures.yml 
    inflating: puppet-redis-master/.gitignore 
extracting: puppet-redis-master/.puppet-lint.rc 
    inflating: puppet-redis-master/.travis.yml 
    inflating: puppet-redis-master/Gemfile 
    inflating: puppet-redis-master/LICENSE 
    inflating: puppet-redis-master/README.md 
    inflating: puppet-redis-master/Rakefile 
    creating: puppet-redis-master/manifests/ 
    inflating: puppet-redis-master/manifests/config.pp 
    inflating: puppet-redis-master/manifests/init.pp 
    inflating: puppet-redis-master/manifests/install.pp 
    inflating: puppet-redis-master/manifests/params.pp 
    inflating: puppet-redis-master/manifests/preinstall.pp 
    inflating: puppet-redis-master/manifests/sentinel.pp 
    inflating: puppet-redis-master/manifests/service.pp 
    inflating: puppet-redis-master/metadata.json 
    creating: puppet-redis-master/spec/ 
    creating: puppet-redis-master/spec/classes/ 
    inflating: puppet-redis-master/spec/classes/redis_sentinel_spec.rb 
    inflating: puppet-redis-master/spec/classes/redis_spec.rb 
extracting: puppet-redis-master/spec/spec.opts 
    inflating: puppet-redis-master/spec/spec_helper.rb 
    creating: puppet-redis-master/templates/ 
    inflating: puppet-redis-master/templates/redis-sentinel.conf.erb 
    inflating: puppet-redis-master/templates/redis-sentinel.init.erb 
    inflating: puppet-redis-master/templates/redis.conf.erb 
$ mv puppet-redis-master/ redis 
$ ll 
total 64 
drwxr-xr-x 15 foo staff 510 Mar 17 2015 apt 
drwxr-xr-x 18 foo staff 612 Mar 26 2015 aws 
-rw-r--r-- 1 foo staff 29509 Dec 2 11:56 master.zip 
drwxr-xr-x 14 foo staff 476 Jan 22 2015 nodejs 
drwxr-xr-x 14 foo staff 476 Nov 30 15:10 redis 
drwxr-xr-x 17 foo staff 578 Apr 15 2015 stdlib 
drwxr-xr-x 12 foo staff 408 Feb 9 2015 sysctl 

你会发现它会抱怨缺少的依赖关系。

$ puppet module list 
Warning: Module 'puppetlabs-apt' (v1.8.0) fails to meet some dependencies: 
    'arioch-redis' (v1.1.3) requires 'puppetlabs-apt' (>= 2.0.1 <3.0.0) 
Warning: Missing dependency 'stahnma-epel': 
    'arioch-redis' (v1.1.3) requires 'stahnma-epel' (>= 1.0.2 <2.0.0) 
/Users/foo/.puppet/modules 
├── arioch-redis (v1.1.3) 
├── fiddyspence-sysctl (v1.1.0) 
├── puppetlabs-apt (v1.8.0) invalid 
├── puppetlabs-aws (v1.0.0) 
├── puppetlabs-nodejs (v0.7.1) 
└── puppetlabs-stdlib (v4.6.0) 

据我所知:有没有办法解决从本地模块使用Puppet的模块命令的依赖关系。

这就是馆员傀儡进来:

$ cd redis/ 
$ librarian-puppet install --path ../. --verbose 
[Librarian] Ruby Version: 2.1.2 
[Librarian] Ruby Platform: x86_64-darwin14.0 
[Librarian] Rubygems Version: 2.4.8 
[Librarian] Librarian Version: 0.6.3 
[Librarian] Librarian Adapter: puppet 
[Librarian] Librarian Adapter Version: 2.2.1 
[Librarian] Project: /Users/foo/.puppet/modules/redis 
[Librarian] Specfile: Puppetfile 
[Librarian] Lockfile: Puppetfile.lock 
[Librarian] Git: /opt/boxen/homebrew/bin/git 
[Librarian] Git Version: 2.4.3 
[Librarian] Git Environment Variables: 
[Librarian] GIT_PS1_SHOWDIRTYSTATE=true 
[Librarian] GIT_PS1_SHOWSTASHSTATE=true 
[Librarian] GIT_PS1_SHOWUNTRACKEDFILES=true 
[Librarian] GIT_PS1_SHOWUPSTREAM=auto 
[Librarian] Pre-Cached Sources: 
[Librarian] [:forge, "https://forgeapi.puppetlabs.com", {}] 
[Librarian] Specfile /Users/foo/.puppet/modules/redis/Puppetfile not found, using defaults 
[Librarian] Post-Cached Sources: 
[Librarian] [:forge, "https://forgeapi.puppetlabs.com", {}] 
[Librarian] The specfile is unchanged: nothing to do. 
[Librarian] Install: dependencies resolved 
[Librarian] Installing puppetlabs-stdlib/4.9.0 <https://forgeapi.puppetlabs.com> 
[Librarian] Installing puppetlabs-apt/2.2.0 <https://forgeapi.puppetlabs.com> 
[Librarian] Installing stahnma-epel/1.2.0 <https://forgeapi.puppetlabs.com> 
$ puppet module list 
/Users/petersouter/.puppet/modules 
├── arioch-redis (v1.1.3) 
├── fiddyspence-sysctl (v1.1.0) 
├── puppetlabs-apt (v2.2.0) 
├── puppetlabs-aws (v1.0.0) 
├── puppetlabs-nodejs (v0.7.1) 
├── puppetlabs-stdlib (v4.9.0) 
└── stahnma-epel (v1.2.0) 

如果你不想使用木偶,图书管理员,你也可以只手动更新这些模块:

$ puppet module install puppetlabs-apt -v 2.0.1 --force 
Notice: Preparing to install into /Users/petersouter/.puppet/modules ... 
Notice: Downloading from https://forgeapi.puppetlabs.com ... 
Notice: Installing -- do not interrupt ... 
/Users/foo/.puppet/modules 
└── puppetlabs-apt (v2.0.1) 

$ puppet module install stahnma-epel -v 1.2.0 --force 
Notice: Preparing to install into /Users/petersouter/.puppet/modules ... 
Notice: Downloading from https://forgeapi.puppetlabs.com ... 
Notice: Installing -- do not interrupt ... 
/Users/foo/.puppet/modules 
└── stahnma-epel (v1.2.0) 
+1

//为了清晰,详细,以及您回答比我更一般的问题的方式,我已经提出了这个问题,以便我可以立即将其应用于问题的案例。我会测试这个,如果它工作,接受这个答案。谢谢你,@PeterSouter。 –

+0

//,看看那个凯迪拉克的答案。 OO-WEE! –

+0

很高兴帮助! :d –