puppet 配置 3.5 参数

作用

介绍 puppet 中 facter 用法,   介绍自参数定义,  参数传递, 参数使用的常见例子

facter

facter 是 puppet 的一个依赖软件, 当安装了 puppet 软件, 都可以通过 facter 命令查询 puppet 内建变量

查询内建函数

直接调用命令 facter 查询所有内建变量
通过命令 facter + 需要查询的变量名称,  可以返回变量值
facter 返回的变量可以直接在 puppet 模板中调用, 不需要重新进行定义
facter 变量主要依赖当前 puppet 客户端主机信息, 即不同的 puppet client 返回的变量值是不一样的

参考下面例子
在不同的 puppet client 上查询 facter 变量, 返回不同的变量值

[root@terryzeng-gz-qa-dns-d4yzu ~]# facter ipaddress_eth0
10.199.198.161

[root@terryzeng-gz-qa-dns-vid7e ~]#  facter ipaddress_eth0
10.199.251.52

也可以利用 json 格式进行数据返回

[root@terryzeng-gz-qa-dns-d4yzu facter]# facter -j  partitions
{
  "partitions": {
    "vda1": {
      "size": "41940992",
      "mount": "/",
      "filesystem": "ext4",
      "uuid": "0e6758d5-26c9-4cc6-ba78-281768d8855c"
    }
  }
}

查询所有参数

[root@terryzeng-gz-qa-dns-d4yzu ~]# facter
architecture => x86_64
augeasversion => 1.0.0
bios_release_date => 01/01/2011
bios_vendor => Seabios
bios_version => 0.5.1
blockdevice_vda_size => 21474836480
blockdevice_vda_vendor => 6900
...
...
uniqueid => c70aa1c6
uptime => 185 days
uptime_days => 185
uptime_hours => 4462
uptime_seconds => 16065002
uuid => 14292DDA-257C-408D-8B25-9C4D6DAB3B45
virtual => kvm

自定义 facter 变量

1. facter 变量需要使用 ruby 语法
2. 每添加一个新的变量都需要添加一个独立的 rb 文件
3. 我个人不喜欢使用 facter 维护变量, 因为额外地增加了多一个维护的途径
4. 假如使用 puppet 进行 facter rb 变量的维护, 当 rb文件还没有存在客户端,  那么在这时候执行 puppet 命令的环境中, 新的 facter 变量无法被读取, 必须要在下一次推送 puppet 时候才生效,  导致维护不方便

facter 变量文件位置

参考自定义 facter 官网

1.  当前 rhel6 默认 facter 变量 rb 文件可以存放在 ruby 库目录 '/usr/lib/ruby/site_ruby/1.8/facter' 中, 也可以存放在 ' /var/lib/puppet/lib/facter/' 目录中
2.  可以通过  RUBYLIB 环境变量定义 ruby 的库文件位置

创建 facter 方法

当前直接在 puppet client 端创建一个新的 facter 变量, 称为 myip, 目的为返回当前主机的 IP 地址

/usr/lib/ruby/site_ruby/1.8/facter/myip.rb

Facter.add(:myip) do
  setcode do
        require   'socket'
        IPSocket.getaddress(Socket.gethostname)
  end
end

验证自定义 facter

[root@terryzeng-gz-qa-dns-d4yzu facter]# facter myip
10.199.198.161

puppet 调用 facter 变量

1.  以创建文件, 并把 facter 变量值作为文件内容为例子
2.  我也会使用上面的自定义 facter myip 注意,  现在这个 puppet client 中的 myip.rb 是手动维护的

参考下面的自定义模块

/etc/puppet/modules/myfacter
├── manifests
│   └── init.pp
└── templates
    └── testmyfacter.txt.erb

参考整个调用过程

/etc/puppet/manifests/terry
├── terry-crond.pp
├── terry-factertest.pp     <- facter 模块调用, 自动执行上面的 init.pp
├── terry-files.pp
├── terry-hosts.pp
├── terry-package.pp
├── terry-parameter.pp
├── terry-site.pp            <- 流程控制 调用 terry-factertest.pp 文件
├── terry-sysctl.pp
└── terry-yumrepo.pp

参考整个流程

/etc/puppet/manifests/terry/terry-site.pp

node 'terry-rhel7.vclound.com', 'terryzeng-gz-qa-dns-d4yzu.vclound.com', 'terryzeng-gz-qa-dns-vid7e.vclound.com' {
    import 'terry-parameter.pp'   <- 参数配置, 目前没有调用, 下面会有说明
        import 'terry-sysctl.pp'
        import 'terry-hosts.pp'
        import 'terry-yumrepo.pp'
        import 'terry-package.pp'
        import 'terry-files.pp'
        import 'terry-crond.pp'
        import 'terry-factertest.pp'
}

/etc/puppet/manifests/terry/terry-factertest.pp

