帮酷LOGO
  • 显示原文与译文双语对照的内容
Puppet manifests used to provision the main GOV.UK web stack

  • 源代码名称:govuk-puppet
  • 源代码网址:http://www.github.com/alphagov/govuk-puppet
  • govuk-puppet源代码文档
  • govuk-puppet源代码下载
  • Git URL:
    git://www.github.com/alphagov/govuk-puppet.git
  • Git Clone代码到本地:
    git clone http://www.github.com/alphagov/govuk-puppet
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/alphagov/govuk-puppet
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • GOV.UK Puppet

    这里存储库包含 GOV.UK.的Puppet 模块和清单

    正在启动

    为了运行/测试 Puppet 清单,需要 ruby 1.9. x 和 Bundler 。

    依赖关系由图书管理员puppet管理,但希望这应该是透明的,除非你需要自己更新依赖关系。

    如果你位于 GOV.UK 开发VM上,则应该能够运行

    $ govuk_puppet

    它是 puppet-apply-dev 脚本的一个精简包装。

    标准

    请先熟悉我们的Puppet 标准,然后再贡献这里知识库:

    运行 rake specrake lint,在签入之前运行测试和 lint 。

    依赖项

    管理员puppet的所有模块都缓存在这个 repo 下,以确保第三方代码不会在下面发生更改,防止我们停机,提高构建时间。

    安装

    如果第一次使用这里 repo,或者 Gemfile[.lock] 或者 Puppetfile[.lock]的内容最近已经更改,则需要运行:

    $ bundle install
    $ bundle exec rake librarian:install

    因为它不是很好地支持或者维护自己的配置文件,所以避免直接使用 librarian-puppet

    运行这些命令通常是针对未知类或者函数的Puppet 错误的解决方案,如:

    • Unknown function validate_bool at.. .
    • Could not find class apt for.. .
    • Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type apt::source.. .

    在运行规格测试后,它可以能会影响与你没有修改的类的错误。

    在尝试运行 govuk_puppet 时,这也应该修复错误:

    • chown: changing ownership of '/home/vagrant/.puppet/[...]': Operation not permitted

    更新

    如果需要向 Puppetfile 添加新的MODULE,则需要运行以下命令来安装并更新缓存:

    $ bundle exec rake librarian:package

    如果需要将现有 MODULE 更新为更新版本,则需要运行以下命令:

    $ bundle exec rake 'librarian:update[alphagov/tune_ext]'

    之后,你应该提交 PuppetfilePuppetfile.lockvendor/puppet/ 中的任何新文件。 如果更新 MODULE,那么你需要手动从缓存目录中删除旧的tarball 。

    NB: 应该不会有任何更改对 .librarian/puppet/config

    测试

    假设你的依赖项已经安装,请运行所有测试:

    $ bundle exec rake

    MODULE 测试位于 modules/<module>/spec 中。 有关更详细的信息,请参阅 RSpec Puppet 文档。 这些规格在默认情况下是并行运行的。

    puppet 是一个工具,它检查编写好的Puppet 代码常用的各种语法和样式规则。 它可以通过以下方式运行:

    $ bundle exec rake lint

    输出一组错误或者警告,这些错误或者警告应该被修正。 请参阅 Puppet 样式指南了解更多信息。

    范围测试

    可以以通过设置一个环境变量 mods,e.g.,为特定的MODULE 或者模块运行测试。

    $ bundle exec rake mods=nginx,varnish

    对于这个目的,manifests/ 目录被认为是一个叫做 manifests的MODULE 。

    $ bundle exec rake mods=manifests,govuk

    Precommit测试

    这里 repo 使用前提交管理它的pre-提交钩子。 这是通过brew提供的:

    brew install pre-commit

    pre提交钩子在这里 repo的root 中的。pre-commit-config 。yaml文件中配置。 要使 pre-commit钩子工作,首先需要在本地。git/hook目录中安装预提交 shim:

    pre-commit install

    当运行 git commit 时,这将运行在 .pre-commit-config.yaml 中配置的钩子,并将把作为提交的一部分的文件列表传递给每个 hook 。 你可以通过执行以下操作来测试钩子:

    pre-commit run

    你还可以在所有文件上运行钩子来测试整个 repo的状态。 例如作为公关生成器作业的一部分,这可能是有用的:

    pre-commit run --all-files

    node-测试

    span 多类或者模块可能无法进行单元测试的一些问题。 重复的资源和mislabelled依赖项是。 要捕获这些,可以使用以下所有可用的govuk::node 类:

    $ bundle exec rake spec:nodes

    编译 node 完整目录需要很长时间,因此你可能希望通过设置rake任务的环境变量 classes 来限制它,例如为rake任务设置环境变量。

    $ bundle exec rake spec:nodes classes=frontend,backend
    测试 Hieradata

    在spec测试期间,spec/fixtures/hiera/hiera.yaml 用于配置只使用的hieradata spec/fixtures/hieradata/common.yaml 它的值( 例如 。hieradata/ 中没有内容) 。

    在 node 测试期间,hieradata使用 vagrantdevelopment 环境。 仅当 ENV['classes'] MATCHES 中的值为 regexp /^development$/ 时才应使用 development 环境( 例如 。 在正常操作中,它将使用 vagrant ) 。 这可能意味着 common.yaml 中的设置将按照层次结构的:hierarchy 进行覆盖。

    测试覆盖

    套件的每个测试结果后面总结了套件所覆盖的资源数量。测试触摸的数量和覆盖率。 e.g.

    Total resources: 175
    Touched resources: 36
    Resource coverage: 20.57%

    在运行测试之前,可以通过设置 FULL_COVERAGE_REPORT 环境变量来获取未受改动的资源列表:

    FULL_COVERAGE_REPORT=true bundle exec rake spec

    如果测试有有限的模块数量,警告会产生非常大的输出,除非测试范围超过了 scoped 。

    Rspec基本模式

    有时可以访问普通 RSpec Rake任务是有用的。 这将公开 SPECSPEC_OPTS 环境变量,这意味着你可以分别设置测试规范和RSpec选项。 当需要更精细的控制时,就能得到更精细的控制。 e.g.

    $ bundle exec rake rspec_basic_mode SPEC="./modules/collectd/spec/classes/collectd__package_spec.rb:7" SPEC_OPTS="-c"

    collectd__package_spec.rb的第 7行运行单个测试,并启用颜色模式。

    警告:使用这里选项的警告 禁用并行运行测试,并且 mod 参数将不能工作。

    Vagrant

    先决条件

    你将需要最新的private govuk-provisioning 存储库检查 node 定义。

    设置

    建议你从二进制/系统安装中使用 Vagrant> 1.4. alphagov/gds-boxen 可以为你设置这个。

    用法

    你只需要打开正在处理的节点的子集。 例如要启动前端和后端:

    vagrant up frontend-1.frontend backend-1.backend

    Vagrant将在启动时对 node 运行 Puppet provisioner 。 节点看起来应该与我们真正的production/staging/preview 环境几乎相同,包括网络地址。 要访问 node 像 http/https这样的服务,你可以将 hosts 文件指向主机的IP地址( eth1 ) 。

    将忽略 memorynum_cores 等物理属性,因为它们不适合本地 vm,但仍可以以按照下面的方式定制。

    定制

    node 定义可以用这个目录中的nodes.local.yaml 文件覆盖。 这是合并在所有其他 node 定义之上的。 以下按键可以用于定制:

    • box_dist Ubuntu发行版当前"信任信"。
    • box_version basebox的内部版本号。
    • memory 数量。默认值为" 384"。
    • hostonly网络的ip IP地址。 当前所有子网均为/16.
    • Puppet 类/角色的class NAME 。

    例如增加PuppetMaster上的内存量:

    ---puppetmaster-1.management:
     memory: 768
    错误

    一些你可能会遇到的错误。

    NFS失败挂载
    [frontend-1.frontend] Mounting NFS shared folders...
    Mounting NFS shared folders failed. This is most often caused by the NFS
    client software not being installed on the guest machine. Please verify
    that the NFS client software is properly installed, and consult any resources
    specific to the linux distro you're using for more information on how to do this.

    这似乎是由 OSX 。VirtualBox和思科AnyConnect的组合造成的。 尝试在启动新 node 时暂时断开与VPN的连接。 你还可以将 VAGRANT_GOVUK_NFS=no 设置为环境变量,以禁用NFS的使用。 这种性能降低,但检查 Puppet 运行很好。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语