设为首页 收藏本站
查看: 997|回复: 0

[经验分享] 自动化运维之 - puppet中所谓的资源类型

[复制链接]

尚未签到

发表于 2018-8-3 07:38:55 | 显示全部楼层 |阅读模式
  Puppet使用一种描述性语言来定义配置项,配置项在Puppet中被称为“资源”。这种描述的本质使得Puppet和许多其他配置工具之间产生了重要的差别。描述性语言可以声明你的配置的状态 -- 比如,声明一个软件包应该被安装或者一个服务应该被启动。
  大部分配置工具,如shell或者Perl脚本’是命令式或者过程式的。它们描述的是事情应该怎么做而不是所霜要的最终状态应该如何— 比如,大部分用来管理配置的定制脚本都应当被看作命令式的。这就意味着Puppet的用户只需要声明他们的主机应该处于什么状态即可:比如什么软件包应该被安装,什么服务应该被运行。使用Puppet, 系统管理员不需要关心如何达到这种状态--那由Puppet负责。相反,我们关心的是如何将主机的配置抽象到一个个资源中。
  配置语言
  描述性语言的实质是什么?让我们看一个简单的例子。这里有一个包括Red Hat企业版Linux、
  Ubuntu以及Solaris的主机环境,我们需要在所有的主机上安装vim程序。如果手工来做,我们需要
  写一个脚本来完成下面这些事情:
  1.连接到目标主机(包含输人密码或者提供密钥);
  2.检査是否安装了 vim;
  3.如果没有,使用每个平台上适当的命令来安装它,比如在Red Hat上使用ywir命令,在Ubuntu上使用apt-get命令;
  4.可能还包括报告结果以确保命令成功完成。
  Puppet使用不同的方式来完成这一过程。我们在Puppet中为vim定义一个配置资源。每个资源都由一个类型(表明被管理的是什么样的资源:软件包、服务或者定时任务等)、一个标题(资源的名字)以及一系列属性(用来说明资源状态的值— 比如服务是被启动还是被停止)组成。
  例子:
  package { "vim":
  ensure => present,
  }
  例子中的资源表明了vim包应该被安装。它的结构是这样的:
  类型 { 标题:
  属性 => 值,
  }
  在例子当中 资源的类型是package。Puppet默认提供许多资源类型,可以用來管理文件、服务、软件包以及定时任务等。
  可以在 http://docs.puppetlabs.com/references/stable/type.html#file 找到 Puppet 目前能管理的全部资源类型及其属性。我们将在第10章讨论如何扩展Puppet来支持额外的资源类型。
  当然在安装puppet的机器上也可以找到
  我们使用
  [root@Centos-server puppet]# puppet describe --list
  These are the types known to puppet:
  augeas          -  Apply a change or an array of changes to the ...
  computer        - Computer object management using DirectorySer ...
  cron            -  Installs and manages cron jobs
  exec            - Executes external commands
  file            - Manages files, including their content, owner ...
  filebucket      - A repository for backing up files
  group           - Manage groups
  host            - Installs and manages host entries
  interface       - This represents a router or switch interface
  k5login         - Manage the `
  macauthorization - Manage the Mac OS X authorization database
  mailalias       - Creates an email alias in the local alias dat ...
  maillist        - Manage email lists
  mcx             - MCX object management using DirectoryService  ...
  mount           - Manages mounted filesystems, including puttin ...
  nagios_command  - The Nagios type command
  nagios_contact  - The Nagios type contact
  nagios_contactgroup - The Nagios type contactgroup
  nagios_host     - The Nagios type host
  nagios_hostdependency - The Nagios type hostdependency
  nagios_hostescalation - The Nagios type hostescalation
  nagios_hostextinfo - The Nagios type hostextinfo
  nagios_hostgroup - The Nagios type hostgroup
  nagios_service  - The Nagios type service
  nagios_servicedependency - The Nagios type servicedependency
  nagios_serviceescalation - The Nagios type serviceescalation
  nagios_serviceextinfo - The Nagios type serviceextinfo
  nagios_servicegroup - The Nagios type servicegroup
  nagios_timeperiod - The Nagios type timeperiod
  notify          - Sends an arbitrary message to the agent run-t ...
  package         - Manage packages
  resources       - This is a metatype that can manage other reso ...
  router          - Manages connected router
  schedule        -  Define schedules for Puppet
  scheduled_task  - Installs and manages Windows Scheduled Tasks
  selboolean      - Manages SELinux booleans on systems with SELi ...
  selmodule       - Manages loading and unloading of SELinux poli ...
  service         - Manage running services
  ssh_authorized_key - Manages SSH authorized keys
  sshkey          - Installs and manages ssh host keys
  stage           - A resource type for specifying run stages
  tidy            - Remove unwanted files based on specific crite ...
  user            - Manage users
  vlan            - Manages a VLAN on a router or switch
  whit            - Whits are internal artifacts of Puppet's curr ...
  yumrepo         - The client-side description of a yum reposito ...
  zfs             - Manage zfs
  zone            - Manages Solaris zones
  zpool           - Manage zpools
  这是本机支持的puppet目前能管理的全部资源类型及其属性
  接下来是资源的标题,在这里就是我们要安装的软件包的名宇:vim 资源的类型和标题组合在一起构成一个针对这个资源的引用。例如,刚刚的资源可以被称为Package[”vira" ]。我们在接下来的章节介绍如何创建资源之间的关联时将看到许多类似的引用。这些关联可以将我们的配置结构化,比如在启动服务前安装相关联的软件包。
  最后,我们指定了一个单独的属性,ensure,它的值是present。Puppetii过属性得知我们对配置资源所要求的状态。每一个资源类型都有- 系列可配置的属性。这里ensure属性用来指明软件包的状态:已安装、已卸载等。而它的值是present则告诉Puppe俄们希望安装这个软件包。如果要卸载这个软件包,我们只需把它的值变为absent。
  资源抽象层
  资源被创建后,当agent连接到master时,Puppet将负责在管理这些资源时产生的一些细节问题.Puppet知道不同平台和操作系统在管理特定资源类型时的差异,并据此来处理这些细节问题。每一种资源类铟都有许多“提供者' 一个软件包资源的提供者包含了 “如何”使用特定的软件包管理工具来管理软件包。比如,对于软件包这一资源类型来说,有超过20个的提供者,覆盖了包括yum、aptitude、pkgadd、ports和emerge在内的多种包管理工具。
  当一个agent连接到master时,Puppet使用一个叫做“Facter”的工具来返回agent的相关信息,其中就包括了主机运行的操作系统。然后Puppet会根据这?点为这个操作系统选择合适的软件包提供者,并使用这个提供者来检査vim^是否已经安装。例如,在Red Hat上它会执行yum#令,在Ubuntu上会执行aptitude命令,而在Solaris上会使用pkg命令。如果没有安装这个软件包,Puppet就会安装它。反之,则什么都不做。最后Puppet会向Puppet master报告应用这些资源配置是否成功。
  Facter是一个系统盘点工具,本书会经常用到它。它返回每个agent的"fact",比如agent的主机名、IP地址、操作系统和版本以及其他配置项。这些fact由agent在运行的时候进行收集,然后发送給Puppet master,并自动被创建为可以被Puppet使用的变量。
  可以通过在命令行下运行facter程序来查看客户端上所有可用的fact。每一个fact都返回一个键值对。例如:operatingsystem => Ubuntu  ipaddress => 10.0.0.10
  这样我们就能使用这些值来单独配置每一台主机。比如,在获得一台主机的IP地址后,我们就能据此配置这台主机的网络设置。这些fact可以通过变量的形式在Puppet的配置中使用。结合预先定义好的Puppet配置和这些变量,就可以为每一台主机定制配置。例如,你可以编写一些通用资源,比如网络设置,然后使用客户端返回的数据来定制它们。
  Facter还能帮助Puppet理解如何在一个agent上管理特定的资源类型。比如,如果Facter告诉Puppet — 台主机正在运行Ubuntu, Puppet就知道在这个agen丨上要使用aptitude命令来安装软件包。Facter同样能进行扩展,可以通过添加自定义的fact来返回一些关于主机的指定信息。我们将在安装完Puppet之后安装Fa cter,并在后面的章节详细讨论Facter的一些细节。
  Nginx实例:
  puppetclient.pp 配置一个client主配置文件。它是被site.pp所include的。
  modules/nginx/manifests/init.pp 配置一个nginx模块
  class nginx { 定义?一个nginx类。类名必须和模块名匹配
  以下定义了三个资源
  package { “nginx”: ensure => installed, }
  service {“nginx”: enable => true, ensure => running,
  require => Package[“nginx”] }
  file {“/etc/nginx/nginx.conf”:
  source => “puppet:///$fileserver/nginx/nginx.conf”,
  require => Package[“nginx”], }
  }
  puppet 模块、类、资源、模板
  modules 模块
  class nginx { 类
  package { “nginx”: ensure => installed, } 资源
  file {“/etc/nginx/nginx.conf”: 资源
  content =>template(“nginx/nginx.conf.erb”), 模板!
  require => Package[“nginx”], } 依赖
  }
  无论如何你必须弄清楚他们之间的关系。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545598-1-1.html 上篇帖子: 自动化运维之 - puppet 简介 下篇帖子: 自动化运维之 - puppet实验环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表