class { myfacter: }

/etc/puppet/modules/myfacter/manifests/init.pp

class myfacter {
        file { '/tmp/testmyfacter.txt':
                owner => root, group => root,
                mode => 0644,
                content => template('myfacter/testmyfacter.txt.erb'),
        }
}

/etc/puppet/modules/myfacter/templates/testmyfacter.txt.erb

# This is a example file, use for test facter.

this is my ip address <%= @myip %> from facter.
this is my fqdn_hostname <%= @fqdn %>  from facter.

目前以 (10.199.198.161 | terryzeng-gz-qa-dns-d4yzu.vclound.com) (手动维护 myip.rb) 为测试例子说明, 当 terryzeng-gz-qa-dns-d4yzu.vclound.com 连接 puppet master 后, /tmp/testmyfacter.txt 文件内容如下:

[root@terryzeng-gz-qa-dns-d4yzu ~]# cat /tmp/testmyfacter.txt
# This is a example file, use for test facter.

this is my ip address 10.199.198.161 from facter.
this is my fqdn_hostname terryzeng-gz-qa-dns-d4yzu.vclound.com  from facter.

从上面可以看到, 我们不需要对变量进行定义, 模板中的变量环境会自动被置换成为对应 facter 的值.
再次强调, 不推荐自定义 facter 的方式进行变量定义, 下面例子将不再使用 myip.rb facter 变量, 另外, 假如你需要使用 ip 地址变量, 可以通过使用 ipaddress_eth0 facter 变量获得

自定义变量

自定义变量方法
参考下面模板, 我们介绍几种常见的变量定义方法

$addr = 'the_first_variable_addr',                    <- 单个变量定义
$addr_array = [ 'array_1', 'array_2', 'array_3' ],    <- array 变量定义
$addr_outside = $crond::config::time,                 <- 外部变量调用

参考文件结构

/etc/puppet/modules/myfacter
├── manifests
│   ├── config.pp               <- 配置
│   ├── init.pp                 <- 主控制
│   └── para.pp                 <- 模板内部参数定义文件
└── templates
    └── testmyfacter.txt.erb     <- 模板文件

主控制流程

class myfacter (
        $addr = 'the_first_variable_addr',
        $addr_array = [ 'array_1', 'array_2', 'array_3' ],
        $addr_outside = $crond::config::time,
        $addr_var = 'variable_in_init_pp',
){
        include myfacter::para, myfacter::config
}

说明:

1.  定义了独立变量,  array, 外部变量,
2.  调用执行 para.pp,  config.pp
3.  这里 $crond::config::time 意味着, 获取的是  /etc/pupppet/modules/crond/manifests/config.pp 中的变量 time
4.  init.pp 中定义的参数可以执行继承到  para.pp 与 config.pp 中,  属于公共变量

参考模板中的参数定义文件

/etc/puppet/modules/myfacter/manifests/para.pp
class myfacter::para (
        $newvar = 'data_from_para_pp',
){
}

说明:

1.  比较推荐在模板中的一个位置定义所有的公共变量, 方便管理, 如 para.pp
2.  变量方法跟之前一样
3.  para.pp 中的变量属于内部变量,  不可以直接被其他的模板文件使用.

参考模板中配置文件

/etc/puppet/modules/myfacter/manifests/config.pp
class myfacter::config (
  $addr_inside = $myfacter::para::newvar,
  $addr_var = 'variable_in_config_pp',
){

  file { '/tmp/testmyfacter.txt':
    owner => root, group => root,
    mode => 0644,
    content => template('myfacter/testmyfacter.txt.erb'),
  }
}

说明:

1.  addr_inside 属于变量继承 (para.pp 中的 newvar),  不可以直接使用 newvar变量. (特别注意)
2.  假如需要直接调用 para.pp, 着需要添加继承关键字 class ( xxx ) inherits myfacter::para { xxx }
3.  addr_var 本在 init.pp 中已经定义过,  这里的作用是覆盖之前的变量值
4.  file 模块用于配置一个模板文件,  并在这时候调用之前的所有的变量

参考模板文件

/etc/puppet/modules/myfacter/templates/testmyfacter.txt.erb
# This is a example file, use for test facter.

this is my ip address <%= @ipaddress_eth0 %> from facter.
this is my fqdn_hostname <%= @fqdn %>  from facter.

this is the variable <%= @addr %> from modules/myfacter/manifests/init.pp.
this is the array <%= @addr_array %> from modules/myfacter/manifests/init.pp.
this is the array @ <%= @addr_array[0] %> from modules/myfacter/manifests/init.pp.
this is the array @ <%= @addr_array[1] %> from modules/myfacter/manifests/init.pp.
this is the variable <%= @addr_outside %> from modules/crond/manifests/config.pp.
this is the variable <%= @addr_inside %> from modules/myfacter/manifests/para.pp.
this is the variable <%= @addr_var %> from config.pp not init.pp.

