Ansible

Ansible

Ansible Inventory详解

开源技术采菊篱下 发表了文章 • 0 个评论 • 1042 次浏览 • 2015-10-15 18:50 • 来自相关话题

Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子
[test]
10.0.3.56

[zabbix]
10.0.1.30

[web]
10.0.2.57

简要说明

[zabbix],[web]是对服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器,如:
blog[1:3].jkb.com,相当于blog1.jkb.com blog2.jkb.com blog3.jkb.com我们已经了解到,Ansible默认是通过ssh的方式来远程管理批量服务器的,所以我们这里使用ssh,key加密的方式来进行ssh的认证会更方便,当然,你也可以选择使用Ansible的时候较少-k选项,来通过交互的方式输入密码。
 
Ansible管理主机,已经可以通过密钥的方式管理主机后,我们就可以用Ansible直接来做一些简单的测试,如下:
ansible all -m ping #用于检测所有的主机是否存活如果只想检测某个组的话,可以把all替换成组名,例如:
ansible test -m ping当然也可以直接输入管理主机的ip地址,例如:
ansible 10.0.3.56 -m ping在默认的情况下Ansible是使用root用户来进行远程管理的,在大多数情况下,为了安全起见,一般会使用一个普通账户来管理。 
 
我们可以在所有的被管理的机器上面创建一个ansible的用户,并且可以使用sudo来提升权限到root。当然我们在Ansible主机上面也需要这样一个用户,并且为其生成ssh key。
 
然后通过修改/etc/ansible/ansible.cfg配置文件中的remote_user = ansible以使ansible默认使用ansible用户来进行管理,然后使用 --sudo成熟来获取root权限。
 
 你也可以通过修改/etc/ansible/ansible.cfg 里的remote_port端口来修改默认远程管理的ssh的22端口。 一切完成后你就可以测试了:
ansible all -m ping --sudo
如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置,例子如下:
[webserver]
10.0.1.3 ansible_ssh_user=root
10.0.2.3 ansible_ssh_user=lucky
10.0.3.3 ansible_ssh_host=10.0.3.3 ansible_ssh_port=36000
[production]
10.0.1.3
10.0.2.3
bjdb0 ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa

简单说明

ansible_ssh_user--->用于管理远程主机的用户名
ansible_ssh_host--->用于指定被管理主机的端口
ansible_ssh_port---->用于指定ssh连接端口
ansible_ssh_private_key_file--->指定ssh key文件
host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。主机组直接还可以嵌套,需要使用关键字children,示例:
[jkbhost:children]
jkbhost-mysql
jkbhost-web
jkbhost-redis

[jkbhost-mysql]
10.0.1.81
10.0.1.82
10.0.1.88
10.0.1.89
10.0.1.96
10.0.1.107

[jkbhost-web]
10.0.1.104
10.0.1.105

[jkbhost-redis]
10.0.1.181
10.0.1.18我们也可以通过多个Inventory文件来进行主机管理,默认是/etc/ansible/hosts,如果多个管理文件,需要执行ansible命令的时候,通过-i参数来指定:
ansible -i /etc/ansible/hosts2 -m ping关于host就讲到这里,这是用来管理客户端的。 查看全部
Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子
[test]
10.0.3.56

[zabbix]
10.0.1.30

[web]
10.0.2.57


简要说明


[zabbix],[web]是对服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器,如:
blog[1:3].jkb.com,相当于blog1.jkb.com blog2.jkb.com blog3.jkb.com
我们已经了解到,Ansible默认是通过ssh的方式来远程管理批量服务器的,所以我们这里使用ssh,key加密的方式来进行ssh的认证会更方便,当然,你也可以选择使用Ansible的时候较少-k选项,来通过交互的方式输入密码。
 
Ansible管理主机,已经可以通过密钥的方式管理主机后,我们就可以用Ansible直接来做一些简单的测试,如下:
ansible all -m ping #用于检测所有的主机是否存活
如果只想检测某个组的话,可以把all替换成组名,例如:
ansible test -m ping
当然也可以直接输入管理主机的ip地址,例如:
ansible 10.0.3.56 -m ping
在默认的情况下Ansible是使用root用户来进行远程管理的,在大多数情况下,为了安全起见,一般会使用一个普通账户来管理。 
 
我们可以在所有的被管理的机器上面创建一个ansible的用户,并且可以使用sudo来提升权限到root。当然我们在Ansible主机上面也需要这样一个用户,并且为其生成ssh key。
 
然后通过修改/etc/ansible/ansible.cfg配置文件中的remote_user = ansible以使ansible默认使用ansible用户来进行管理,然后使用 --sudo成熟来获取root权限。
 
 你也可以通过修改/etc/ansible/ansible.cfg 里的remote_port端口来修改默认远程管理的ssh的22端口。 一切完成后你就可以测试了:
ansible all -m ping --sudo

如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置,例子如下:
[webserver]
10.0.1.3 ansible_ssh_user=root
10.0.2.3 ansible_ssh_user=lucky
10.0.3.3 ansible_ssh_host=10.0.3.3 ansible_ssh_port=36000
[production]
10.0.1.3
10.0.2.3
bjdb0 ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa


