51 ansible

1.什么是Ansible?

Ansible 是一个配置管理和应用部署工具,即在管理主机上操作一些命令就能在节点主机上进行相应的动作。

2.Ansible的特点?

  • no angents:被管控节点无需安装agent
  • no server:无服务端,使用时直接调用命名
  • modules in any languages:基于模块工作,可以使用任意语言开发模式
  • 易读的语法:基于yaml语法编写playbook
  • 基于推送模式:不同于puppet的拉取模式,直接由调用者控制变更在服务器上发生的时间
  • 模块是幂等性的:定义的任务已存在则不会做任何事情,意味着在同一台服务器上多执行同一个playbook是安全的

3.Ansible中ansible.cfg配置文件 优先级

  • ANSIBLE_CFG:首先,Ansible命令会先检查环境变量,及这个环境变量将指向的配置文件;(export ANSIBLE_CONFIG=xxxx配置文件)
  • ./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件;
  • ~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件;
  • /etc/ansible/ansible.cfg:最后,将会检查在安装Ansible时自动生产的配置文件

ansible配置文件的参数

    inventory = /etc/ansible/hosts      这个参数表示资源清单inventory文件的位置
    library = /usr/share/ansible        指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
    forks = 5                           并发连接数,默认为5
    sudo_user = root                    设置默认执行命令的用户
    remote_port = 22                    指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
    host_key_checking = False           设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
    timeout = 60                        设置SSH连接的超时时间,单位为秒
    log_path = /var/log/ansible.log     指定一个存储ansible日志的文件(默认不记录日志)

4.定义ansible inventory(主机列表)

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
inventory file可以有多个。

  • 1.基于IP地址+密码的方式
[webservers]
172.16.1.7ansible_ssh_user='root'
ansible_ssh_pass='1'
172.16.1.8ansible_ssh_user='root'
ansible_ssh_pass='1'
  • 2.基于密钥连接,需要先创建公钥和私钥,并下发公钥至被控端
[root@manager ~]ssh-copy-id -I ~/.ssh/id_rsa.pub root@172.16.1.7
[root@manager ~]ssh-copy-id -I ~/.ssh/id_rsa.pub root@172.16.1.8
[root@manager ~]cat hosts
[webservers]
172.16.1.7
172.16.1.8
  • 3.主机组使用方式
[lbservers] #定义lbservers组
172.16.1.5
172.16.1.6
[webservers] #定义webservers组
172.16.1.7
172.16.1.8
[servers:children] #定义servers组包括两个子组
[lbservers,webservers]
lbservers
webserver

5.Ansible任务执行模式

  • ad-hoc模式(点对点模块)
    使用单个模块,支持批量执行单条命令,相当与在bash中执行一句shell命令
  • playbook模式(剧本模式)
    ansible主要的管理方式,通过多个task的集合完成一类功能,可以理解为多个ad-hoc的配置文件
ansible ad-Hoc 单条命令
image.png
command                            执行命令     默认   不支持管道
shell                              执行命令              支持管道  

yum_reposity                       yum仓库配置
yum                                yum安装软件
copy                               拷贝配置文件
service|systemd                    启动服务
file                               创建目录 创建文件 递归授权
mount                              挂载
cron                               定时任务
firewalld                          防火墙
selinux                  

1.command
ansible webservers -a "ps axu|grep nginx" -i hosts 不支持管道(简单命令)
2.shell
ansible webservers -m shell -a "ps axu|grep nginx" - i hosts 支持管道
3.yum

name 服务名
state:
        present 安装
        absent 卸载
        latest 最新
enablerepo 指定使用按个仓库
disablerepo 排除使用哪个仓库
  • 1.安装最新的httpd服务
    [root@manager project1] # ansible webservers -m yum
    -a "name=httpd state=latest disablerepo=webtaticphp" -i hosts
  • 2.移除httpd服务
    [root@manager project1]# ansible webservers -m yum
    -a "name=httpd state=absent disablerepo=webtaticphp" -i host
  • 3.安装httpd指定从哪个仓库安装
    [root@manager project1]# ansible webservers -m yum
    -a "name=httpd state=latest enablerepo=testing" -i
    hosts
  • 4.通过URL方式进行安装
    [root@manager project1]# ansible webservers -m yum
    -a "name=https://mirrors.aliyun.com/zabbix/zabbix/3.0/
    rhel/7/x86_64/zabbix-agent-3.0.0-1.el7.x86_64.rpm
    state=present disablerepo=webtatic-php" -i hosts

4.copy

src 本地路径,可以是相对,可以是绝对
dest 目标位置
owner 属主
group 属组
mode 权限
backup 备份

[root@manager project1]# ansible webservers -m copy
-a "src=./file/ansible.oldxu.com.conf
dest=/etc/nginx/conf.d/ansible.oldxu.com.conf
owner=root group=root mode=644" -i hosts

[root@manager project1]# ansible webservers -m copy
-a "src=./file/ansible.oldxu.com.conf
dest=/etc/nginx/conf.d/ansible.oldxu.com.conf
owner=root group=root mode=644 backup=yes" -i hosts

5.service|systemd

state
      started:启动
      stopped:停止
      restarted:重启
      reloaded:重载

enabled          是否开机自启
        yes            是
        no              否

[root@manager project1]# ansible webservers -m
systemd -a "name=nginx state=restarted enabled=yes"
-i hosts

6.file
创建/code/ansible

path       路径
state   
    touch            创建文件
    directory       创建目录
owner      属主
group       属组
mode        权限

[root@manager project1]# ansible webservers -m file
-a "path=/code/ansible state=directory mode=755
owner=www group=www" -i hosts

7.user group
[root@manager project1]# ansible webservers -m
group -a "name=www gid=666 state=present" -i hosts

user

name                    名称
uid                      uid
group                    组名或gid
create_home              是否创建家目录
system                   是否作为系统组
shell                    指定登录shell
state
      present             创建用户
      adsent              删除用户不删除家目录
remove                   移除用户并删除家目录
groups                   添加附加组                 
password               创建密码

[root@manager project1]# ansible webservers -m user
-a "name=www uid=666 group=666 create_home=no
shell=/sbin/nologin state=present" -i hosts

8.mount

present             写入/etc/fstab
absent              卸载/etc/fstab
mounted             临时挂载
unmounted           卸载当前挂载

挂载过程中,如果目录不存在,则会创建该目录
[root@manager project1]# ansible webservers -m
mount -a "src=172.16.1.31:/data/zrlog
path=/test_zrlog fstype=nfs opts=defaults
state=mounted" -i hosts

9.cron

minute          分
hour            时
day             日
month           月
week            周
job             添加任务    

[root@manager project1]# ansible webservers -m cron
-a 'name=test_job minute=00 hour=02 job="/bin/bash
/server/scripts/client_to_data_server.sh
&>/dev/null"' -i hosts

10.firewalld

开启防火墙

[root@manager project1]# ansible webservers -m
systemd -a "name=firewalld state=started" -i hosts

针对服务

[root@manager project1]# ansible webservers -m
firewalld -a "service=http state=enabled" -i hosts

针对端口

[root@manager project1]# ansible webservers -m
firewalld -a "port=9999/tcp state=enabled" -i hosts

针对source来源

ansible webservers -m firewalld -a "source=172.16.1.0/24
state=disabled permanent=no" -i hosts

11.selinux
[root@manager project1]# ansible webservers -m
selinux -a "state=disabled" -i hosts

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

推荐阅读更多精彩内容