说明:

1.  在调用 array 时候, 如果不描述下标, 那么这里会返回所有值
2.  array[0] 指第一个被数组变量值,
3.  除了 ipaddress_eth0, fqdn 以外, 所有的变量都是自定义变量

参考 puppet client 推送后的文件结果

cat /tmp/testmyfacter.txt
# This is a example file, use for test facter.

this is my ip address 10.199.198.161 from facter.
this is my fqdn_hostname terryzeng-gz-qa-dns-d4yzu.vclound.com  from facter.

this is the variable the_first_variable_addr from modules/myfacter/manifests/init.pp.
this is the array array_1array_2array_3 from modules/myfacter/manifests/init.pp.
this is the array @ array_1 from modules/myfacter/manifests/init.pp.
this is the array @ array_2 from modules/myfacter/manifests/init.pp.
this is the variable 26 from modules/crond/manifests/config.pp.
this is the variable data_from_para_pp from modules/myfacter/manifests/para.pp.
this is the variable variable_in_config_pp from class.
时间: 2024-11-11 03:08:52

puppet 配置 3.5 参数的相关文章

puppet 配置 3.4 文件管理与自定义模块

作用 利用 puppet 对文件, 配置文件等进行管理 常见管理办法 1. 新增文件并定义文件中内容 2. 修改已经存在的文件中的配置 3. 通过模板管理方式进行配置文件定义 模块 这里介绍 puppet 自带的 file 模块及第三方模块 stdlib stdlib 模块下载地址 使用方法 下载 stdlib.tar.gz 软件包并解压至 /etc/puppet/modules/stdlib 文件结构 [root@terry-test-uq2pu ~]# ls /etc/puppet/modu

tomcat8在哪里配置websocket的参数

问题描述 tomcat8在哪里配置websocket的参数 tomcat8在哪里配置websocket的参数,在哪个文件中呢,我要配置org.apache.tomcat.websocket.executorMaxSize这个参数,来修改websocket的最大连接数.另外有没有人测试过tomcat能够支持的websocket最大连接数是多少,谢谢 解决方案 http://m.blog.csdn.net/blog/strong815/24465691

urlrewrite.xml 配置-urlrewrite 配置多个参数urlrewrite.xml配置问题

问题描述 urlrewrite 配置多个参数urlrewrite.xml配置问题 <rule> <from>^/mobile/ftl/([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9]+)-([a-zA-Z0-9

puppet 配置 3. 资源

概念 资源是 puppet 配置的独立单元 资源包含有 (package, service, file, user, mount, exec ...) 常见资源包含有 title, arguments 两部分组成 arguments 可包含 0 ~ 多个 资源例子: type { 'title': argument => value, other_arg => value, } 资源语法: file { 'motd': path => '/etc/motd', content =>

php配置php-fpm启动参数及配置详解_php技巧

约定几个目录 /usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm的启动参数 复制代码 代码如下: #测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.con

puppet 配置 3.1 管理 sysct.conf

辅助模块 https://github.com/duritong/puppet-sysctl 下载方法 利用上面网站, 通过连接 clone or download 利用 download zip 按钮进行下载 把下载的 zip 文件直接解压到服务器端 /etc/puppet/modules/sysctl/ 目录下 文件结构 如下 [root@terry-test-uq2pu ~]# ls /etc/puppet/modules/sysctl/ Gemfile lib manifests Mod

puppet 配置 3.2 管理 hosts

作用 利用 puppet 对客户端 /etc/hosts 文件进行管理 辅助模块 https://forge.puppet.com/chrekh/hosts 下载方法 点击网页中 download latest tar.gz 直接下载 把下载的文件 解压至 puppet server 中 /etc/puppet/modules/hosts 目录中 文件结构 参考 [root@terry-test-uq2pu hosts]# pwd /etc/puppet/modules/hosts [root@

mysql配置模板(my-*.cnf)参数详细说明_Mysql

mysql安装成功后有几个默认的配置模板,列表如下:my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysqlmy-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量my-large.cnf : 用于中等规模的产品服务器,包括大约512M RAMmy-medium.cnf : 用于低端产品服务器,包括很少内存(少于128M)my-small.cnf : 用于最低设备的服务器,只有一点内存(少于512M

puppet 配置 4 条件语法

作用 puppet 与其他语言一样, 可以通过正则匹配, 通过判断, 循环, case 等语法进行管理 本文会对 puppet 一些条件语法进行介绍 比较 在 puppet 中, 有下面几种常见的比较方法, 参考下面表格 表达式 作用 例子 ! 非 if ( ! $myvar ) and 与 if ( $myvar > 10 and $osfamily == 'RedHat' ) or 或 if ( $myvar > 10 or $osfamily == 'RedHat' ) in 包含 if