简单说明


ansible_ssh_user--->用于管理远程主机的用户名
ansible_ssh_host--->用于指定被管理主机的端口
ansible_ssh_port---->用于指定ssh连接端口
ansible_ssh_private_key_file--->指定ssh key文件
host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。
主机组直接还可以嵌套,需要使用关键字children,示例:
[jkbhost:children]
jkbhost-mysql
jkbhost-web
jkbhost-redis

[jkbhost-mysql]
10.0.1.81
10.0.1.82
10.0.1.88
10.0.1.89
10.0.1.96
10.0.1.107

[jkbhost-web]
10.0.1.104
10.0.1.105

[jkbhost-redis]
10.0.1.181
10.0.1.18
我们也可以通过多个Inventory文件来进行主机管理,默认是/etc/ansible/hosts,如果多个管理文件,需要执行ansible命令的时候,通过-i参数来指定:
ansible -i /etc/ansible/hosts2 -m ping
关于host就讲到这里,这是用来管理客户端的。

Ansible常用模块介绍

开源技术采菊篱下 发表了文章 • 0 个评论 • 1489 次浏览 • 2015-10-12 19:56 • 来自相关话题

之前文章http://openskill.cn/article/120已经介绍了what is ansible?下面给大家介绍介绍ansible常用的几个模块
 
Ansible通过模块的方式来完成一些远程的管理工作。可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数具体用法,也可以使用ansible-doc help module来查看该模块更详细的信息。
 

setup

可以用来收集远程主机的一些基本信息:
ansible -i /etc/ansible/hosts test -m setup

ping

可以用来测试远程主机的运行状态:
ansible test -m ping

file

设置文件的属性
file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible test -m file -a "path=/tmp/fstab state=absent"
ansible test -m file -a "path=/tmp/test state=touch"
ansible test -m file -a "path=/tmp/test state=directory"
ansible test -m file -a "path=/tmp/testd state=directory owner=root group=root mode=777"

copy

复制文件到远程主机
copy模块包含如下选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
示例:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"

command

在远程主机上执行命令
command模块包含如下选项:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
示例:
ansible test -a "ls /root"

shell

切换到某个shell执行指定的指令,参数与command相同。
示例:
ansible test -m shell -a "somescript.sh >> somelog.txt"

service

用于管理服务
该模块包含如下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
示例:
ansible test -m service -a "name=httpd state=started enabled=yes"
ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started"
ansible test -m service -a "name=network state=restarted args=eth0"

cron

