public:it:linux:puppet

Puppet

Resources and the RAL

  • Resources: Imagine a system’s configuration as a collection of many independent atomic units; call them “resources.”
    • 资源可分类
    • 资源类型描述抽离于它的具体操作步骤
    • Puppet 指定资源的期望状态,而不是直接指定具体操作
    • 以上三点组成 Puppet 的资源抽象层 (RAL), RAL 包括 types(高级别抽象模型) 和 providers(平台相关实现),这样可以使用平台无关的方式来描述资源得期望状态。
  • 每个资源(Resource )的描述包括: resource type, one title, a number of attributes, each attribute has a value
        user { 'dave':
          ensure     => present,
          uid        => '507',
          gid        => 'admin',
          shell      => '/bin/ksh',
          home       => '/home/dave',
          managehome => true,
        }
     

    This syntax is called a resource declaration

  • puppet describe : The puppet describe subcommand can list info about the currently installed resource types on a given machine.
  • puppet resource: Puppet includes a command called puppet resource, which can interactively inspect and modify resources on a single system. Usage:
    # puppet resource <TYPE> [<NAME>] [ATTRIBUTE=VALUE ...]

Manifests

  • .pp: Puppet programs are called “manifests,” and they use the .pp file extension.
  • 完整语法链接: lang resources
    • 大括号,冒号,逗号要正确
    • 大小写敏感。 类型(type)和属性(attributes)名必须小写
    • 字符串值的书写: datatypes
    • All types have a special attribute called the namevar, 该属性缺失就默认以 title 替代
  • Before being applied, manifests get compiled into a document called a catalog
  • puppet apply <.pp file >
  • Puppet agent/master

Resource Ordering

  • You can embed relationship information in a resource with the before, require, notify, and subscribe metaparameters.
  • You can also declare relationships outside a resource with the and ~> chaining arrows.
  • Relationships can be either ordering (this before that) or ordering-with-notification (this before that, and tell that whether this was changed).
  • Puppet’s relationship behaviors and syntaxes are documented in the Puppet reference manual page on relationships.
  • The ordering setting in puppet.conf determines the order in which unrelated resources are applied.

Variables, Conditionals, and Facts

  • Variables: 语法类似 php, 但实际是常量,只能被赋值一次, 不能修改。
  • Conditionals: if, elseif, else, case,default
  • Puppet has a bunch of built-in, pre-assigned variables that you can use.
  • Facts: facts ,Puppet uses a tool called Facter, which discovers some system information, normalizes it into a set of variables, and passes them off to Puppet. Puppet’s compiler then has access to those facts when it’s reading a manifest.

Modules and Classes

  • Classes are named blocks of Puppet code, which can be created in one place and invoked elsewhere.
  • Puppet 的 class 更像是宏, 但拥有变量域。
  • include <class name> 来起作用。
  • Modules:
    • Modules are just directories with files, arranged in a specific, predictable structure. The manifest files within a module have to obey certain naming restrictions.
    • Puppet looks for modules in a specific place (or list of places). This set of directories is known as the modulepath, which is a configurable setting
    • If a class is defined in a module, you can declare that class by name in any manifest. Puppet will automatically find and load the manifest that contains the class definition.
    • 一个 module 就是一个路径, 模块名就是路径名
    • module layout: 模块包含子文件夹manifests,files,templates等等, 详看 a page of info about module layout 以及 module cheat sheet.
    • module 静态文件(files/下)的引用格式:
      puppet:///modules/模块名/文件名(可包括files下的子路径)

      例如:

      puppet:///modules/ntp/config_files/linux/ntp.conf.el

      引用ntp模块下的files/config_files/linux/ntp.conf.el文件.

  • puppet.conf: The Puppet config file is called puppet.conf, and in Puppet Enterprise it is located at /etc/puppetlabs/puppet/puppet.conf
  • The format of puppet.conf is explained in the configuration docs
  • Puppet Forge: 模块仓库. 使用方式:install module:
    $ sudo puppet module install puppetlabs-mysql//forge 里模块名有用户名前缀 

    List all installed modules:

    $ sudo puppet module list

Templates

  • Templates are saved as files with the .erb extension. and be stored in the templates/ directory of any module. There can be any number of subdirectories inside templates/.
  • Use a template by the function template:
     file {'/etc/foo.conf':
      ensure => file,
      require => Package['foo'],
      content => template('foo/foo.conf.erb'),
    }

    template参数格式为<MODULE NAME>/<FILENAME INSIDE TEMPLATES DIRECTORY>.

  • Use a template by the function inline_template
  • public/it/linux/puppet.txt
  • 最后更改: 2018/02/28 13:48
  • 127.0.0.1