菜鸟学Linux 第109篇笔记 ansible puppet
内容总览
bootstrap
ansible Properties
ansible其它配置方式
puppet 简介
puppet: IT基础设施自动化管理工具
puppet 工作模式
puppet 层次
puppet 的核心组件manifests
puppet 命令格式
puppet 定义资源格式
puppet 常用资源类型(user,group,exec,file,cron,notify,package,service后两个下节写)
配置心得
bootstrap --> configuration (目标状态) --> command and control
bootstrap: pxe, cobbler, 虚拟化环境下的部署方式(xen, kvm)
configuration: puppet, saltstack(python), chef, cfengine
command and control: ansible(轻量级), fabric, func
Os Provisioning
PXE, cobbler
Os config
cfengine, puppet, saltstack, chef
Deployment
func(ssl), fabric(python, ssh), ansible
ansible Properties
No Agents
No Server
No additional PKI
Modules in any language
YAML, not code
ansible
此软件可以实现远程在多台主机上同时运行相同的命令,它所传输命令的方式是基于ssh来传输的
所以要事先最好配置好基于密钥通信与要配置的客户端之间
安装
ansible-2.2.1.0-1.el6.noarch.rpm
libyaml-0.1.3-4.el6_6.x86_64.rpm
python-crypto2.6-2.6.1-2.el6.x86_64.rpm
python-httplib2-0.7.7-1.el6.noarch.rpm
python-jinja2-26-2.6-3.el6.noarch.rpm
python-keyczar-0.71c-1.el6.noarch.rpm
python-six-1.7.3-1.el6.centos.noarch.rpm
python34-3.4.5-1.el6.x86_64.rpm
python34-libs-3.4.5-1.el6.x86_64.rpm
python34-PyYAML-3.11-2.el6.x86_64.rpm
PyYAML-3.10-3.1.el6.x86_64.rpm
sshpass-1.06-1.el6.x86_64.rpm
(有几个包非常难找呵呵 可以上此网站下载 pkgs.org)
2. 配置基于密钥通信
# ssh-keygen -t rsa
# ssh-copy-id -i /root/.ssh/id_rsa.pug root:IP
IP要使用现实中配置的远程IP
3. 编辑配置文件/etc/ansible/hosts
# vim /etc/ansible/hosts
将其要一起配置的IP添加到最后
格式
[test]
IP1
IP2
(现实配置要使用相对应的IP)
4. 使用ansible来配置客户端格式
ansible <host-pattern> [-m module_name] [-a args] [options]
如:
# ansible test -a 'date'
(test是上边配置文件定义的一个区域,即此区域里配置的IP都会执行date命令)
5. 使用模块
ansible的所有在客户端执行的命令或安装等配置都是基于模块的,
可以使用ansible-doc -l来查看相应模块的具体使用方式
ansible其它配置方式
ansible-playbook
类似shell脚本,可以实现运行某个文件,此文件定义了要执行的命令或安装的软件等
一系列对客户端的操作,然后对其执行,不同的是其格式和shell脚本有区别
如 为所指定的客户端都安装httpd程序,并将本地的配置文件复制到客户端上
# vim test.yaml
- hosts: all
remote_user: root
tasks:
- name: install httpd
yum: name=httpd state=present
- name: copy configuration file
copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
(需要注意的是文件结尾名字必须为yaml)
配置格式的含义
- hosts: 指定要配置给哪一个区域的主机是在/etc/ansible/hosts中定义的
remote_user: 指定的是要以哪个用户的身份在远程主机端运行命令
tasks: 表示此下段为要执行的任务
-name: 注释段 用来显示执行命令的含义
yum: 这个就是模块 后边的参数就是该模块需要指定的参数
puppet 简介
是一个c/s架构的软件,s端有其所定义的c端的执行码,c端每隔一段时间会去s端请求是否有自己
需要执行的代码,c端在请求时也会把自己的状态报告给s端,说点大家容易懂一些的话哈哈, 它
当此软件的客户端和服务器端配置好后,服务器端已经为客户机配置好其所需要执行的命令或安装
的软件名,或参数调整等,客户端只需要连接网络访问服务器端后,此台电脑不需要任何人为操作
便可自己自动布署服务器端所定义的操作,或需要安装的软件等。此软件适合用在大规模的自动化
布署环境中。
简要来讲 puppet所实现的功能ansible全都可以操作,区别在于,puppet是事先已经定义好所有的
操作,客户端只需要来服务器拉取即可,而ansible需要自己来手动去执行代码,这样应该好理解
puppet: IT基础设施自动化管理工具
整个生命周期
provisioning
configuration
orchestration
reporting
www.puppetlabs.org
作者:Luke Kanies, PuppetLabs
puppet
master/agent
master: puppet server
agent: 真正执行相应管理操作的核心部件:周期性地去master请求与自己相关的配置
puppet 工作模式
声明性、基于模型
定义:使用puppet配置语言定义基础配置信息
模拟:模拟测试运行
强制:强制当前节点与定义的目标状态保持一致
报告:通过puppet api将执行结果发送给接收者
puppet 层次
Resource Abstraction Layer 资源抽象
Transactional Layer 事务
Configuration Language
资源抽象层
资源类型:例如用户、组、文件、服务、cron任务等等
属性及状态 与其 实现方式分离
期望状态
puppet的核心组件:资源
资源清单:manifests
安装
agent: puppet, facter (安装如下包及其所依赖的包)
facter-2.4.6-1.el6.x86_64.rpm
hiera-1.3.4-1.el6.noarch.rpm
puppet-3.8.7-1.el6.noarch.rpm
puppet-server-3.8.7-1.el6.noarch.rpm
ruby-augeas-0.4.1-1.el6.x86_64.rpm
ruby-shadow-1.4.1-2.el6.rf.x86_64.rpm
rubygem-json-1.4.6-1.el6.x86_64.rpm
master: puppet-server
puppet命令格式
Usage: puppet <subcommand> [options] <action> [options]
获取帮助方法 # puppet help
获取资源帮助 # puppet describe --list
# puppet describe RESOURCE
describe Display help about resource types
puppet定义资源格式
type {'title':
attribute1 => value1,
attribute2 => value2,
...
}
要点:
1. type必须小写
2. title在同一类型下必须唯一
3. 属性定义完成后要加逗号,最后一个属性可省略逗号
4. ensure一般要有,表示此配置是添加还是删除
常用资源类型
user, group, file, package, service, exec, cron, notify
例:使用本地定义一个manifests 添加组和用户
# vim /root/resource/test1.pp
group {'puppetg':
gid => 2000,
ensure => present,
name => 'puppetg'
}
user {'puppetuser':
gid => 2000,
uid => 2000,
home => '/home/puppetuser',
shell => '/bin/bash',
password => '$1$1234$/UWlwuVLGacuqMdm2P7KY1',
ensure => present
}
本地应用刚刚编写好的manifest
# puppet apply test1.pp
常用资源类型属性解析
group
查询方式 # puppet describe group
管理组资源
常用属性
name:组名,NameVar
gid: GID
system: true,false是否为系统组
ensure: present,absent
members: 组内成员
user
查询方式 # puppet describe user
管理用户
常用属性
comment: 注释信息
ensure: present, absent
expiry: 过期期限
gid: 基本组id
groups: 附加组
home: 家目录
shell: 默认shell
name: NameVar
system: 是否为系统用户,true|false
uid: UID
password:
files
查询方式 # puppet describe file
管理文件及其内容、从属关系以及权限,内容可通过content属性直接给出
也可通过source属性从远程服务器路径下载生成
指明文件来源
content: 直接给出文件内容,支持\n, \t
source: 从指定位置下载文件
ensure: file, directory, link, present, absent
常用属性
force: 强制运行,如果该目录下有此文件或者目录直接删除并创建true, false
group: 属组
owner: 属主
mode: 权限 a=r, 0664, ug+w 支持8进制格式权限
path: 目标路径
source: 源文件路径,可以是本地路径,也可以使用
puppet:///modules/module_name/file_name
target: 链接文件 当ensure为'link'时 target表示path指向的文件是链接文件
此时content及source属性自动失效
例: 创建files的manifests文件
# vim test2.pp
file{'/tmp/pupdir':
ensure => directory,
}
# 此上为创建目录
file{'/tmp/file1':
content => 'this is pupet file\nSecond line',
ensure => file,
owner => 'puppetuser',
group => 'puppetg',
mode => 0400,
}
# 此上为创建文件,并添加content所添加的字符,文件的权限和属组主
file{'/tmp/file2':
source => '/etc/fstab',
ensure => file,
}
# 此上也是添加一个文件,只是文件的内容是引用source所指向的文件的内容
file{'/tmp/link':
ensure => link,
target => '/tmp/file2',
}
#此上为添加一个链接文件
exec
查询使用帮助 # puppet describe exec
运行一外部命令:命令应该具有“幂等性”;
幂等性:
1. 命令本身具有 幂等性
2. 资源有onlyif, unless, creates等属性以实现命令的条件式运行
3. 资源有refreshonly属性,以实现只有订阅的资源发生变化时才执行。
command: 运行的命令 NameVar
creates: 此属性指定的文件不存在时才执行此命令
cwd: 在此属性指定的路径下运行命令
user:
group: 以指定组运行此命令
onlyif: 给定一个测试命令,仅在此命令执行成功,即返回状态码为0,才运行command
unless: 给定一个测试命令,其返回值不为0时执行command所定义的命令
refresh: 接受到其它资源发来的refresh通知时,默认是重新执行exec定义的command
refresh可改变这种行为,即可指定仅在refresh时所运行的命令;
refreshonly: 仅在收到refresh通知,才运行此资源
returns: 期望的状态返回值,返回非此值时表示命令执行失败,默认为0
tries: 尝试执行的次数
timeout: 超时时长
path: 指明命令的搜索路径,其功能类似PATH环境变量,其值通常为列表
['path1','path2',...],如不定义,必须给定命令的绝对路径
例: 执行命令echo 并添加到某文件, 当配置当在何时才能执行此命令
exec {'echo command1 > /tmp/cmd1.txt':
user => root,
group => root,
creates => '/tmp/cmd1.txt',
path => ['/bin'],
}
# creates直接可以判断文件是否存在
exec {'echo command2 > /tmp/cmd2.txt':
user => root,
group => root,
path => ['/bin','/usr/bin'],
unless => 'test -e /tmp/cmd2.txt',
}
# 此种方式是unless所定义的命令执行的状态返回值不为0时才执行exec的命令
notify
查询使用帮助 # puppet describe notify
核心属性
message: 要发送的消息内容,NameVar
例:
# vim test4.pp
notify{'This is a notify':}
# 执行时会直接输出此条信息
# puppet apply -v test4.pp
cron
查询使用帮助 # puppet describe cron
管理cron任务
常用属性
ensure: present, absent
command: 要运行的job
hour:
minute:
month:
monthday:
weekday:
name:
user:运行的用户
environment:运行时的环境变量
例:
# vim test5.pp
cron {'update time':
command => '/usr/sbin/ntpdate 192.168.11.1',
ensure => present,
minute => '*/15',
}
含义:定义一个任务每15分钟执行一次,
ensure 为present表示添加此条任务 当为absent 你懂得呵呵
# puppet apply test5.pp
配置心得
1. 定义exec时命令的路径path需要定义,如未定义则命令执行需要指定绝对路径
2. puppetlabs.com网站下载puppet需要找到doc>安装向导,然后往下找里边有yum源路径
(有企业版了,所以开源版的软件连接藏得很深呵呵,,你懂得)
3. yum.repo.d里所定义的yum源如果是光盘的centos6分两个DVD,自己手动将其合并为一个
Packages目录里,然后再将其制作成ftp://user:passwd@IP/PATH
(为何如此做是因为有的包放在第二个光盘里,无法使用yum来安装使其解决依赖关系)
转载于:https://blog.51cto.com/winthcloud/1903404