用于管理计划任务
包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,[i],[/i]/2,……)
hour:小时(0-23,[i],[/i]/2,……)
minute:分钟(0-59,[i],[/i]/2,……)
month:月(1-12,[i],[/i]/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
示例:
ansible test -m cron -a 'name="check dirs" hour="5,2" job="ls -alh > /dev/null"'
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root" job="YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'

filesystem

在块设备上创建文件系统
选项:
dev:目标块设备
force:在一个已有文件系统的设备上强制创建
fstype:文件系统的类型
opts:传递给mkfs命令的选项

user

管理用户
home:
groups:
uid
password:
name:
createhome:
system:
remove:
state:
shell:
需要特别说明的是,password后面指定的密码不能是明文,后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,而登陆的时候输入的密码会被hash加密以后再去与/etc/shadow中存放的密码去做对比,会出现不一致的现象。所以需要先将密码字符串进行加密处理:openssl passwd -salt -1 "123456",然后将得到的字符串放到password中即可。

synchronize

使用rsync同步文件
archive
checksum
delete
dest
src
dest_port
existing_only: skip createing new files on receiver
links
owner
mode:(push, pull)
recursive
rsync_path
times:Preserve modification times
示例:
src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
src=some/relative/path dest=/some/absolute/path archive=no links=yes
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull

mount

配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
passno
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
示例:
name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
name=/srv/disk src='LABEL=SOME_LABEL' state=present
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present

ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'

raw

类似command,可以传递管道原文地址:http://devopsh.com/774.html  查看全部
之前文章http://openskill.cn/article/120已经介绍了what is ansible?下面给大家介绍介绍ansible常用的几个模块
 
Ansible通过模块的方式来完成一些远程的管理工作。可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数具体用法,也可以使用ansible-doc help module来查看该模块更详细的信息。
 


setup


可以用来收集远程主机的一些基本信息:
ansible -i /etc/ansible/hosts test -m setup


ping


可以用来测试远程主机的运行状态:
ansible test -m ping


file


设置文件的属性
file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible test -m file -a "path=/tmp/fstab state=absent"
ansible test -m file -a "path=/tmp/test state=touch"
ansible test -m file -a "path=/tmp/test state=directory"
ansible test -m file -a "path=/tmp/testd state=directory owner=root group=root mode=777"


copy


复制文件到远程主机
copy模块包含如下选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
示例:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"


command


在远程主机上执行命令
command模块包含如下选项:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
示例:
ansible test -a "ls /root"


shell


切换到某个shell执行指定的指令,参数与command相同。
示例:
ansible test -m shell -a "somescript.sh >> somelog.txt"


service


用于管理服务
该模块包含如下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
示例:
ansible test -m service -a "name=httpd state=started enabled=yes"
ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started"
ansible test -m service -a "name=network state=restarted args=eth0"


cron


用于管理计划任务
包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,[i],[/i]/2,……)
hour:小时(0-23,[i],[/i]/2,……)
minute:分钟(0-59,[i],[/i]/2,……)
month:月(1-12,[i],[/i]/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
示例:
ansible test -m cron -a 'name="check dirs" hour="5,2" job="ls -alh > /dev/null"'
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root" job="YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'


filesystem


在块设备上创建文件系统
选项:
dev:目标块设备
force:在一个已有文件系统的设备上强制创建
fstype:文件系统的类型
opts:传递给mkfs命令的选项


user


管理用户
home:
groups:
uid
password:
name:
createhome:
system:
remove:
state:
shell:
需要特别说明的是,password后面指定的密码不能是明文,后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,而登陆的时候输入的密码会被hash加密以后再去与/etc/shadow中存放的密码去做对比,会出现不一致的现象。所以需要先将密码字符串进行加密处理:openssl passwd -salt -1 "123456",然后将得到的字符串放到password中即可。


synchronize


使用rsync同步文件
archive
checksum
delete
dest
src
dest_port
existing_only: skip createing new files on receiver
links
owner
mode:(push, pull)
recursive
rsync_path
times:Preserve modification times
示例:
src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
src=some/relative/path dest=/some/absolute/path archive=no links=yes
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull


mount


配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
passno
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
示例:
name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
name=/srv/disk src='LABEL=SOME_LABEL' state=present
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present

ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'


raw


类似command,可以传递管道
原文地址:http://devopsh.com/774.html 

Ansible工作原理(2)

开源技术采菊篱下 发表了文章 • 0 个评论 • 771 次浏览 • 2015-09-27 10:39 • 来自相关话题

HOW ANSIBLE WORKS

1.有效的体系结构
Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。
ssh-agent bash
ssh-add ~/.ssh/id_rsa管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:
[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。
2.基础知识:使用ANSIBLE特设并行任务执行
一旦你有了一个实例,你可以谈论它,没有任何额外的设置:
ansible all -m ping
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module: http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。
---
[list]
[*]hosts: webservers[/*]
[/list] serial: 5 # update 5 machines at a time
roles:
- common
- webapp


[list]
[*]hosts: content_servers[/*]
[/list] roles:
- common
- contentAN EXAMPLE app_config.yml MIGHT LOOK LIKE:
---
[list]
[*]yum: name= state=installed[/*]
[/list] with_items:
- app_server
- acme_software

[list]
[*]service: name=app_server state=running enabled=yes[/*]
[/list]
[list]
[*]template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf[/*]
[/list] notify:
- restart app serverThe Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:
Ansible文档探索在更大的深度。还有很多,你可以做的,包括:
[]机器的负载平衡器和监控窗口[/][]有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件[/][]设置一些变量和其他提示,当他们没有设置默认值[/][]使用一个命令的结果决定是否运行另一个[/]
有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文:http://www.ansible.com/how-ansible-works 查看全部


HOW ANSIBLE WORKS


1.有效的体系结构
Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。
ssh-agent bash
ssh-add ~/.ssh/id_rsa
管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:
    [webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com
一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。
2.基础知识:使用ANSIBLE特设并行任务执行
一旦你有了一个实例,你可以谈论它,没有任何额外的设置:
ansible all -m ping 
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"
请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module: http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。
---
[list]
[*]hosts: webservers[/*]
[/list] serial: 5 # update 5 machines at a time
roles:
- common
- webapp


[list]
[*]hosts: content_servers[/*]
[/list] roles:
- common
- content
AN EXAMPLE app_config.yml MIGHT LOOK LIKE:
---
[list]
[*]yum: name= state=installed[/*]
[/list] with_items:
- app_server
- acme_software

[list]
[*]service: name=app_server state=running enabled=yes[/*]
[/list]
[list]
[*]template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf[/*]
[/list] notify:
- restart app server
The Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:
Ansible文档探索在更大的深度。还有很多,你可以做的,包括:
    []机器的负载平衡器和监控窗口[/][]有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件[/][]设置一些变量和其他提示,当他们没有设置默认值[/][]使用一个命令的结果决定是否运行另一个[/]

有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文:http://www.ansible.com/how-ansible-works

Ansible介绍(1)

开源技术采菊篱下 发表了文章 • 0 个评论 • 854 次浏览 • 2015-09-27 10:25 • 来自相关话题

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。

Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的——甚至是那些不熟悉程序。

我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。

Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。

Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。

被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。

它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。

我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。 查看全部
Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。

Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的——甚至是那些不熟悉程序。

我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。

Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。

Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。

被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。

它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。

我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。

"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 1901 次浏览 • 2015-07-26 23:56 • 来自相关话题

使用ansible的copy模块报错

开源技术Ansible 回复了问题 • 2 人关注 • 1 个回复 • 1085 次浏览 • 2015-06-30 19:49 • 来自相关话题

ansible安装过程中常遇到的错误

开源技术采菊篱下 发表了文章 • 0 个评论 • 2210 次浏览 • 2015-06-29 11:03 • 来自相关话题

1.安装完成后允许命令报错
Traceback (most recent call last):
File "/usr/bin/ansible", line 197, in <module>
(runner, results) = cli.run(options, args)
File "/usr/bin/ansible", line 163, in run
extra_vars=extra_vars,
File "/usr/lib/python2.6/site-packages/ansible/runner/__init__.py", line 233, in __init__
cmd = subprocess.Popen(['ssh','-o','ControlPersist'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory解决方法:
# yum install openssh-clients2.出现Error: ansible requires a json module, none found!
SSH password:
10.0.1.110 | FAILED >> {
"failed": true,
"msg": "Error: ansible requires a json module, nonefound!",
"parsed": false
}解决方法:
python版本过低,要不升级python要不就升级安装python-simplejson。3.安装完成后连接客户端服务器报错
FAILED => Using a SSH password insteadof a key is not possible because Host Key checking is enabled and sshpass doesnot support this. Please add this host'sfingerprint to your known_hosts file to manage this host.解决方法:
在ansible 服务器上使用ssh 登陆下/etc/ansible/hosts 里面配置的服务器。然后再次使用ansible 去管理就不会报上面的错误了!但这样大批量登陆就麻烦来。因为默认ansible是使用key验证的,如果使用密码登陆的服务器,使用ansible的话,要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。再修改:host_key_checking= False即可4.如果客户端不在know_hosts里将会报错
paramiko: The authenticity of host '192.168.24.15'can't be established.
The ssh-rsa key fingerprint is397c139fd4b0d763fcffaee346a4bf6b.
Are you sure you want to continueconnecting (yes/no)?
解决方法:
需要修改ansible.cfg的#host_key_checking= False取消注释5.出现FAILED => FAILED: not a valid DSA private key file
解决方法:
需要你在最后添加参数-k6.openssh升级后无法登录报错
PAM unable todlopen(/lib64/security/pam_stack.so): /lib64/security/pam_stack.so: cannot openshared object
file: No such file or directory解决方法:
sshrpm 升级后会修改/etc/pam.d/sshd 文件。需要升级前备份此文件最后还原即可登录。7.第一次系统初始化运行生成本机ansible用户key时报错
failed: [127.0.0.1] =>{"checksum": "f5f2f20fc0774be961fffb951a50023e31abe920","failed": true}
msg: Aborting, target uses selinux but pythonbindings (libselinux-python) aren't installed!
FATAL: all hosts have already failed –aborting解决方法:
# yum install libselinux-python -y 查看全部
1.安装完成后允许命令报错
Traceback (most recent call last):
File "/usr/bin/ansible", line 197, in <module>
(runner, results) = cli.run(options, args)
File "/usr/bin/ansible", line 163, in run
extra_vars=extra_vars,
File "/usr/lib/python2.6/site-packages/ansible/runner/__init__.py", line 233, in __init__
cmd = subprocess.Popen(['ssh','-o','ControlPersist'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
解决方法:
# yum install openssh-clients
2.出现Error: ansible requires a json module, none found!
SSH password:
10.0.1.110 | FAILED >> {
"failed": true,
"msg": "Error: ansible requires a json module, nonefound!",
"parsed": false
}
解决方法:
python版本过低,要不升级python要不就升级安装python-simplejson。
3.安装完成后连接客户端服务器报错
FAILED => Using a SSH password insteadof a key is not possible because Host Key checking is enabled and sshpass doesnot support this.  Please add this host'sfingerprint to your known_hosts file to manage this host.
解决方法:
在ansible 服务器上使用ssh 登陆下/etc/ansible/hosts 里面配置的服务器。然后再次使用ansible 去管理就不会报上面的错误了!但这样大批量登陆就麻烦来。因为默认ansible是使用key验证的,如果使用密码登陆的服务器,使用ansible的话,要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。再修改:host_key_checking= False即可
4.如果客户端不在know_hosts里将会报错
paramiko: The authenticity of host '192.168.24.15'can't be established.
The ssh-rsa key fingerprint is397c139fd4b0d763fcffaee346a4bf6b.
Are you sure you want to continueconnecting (yes/no)?

解决方法:
需要修改ansible.cfg的#host_key_checking= False取消注释
5.出现FAILED => FAILED: not a valid DSA private key file
解决方法:
需要你在最后添加参数-k
6.openssh升级后无法登录报错
PAM unable todlopen(/lib64/security/pam_stack.so): /lib64/security/pam_stack.so: cannot openshared object
file: No such file or directory
解决方法:
sshrpm 升级后会修改/etc/pam.d/sshd 文件。需要升级前备份此文件最后还原即可登录。
7.第一次系统初始化运行生成本机ansible用户key时报错
failed: [127.0.0.1] =>{"checksum": "f5f2f20fc0774be961fffb951a50023e31abe920","failed": true}
msg: Aborting, target uses selinux but pythonbindings (libselinux-python) aren't installed!
FATAL: all hosts have already failed –aborting
解决方法:
# yum install libselinux-python -y

"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

回复

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 1901 次浏览 • 2015-07-26 23:56 • 来自相关话题

使用ansible的copy模块报错

回复

开源技术Ansible 回复了问题 • 2 人关注 • 1 个回复 • 1085 次浏览 • 2015-06-30 19:49 • 来自相关话题

Ansible Inventory详解

开源技术采菊篱下 发表了文章 • 0 个评论 • 1042 次浏览 • 2015-10-15 18:50 • 来自相关话题

Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子
[test]
10.0.3.56

[zabbix]
10.0.1.30

[web]
10.0.2.57

简要说明

[zabbix],[web]是对服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器,如:
blog[1:3].jkb.com,相当于blog1.jkb.com blog2.jkb.com blog3.jkb.com我们已经了解到,Ansible默认是通过ssh的方式来远程管理批量服务器的,所以我们这里使用ssh,key加密的方式来进行ssh的认证会更方便,当然,你也可以选择使用Ansible的时候较少-k选项,来通过交互的方式输入密码。
 
Ansible管理主机,已经可以通过密钥的方式管理主机后,我们就可以用Ansible直接来做一些简单的测试,如下:
ansible all -m ping #用于检测所有的主机是否存活如果只想检测某个组的话,可以把all替换成组名,例如:
ansible test -m ping当然也可以直接输入管理主机的ip地址,例如:
ansible 10.0.3.56 -m ping在默认的情况下Ansible是使用root用户来进行远程管理的,在大多数情况下,为了安全起见,一般会使用一个普通账户来管理。 
 
我们可以在所有的被管理的机器上面创建一个ansible的用户,并且可以使用sudo来提升权限到root。当然我们在Ansible主机上面也需要这样一个用户,并且为其生成ssh key。
 
然后通过修改/etc/ansible/ansible.cfg配置文件中的remote_user = ansible以使ansible默认使用ansible用户来进行管理,然后使用 --sudo成熟来获取root权限。
 
 你也可以通过修改/etc/ansible/ansible.cfg 里的remote_port端口来修改默认远程管理的ssh的22端口。 一切完成后你就可以测试了:
ansible all -m ping --sudo
如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置,例子如下:
[webserver]
10.0.1.3 ansible_ssh_user=root
10.0.2.3 ansible_ssh_user=lucky
10.0.3.3 ansible_ssh_host=10.0.3.3 ansible_ssh_port=36000
[production]
10.0.1.3
10.0.2.3
bjdb0 ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa

简单说明

ansible_ssh_user--->用于管理远程主机的用户名
ansible_ssh_host--->用于指定被管理主机的端口
ansible_ssh_port---->用于指定ssh连接端口
ansible_ssh_private_key_file--->指定ssh key文件
host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。主机组直接还可以嵌套,需要使用关键字children,示例:
[jkbhost:children]
jkbhost-mysql
jkbhost-web
jkbhost-redis

[jkbhost-mysql]
10.0.1.81
10.0.1.82
10.0.1.88
10.0.1.89
10.0.1.96
10.0.1.107

[jkbhost-web]
10.0.1.104
10.0.1.105

[jkbhost-redis]
10.0.1.181
10.0.1.18我们也可以通过多个Inventory文件来进行主机管理,默认是/etc/ansible/hosts,如果多个管理文件,需要执行ansible命令的时候,通过-i参数来指定:
ansible -i /etc/ansible/hosts2 -m ping关于host就讲到这里,这是用来管理客户端的。 查看全部
Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子
[test]
10.0.3.56

[zabbix]
10.0.1.30

[web]
10.0.2.57


简要说明


[zabbix],[web]是对服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器,如:
blog[1:3].jkb.com,相当于blog1.jkb.com blog2.jkb.com blog3.jkb.com
我们已经了解到,Ansible默认是通过ssh的方式来远程管理批量服务器的,所以我们这里使用ssh,key加密的方式来进行ssh的认证会更方便,当然,你也可以选择使用Ansible的时候较少-k选项,来通过交互的方式输入密码。
 
Ansible管理主机,已经可以通过密钥的方式管理主机后,我们就可以用Ansible直接来做一些简单的测试,如下:
ansible all -m ping #用于检测所有的主机是否存活
如果只想检测某个组的话,可以把all替换成组名,例如:
ansible test -m ping
当然也可以直接输入管理主机的ip地址,例如:
ansible 10.0.3.56 -m ping
在默认的情况下Ansible是使用root用户来进行远程管理的,在大多数情况下,为了安全起见,一般会使用一个普通账户来管理。 
 
我们可以在所有的被管理的机器上面创建一个ansible的用户,并且可以使用sudo来提升权限到root。当然我们在Ansible主机上面也需要这样一个用户,并且为其生成ssh key。
 
然后通过修改/etc/ansible/ansible.cfg配置文件中的remote_user = ansible以使ansible默认使用ansible用户来进行管理,然后使用 --sudo成熟来获取root权限。
 
 你也可以通过修改/etc/ansible/ansible.cfg 里的remote_port端口来修改默认远程管理的ssh的22端口。 一切完成后你就可以测试了:
ansible all -m ping --sudo

如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置,例子如下:
[webserver]
10.0.1.3 ansible_ssh_user=root
10.0.2.3 ansible_ssh_user=lucky
10.0.3.3 ansible_ssh_host=10.0.3.3 ansible_ssh_port=36000
[production]
10.0.1.3
10.0.2.3
bjdb0 ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa


简单说明


ansible_ssh_user--->用于管理远程主机的用户名
ansible_ssh_host--->用于指定被管理主机的端口
ansible_ssh_port---->用于指定ssh连接端口
ansible_ssh_private_key_file--->指定ssh key文件
host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。
主机组直接还可以嵌套,需要使用关键字children,示例:
[jkbhost:children]
jkbhost-mysql
jkbhost-web
jkbhost-redis

[jkbhost-mysql]
10.0.1.81
10.0.1.82
10.0.1.88
10.0.1.89
10.0.1.96
10.0.1.107

[jkbhost-web]
10.0.1.104
10.0.1.105

[jkbhost-redis]
10.0.1.181
10.0.1.18
我们也可以通过多个Inventory文件来进行主机管理,默认是/etc/ansible/hosts,如果多个管理文件,需要执行ansible命令的时候,通过-i参数来指定:
ansible -i /etc/ansible/hosts2 -m ping
关于host就讲到这里,这是用来管理客户端的。

Ansible常用模块介绍

开源技术采菊篱下 发表了文章 • 0 个评论 • 1489 次浏览 • 2015-10-12 19:56 • 来自相关话题

之前文章http://openskill.cn/article/120已经介绍了what is ansible?下面给大家介绍介绍ansible常用的几个模块
 
Ansible通过模块的方式来完成一些远程的管理工作。可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数具体用法,也可以使用ansible-doc help module来查看该模块更详细的信息。
 

setup

可以用来收集远程主机的一些基本信息:
ansible -i /etc/ansible/hosts test -m setup

ping

可以用来测试远程主机的运行状态:
ansible test -m ping

file

设置文件的属性
file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible test -m file -a "path=/tmp/fstab state=absent"
ansible test -m file -a "path=/tmp/test state=touch"
ansible test -m file -a "path=/tmp/test state=directory"
ansible test -m file -a "path=/tmp/testd state=directory owner=root group=root mode=777"

copy

复制文件到远程主机
copy模块包含如下选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
示例:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"

command

在远程主机上执行命令
command模块包含如下选项:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
示例:
ansible test -a "ls /root"

shell

切换到某个shell执行指定的指令,参数与command相同。
示例:
ansible test -m shell -a "somescript.sh >> somelog.txt"

service

用于管理服务
该模块包含如下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
示例:
ansible test -m service -a "name=httpd state=started enabled=yes"
ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started"
ansible test -m service -a "name=network state=restarted args=eth0"

cron

用于管理计划任务
包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,[i],[/i]/2,……)
hour:小时(0-23,[i],[/i]/2,……)
minute:分钟(0-59,[i],[/i]/2,……)
month:月(1-12,[i],[/i]/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
示例:
ansible test -m cron -a 'name="check dirs" hour="5,2" job="ls -alh > /dev/null"'
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root" job="YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'

filesystem

在块设备上创建文件系统
选项:
dev:目标块设备
force:在一个已有文件系统的设备上强制创建
fstype:文件系统的类型
opts:传递给mkfs命令的选项

user

管理用户
home:
groups:
uid
password:
name:
createhome:
system:
remove:
state:
shell:
需要特别说明的是,password后面指定的密码不能是明文,后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,而登陆的时候输入的密码会被hash加密以后再去与/etc/shadow中存放的密码去做对比,会出现不一致的现象。所以需要先将密码字符串进行加密处理:openssl passwd -salt -1 "123456",然后将得到的字符串放到password中即可。

synchronize

使用rsync同步文件
archive
checksum
delete
dest
src
dest_port
existing_only: skip createing new files on receiver
links
owner
mode:(push, pull)
recursive
rsync_path
times:Preserve modification times
示例:
src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
src=some/relative/path dest=/some/absolute/path archive=no links=yes
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull

mount

配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
passno
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
示例:
name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
name=/srv/disk src='LABEL=SOME_LABEL' state=present
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present

ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'

raw

类似command,可以传递管道原文地址:http://devopsh.com/774.html  查看全部
之前文章http://openskill.cn/article/120已经介绍了what is ansible?下面给大家介绍介绍ansible常用的几个模块
 
Ansible通过模块的方式来完成一些远程的管理工作。可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数具体用法,也可以使用ansible-doc help module来查看该模块更详细的信息。
 


setup


可以用来收集远程主机的一些基本信息:
ansible -i /etc/ansible/hosts test -m setup


ping


可以用来测试远程主机的运行状态:
ansible test -m ping


file


设置文件的属性
file模块包含如下选项:
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
示例:
ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
ansible test -m file -a "path=/tmp/fstab state=absent"
ansible test -m file -a "path=/tmp/test state=touch"
ansible test -m file -a "path=/tmp/test state=directory"
ansible test -m file -a "path=/tmp/testd state=directory owner=root group=root mode=777"


copy


复制文件到远程主机
copy模块包含如下选项:
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代"src",可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归的设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
示例:
ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"


command


在远程主机上执行命令
command模块包含如下选项:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该指定的目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
示例:
ansible test -a "ls /root"


shell


切换到某个shell执行指定的指令,参数与command相同。
示例:
ansible test -m shell -a "somescript.sh >> somelog.txt"


service


用于管理服务
该模块包含如下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
示例:
ansible test -m service -a "name=httpd state=started enabled=yes"
ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started"
ansible test -m service -a "name=network state=restarted args=eth0"


cron


用于管理计划任务
包含如下选项:
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,[i],[/i]/2,……)
hour:小时(0-23,[i],[/i]/2,……)
minute:分钟(0-59,[i],[/i]/2,……)
month:月(1-12,[i],[/i]/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
示例:
ansible test -m cron -a 'name="check dirs" hour="5,2" job="ls -alh > /dev/null"'
ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root" job="YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'


filesystem


在块设备上创建文件系统
选项:
dev:目标块设备
force:在一个已有文件系统的设备上强制创建
fstype:文件系统的类型
opts:传递给mkfs命令的选项


user


管理用户
home:
groups:
uid
password:
name:
createhome:
system:
remove:
state:
shell:
需要特别说明的是,password后面指定的密码不能是明文,后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,而登陆的时候输入的密码会被hash加密以后再去与/etc/shadow中存放的密码去做对比,会出现不一致的现象。所以需要先将密码字符串进行加密处理:openssl passwd -salt -1 "123456",然后将得到的字符串放到password中即可。


synchronize


使用rsync同步文件
archive
checksum
delete
dest
src
dest_port
existing_only: skip createing new files on receiver
links
owner
mode:(push, pull)
recursive
rsync_path
times:Preserve modification times
示例:
src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
src=some/relative/path dest=/some/absolute/path archive=no links=yes
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=--no-motd,--exclude=.git mode=pull


mount


配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
passno
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
示例:
name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
name=/srv/disk src='LABEL=SOME_LABEL' state=present
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present

ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'


raw


类似command,可以传递管道
原文地址:http://devopsh.com/774.html 

Ansible工作原理(2)

开源技术采菊篱下 发表了文章 • 0 个评论 • 771 次浏览 • 2015-09-27 10:39 • 来自相关话题

HOW ANSIBLE WORKS

1.有效的体系结构
Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。
ssh-agent bash
ssh-add ~/.ssh/id_rsa管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:
[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。
2.基础知识:使用ANSIBLE特设并行任务执行
一旦你有了一个实例,你可以谈论它,没有任何额外的设置:
ansible all -m ping
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module: http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。
---
[list]
[*]hosts: webservers[/*]
[/list] serial: 5 # update 5 machines at a time
roles:
- common
- webapp


[list]
[*]hosts: content_servers[/*]
[/list] roles:
- common
- contentAN EXAMPLE app_config.yml MIGHT LOOK LIKE:
---
[list]
[*]yum: name= state=installed[/*]
[/list] with_items:
- app_server
- acme_software

[list]
[*]service: name=app_server state=running enabled=yes[/*]
[/list]
[list]
[*]template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf[/*]
[/list] notify:
- restart app serverThe Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:
Ansible文档探索在更大的深度。还有很多,你可以做的,包括:
[]机器的负载平衡器和监控窗口[/][]有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件[/][]设置一些变量和其他提示,当他们没有设置默认值[/][]使用一个命令的结果决定是否运行另一个[/]
有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文:http://www.ansible.com/how-ansible-works 查看全部


HOW ANSIBLE WORKS


1.有效的体系结构
Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。
ssh-agent bash
ssh-add ~/.ssh/id_rsa
管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:
    [webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com
一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。
2.基础知识:使用ANSIBLE特设并行任务执行
一旦你有了一个实例,你可以谈论它,没有任何额外的设置:
ansible all -m ping 
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"
请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module: http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。
---
[list]
[*]hosts: webservers[/*]
[/list] serial: 5 # update 5 machines at a time
roles:
- common
- webapp


[list]
[*]hosts: content_servers[/*]
[/list] roles:
- common
- content
AN EXAMPLE app_config.yml MIGHT LOOK LIKE:
---
[list]
[*]yum: name= state=installed[/*]
[/list] with_items:
- app_server
- acme_software

[list]
[*]service: name=app_server state=running enabled=yes[/*]
[/list]
[list]
[*]template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf[/*]
[/list] notify:
- restart app server
The Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:
Ansible文档探索在更大的深度。还有很多,你可以做的,包括:
    []机器的负载平衡器和监控窗口[/][]有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件[/][]设置一些变量和其他提示,当他们没有设置默认值[/][]使用一个命令的结果决定是否运行另一个[/]

有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文:http://www.ansible.com/how-ansible-works

Ansible介绍(1)

开源技术采菊篱下 发表了文章 • 0 个评论 • 854 次浏览 • 2015-09-27 10:25 • 来自相关话题

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。

Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的——甚至是那些不熟悉程序。

我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。

Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。

Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。

被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。

它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。

我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。 查看全部
Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。

Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的——甚至是那些不熟悉程序。

我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。

Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。

Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。

被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。

它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。

我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。

ansible安装过程中常遇到的错误

开源技术采菊篱下 发表了文章 • 0 个评论 • 2210 次浏览 • 2015-06-29 11:03 • 来自相关话题

1.安装完成后允许命令报错
Traceback (most recent call last):
File "/usr/bin/ansible", line 197, in <module>
(runner, results) = cli.run(options, args)
File "/usr/bin/ansible", line 163, in run
extra_vars=extra_vars,
File "/usr/lib/python2.6/site-packages/ansible/runner/__init__.py", line 233, in __init__
cmd = subprocess.Popen(['ssh','-o','ControlPersist'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory解决方法:
# yum install openssh-clients2.出现Error: ansible requires a json module, none found!
SSH password:
10.0.1.110 | FAILED >> {
"failed": true,
"msg": "Error: ansible requires a json module, nonefound!",
"parsed": false
}解决方法:
python版本过低,要不升级python要不就升级安装python-simplejson。3.安装完成后连接客户端服务器报错
FAILED => Using a SSH password insteadof a key is not possible because Host Key checking is enabled and sshpass doesnot support this. Please add this host'sfingerprint to your known_hosts file to manage this host.解决方法:
在ansible 服务器上使用ssh 登陆下/etc/ansible/hosts 里面配置的服务器。然后再次使用ansible 去管理就不会报上面的错误了!但这样大批量登陆就麻烦来。因为默认ansible是使用key验证的,如果使用密码登陆的服务器,使用ansible的话,要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。再修改:host_key_checking= False即可4.如果客户端不在know_hosts里将会报错
paramiko: The authenticity of host '192.168.24.15'can't be established.
The ssh-rsa key fingerprint is397c139fd4b0d763fcffaee346a4bf6b.
Are you sure you want to continueconnecting (yes/no)?
解决方法:
需要修改ansible.cfg的#host_key_checking= False取消注释5.出现FAILED => FAILED: not a valid DSA private key file
解决方法:
需要你在最后添加参数-k6.openssh升级后无法登录报错
PAM unable todlopen(/lib64/security/pam_stack.so): /lib64/security/pam_stack.so: cannot openshared object
file: No such file or directory解决方法:
sshrpm 升级后会修改/etc/pam.d/sshd 文件。需要升级前备份此文件最后还原即可登录。7.第一次系统初始化运行生成本机ansible用户key时报错
failed: [127.0.0.1] =>{"checksum": "f5f2f20fc0774be961fffb951a50023e31abe920","failed": true}
msg: Aborting, target uses selinux but pythonbindings (libselinux-python) aren't installed!
FATAL: all hosts have already failed –aborting解决方法:
# yum install libselinux-python -y 查看全部
1.安装完成后允许命令报错
Traceback (most recent call last):
File "/usr/bin/ansible", line 197, in <module>
(runner, results) = cli.run(options, args)
File "/usr/bin/ansible", line 163, in run
extra_vars=extra_vars,
File "/usr/lib/python2.6/site-packages/ansible/runner/__init__.py", line 233, in __init__
cmd = subprocess.Popen(['ssh','-o','ControlPersist'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
解决方法:
# yum install openssh-clients
2.出现Error: ansible requires a json module, none found!
SSH password:
10.0.1.110 | FAILED >> {
"failed": true,
"msg": "Error: ansible requires a json module, nonefound!",
"parsed": false
}
解决方法:
python版本过低,要不升级python要不就升级安装python-simplejson。
3.安装完成后连接客户端服务器报错
FAILED => Using a SSH password insteadof a key is not possible because Host Key checking is enabled and sshpass doesnot support this.  Please add this host'sfingerprint to your known_hosts file to manage this host.
解决方法:
在ansible 服务器上使用ssh 登陆下/etc/ansible/hosts 里面配置的服务器。然后再次使用ansible 去管理就不会报上面的错误了!但这样大批量登陆就麻烦来。因为默认ansible是使用key验证的,如果使用密码登陆的服务器,使用ansible的话,要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。再修改:host_key_checking= False即可
4.如果客户端不在know_hosts里将会报错
paramiko: The authenticity of host '192.168.24.15'can't be established.
The ssh-rsa key fingerprint is397c139fd4b0d763fcffaee346a4bf6b.
Are you sure you want to continueconnecting (yes/no)?

解决方法:
需要修改ansible.cfg的#host_key_checking= False取消注释
5.出现FAILED => FAILED: not a valid DSA private key file
解决方法:
需要你在最后添加参数-k
6.openssh升级后无法登录报错
PAM unable todlopen(/lib64/security/pam_stack.so): /lib64/security/pam_stack.so: cannot openshared object
file: No such file or directory
解决方法:
sshrpm 升级后会修改/etc/pam.d/sshd 文件。需要升级前备份此文件最后还原即可登录。
7.第一次系统初始化运行生成本机ansible用户key时报错
failed: [127.0.0.1] =>{"checksum": "f5f2f20fc0774be961fffb951a50023e31abe920","failed": true}
msg: Aborting, target uses selinux but pythonbindings (libselinux-python) aren't installed!
FATAL: all hosts have already failed –aborting
解决方法:
# yum install libselinux-python -y
Ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。