Ansible安装配置和基本使用

http://www.tuicool.com/wx/vUfYVfA

一、ansible 安装

ansible 依赖于python2.6或更高的版本、paramiko、PyYAML及Jinja2。

https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

tar xvzf Python-2.7.8.tgz

cd Python-2.7.8

./configure --prefix=/usr/local

make --jobs=grep processor/proc/cpuinfo | wc -l

make install

将python头文件拷贝到标准目录,以避免编译ansible时,找不到所需的头文件

cd /usr/local/include/python2.7

cp -a ./* /usr/local/include/

备份旧版本的python,并符号链接新版本的python

cd /usr/bin

mv python python2.6

ln -s /usr/local/bin/python

修改yum脚本,使其指向旧版本的python,已避免其无法运行

vim /usr/bin/yum

!/usr/bin/python --> #!/usr/bin/python2.6

1.1 编译安装

解决依赖关系

yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

解压安装包

https://github.com/ansible/ansible/archive/v1.7.2.tar.gz

tar xf ansible-1.5.4.tar.gz # cd ansible-1.5.4

编译安装

python setup.py build # python setup.py install

拷贝配置文件

mkdir /etc/ansible # cp -r examples/* /etc/ansible

1.2 rpm包安装

使用阿里云镜像源即可,这里为了方便使用,就直接使用yum安装了。

Fedora 用户可直接安装Ansible, 但RHEL或CentOS用户,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible

注意:不同版本的ansible的功能差异可能较大。

二、配置

配置文件:/etc/ansible/ansible.cfg

hostfile=/etc/ansible/hosts #指定默认hosts配置的位置 host_key_checking = False #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤 ask_pass=True # 每次执行ansible命令是否询问ssh密码 ask_sudo_pass=True # 每次执行ansible命令时是否询问sudo密码

主机清单:/etc/ansible/hosts

主程序:ansible、ansible paly-book、ansible-doc

1、将要管理的主机纳入 /etc/ansible/hosts配置文件中,可以填写IP或是主机名

[WebServers] 10.10.10.3 10.10.10.4

2、.基于ssh的方式与被管理的主机进行通信,在管理的主机上(部署ansible的主机上)生成一对非对称密钥,将公钥发给被管理的主机。

a,生成密钥对:ssh-keygen -t rsa

b,将密钥发放到要管理的主机:ssh-copy-id -i 10.10.10.3 或 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.3

3、使用ansible命令测试

ansible all -m ping

[root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS => { "changed": false, "ping": "pong" }

三、基本使用

1、常用命令

ansible-doc 命令:获取模块列表、模块使用格式。

ansible-doc -l :获取列表

ansible-doc -s module_name:获取指定模块信息

2、ansible 命令格式

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

<host-pattern> 指明管控主机,以模式表示或者直接指定ip,必须事先指定在文件中;all所有

[-f forks] 指明每批管控多少主机,默认是5个主机一批次

[-m module_name] 使用何种模块操作,所有操作都需要通过模块指定

[-a args] 指明模块专用参数;args 一般是 key=value格式。注:command模块的参数不是kv模式,而是直接给出要执行的命令。

注意:<host-pattern> 默认读取/etc/ansible/hosts,也可以指明自定义文件路径 -iPATH,--inventory=PATH:指明使用的 host inventory文件路径;

3、常用模块介绍

1、command模块:远程主机上运行命令

例:ansible hosts -m command -a "ls /tmp" 注:command模块也可以省略。

给远程主机添加用户、设置密码:

ansible hosts -a 'useradd user1'

ansible hosts -a 'echo abc | passwd --stdin user1'

直接这样使用不会成功,只会添加用户密码不会设置成功,不支持管道符,下面介绍shell模块

2、shell模块:远程主机在shell进程下运行命令,支持shell特性,也支持管道符。

ansible hosts -m shell -a 'echo abc | passwd --stdin user1'

10.10.10.4 | SUCCESS | rc=0 >>

3、copy模块:把当前主机文件复制到远程主机位置,可以指定mode、own、group

ansible hosts -m copy -a 'src=/tmp/abc.txt dest=/root/ mode=644 owner=ansible group=root'

10.10.10.4 | SUCCESS => { "changed": true, "checksum": "325287cee456533bf76025312e5d05e842cb43a9", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "1c6d47c6e4d59c630751b47fff140b89", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 }

4、cron模块:在远程主机指定crontab周期性计划任务

minute= hour= day= month= weekday= job= name= (必须填写) state=

ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 & >/dev/null' name=synctime" 可使用crontab -l查看

在管理的主机上可以删除制定的计划任务

ansible all -m cron -a 'state=absent name=synctome'

10.10.10.4 | SUCCESS => { "changed": true, "envs": [], "jobs": [] }

5、fetch模块:和copy相反,从远程主机拷贝文件到本地主机

ansible all -m fetch -a "src=/root/abc.txt dest=/root/kel/ flat=yes"

可以不要flat=yes参数,但作用:

当dest=/root/kel/ ,abc.txt会保存在/root/kel/目录下

当dest=/root/kel ,会拷贝abc.txt文件,并命名成kel

6、file模块:file模块包含了文件、文件夹、超级链接类的创建、拷贝、移动、删除

ansible all -m file -a

修改文件的所有组、人、权限

path=/etc/foo.conf owner=foo group=foo mode=0644

操作连接的案例

src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link

参数化案例

src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items:

  • { path: 'x',dest: 'y' } - { path: 'z',dest: 'k' }

使用touch创建一个空文件并定义权限

path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r"

touch一个空文件,并修改权限

path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw"

7、yum模块:用于yum安装安装和卸载

ansible all -m yum -a "name=httpd"

8、service模块:服务管理

ansible all -m service -a "name=httpd state=started/stopped enabled=yes"

9、user/group模块:user模块管理用户;group模块管理group

ansible all -m user -a 'name=user1 group=root' 添加用户,更改属组

ansible all -m user -a 'name=user1 state=absent remove=yes' 删除用户

ansible all -m group -a "name=test1 state=absent" 删除用户组

四、Playbook剧本

playbook 是ansible更强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行。playbook组织格式为使用YAML语言来编写的。

playbook 是由一个或多个“play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让他们联通起来按事先编排的机制生效。

1、例子:

在ansible主机上的root目录下创建httpd目录,将本机的httpd.conf文件拷贝到该目录下,修改配置文件里的监听端口是8081

vim web.yaml

  • hosts: webservers

remote_user:root #root前不能有空格

tasks: #任务列表

  • name:install httpd package #设置任务名称非必要

yum name=httpd state=present #yum后的: 删除掉

  • name:install configure file

copy src=/root/httpd/httpd.conf dest=/etc/httpd/conf

  • name:start httpd service

service name=httpd state=started

注意:yaml文件中支持#;下面的操作要跟上面的name对齐。

测试:

ansible-playbook --check playbook :只检测可能会发生的改变,但不真正执行操作

ansible-playbook playbook :直接执行

ansible-playbook --list-hosts :列出运行任务的主机

image.png

2、playbook介绍

设置在特定条件下触发:

a,某任务的状态在运行后为changed时,可通过“notify”通知给相应的handles;

handles:任务在特定条件下触发;接收到其他任务的通知是被触发;

b,任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容