专栏名称: 马哥Linux运维
马哥linux致力于linux运维培训,连续多年排名第一,订阅者可免费获得学习机会和相关Linux独家实战资料!
目录
相关文章推荐
运维  ·  服务部署—— Vsftpd 服务器 ·  12 小时前  
InfoQ架构头条  ·  “2025 年将成 Python 主导 ... ·  3 天前  
运维  ·  小红书用户迷惑行为大赏 ·  2 天前  
51好读  ›  专栏  ›  马哥Linux运维

ansible基础应用

马哥Linux运维  · 公众号  · 运维  · 2017-01-09 07:58

正文


一、运维主要工作

ansible聚集以上功能于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量不太多,再大的用puppet。


二、ansible特性

(1)模块化:调用特定的模块,完成特定任务;

(2)基于python语言实现,由paramiko,PYYAML和JINJa2三个关键模块组成

(3)部署简单:agentless,被红帽收购,故备收入epel源

(4)支持自定义模块

(5)支持playbook(剧本)


三、ansible组成+部署

部署:yum -y install ansible

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

主机清单:/etc/ansible/hosts

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


四、准备工作

1、主机(要管理的)纳入主机清单


2、基于ssh的方式与要管理主机通信(密钥)

(1)生成一对密钥:ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''

(2)将公钥发给要管理的主机:ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]


3、然后进行我们的第一个ansible命令吧

简单实用格式:ansible [-m module_name] [-a args] [options]

ping管理的所有主机:ansible all -m ping


五、ansible的常用模块(用ansible-doc -l可以显示)

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

例如:ansible webservers -m command -a "ls /var"


ansible webservers -a "useradd user1",command模块可以省

ansible webservers -a "echo magedu |passwd –stdin user1" ,不成功,不支持管道


(2)shell模块:(管道可以用)远程主机在shell进程下运行命令,支持shell特性

例如:ansible webservers -m shell -a "echo cwj1111|passwd –stdin user1"


(3)copy模块:把文件复制到远程位置

例如:ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab" 可以指明mode(权限),group(组),owner(主)。


4)cron:管理任务计划的

minute=,day=,month=,weekday=,hour=,job=,name=(必须要给),state=

例如:ansible all -m cron -a "minute=*/5 job='/sbin/ntpdate 192.168.1.109 &> /dev/null' name=Synctime "

在被管理主机上使用crontab -l便可以看到

ansible all -m cron -a "state=absent name=Synctime" 就可以删除


(5)fetch模块:拉取文件的(从远程主机上拉取文件到本地)

ansible-doc -s fetch 查看


(6)file模块:设定文件属性(属组,属主)

例如:ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"

修改属性:path= ,owner= ,mode= ,group=

创建目录:ansible all -m file -a "path=/tmp/tmpdir state=directory "


(7)pip模块:管理python的模块


(8)yum模块:用yum包管理,管理包

例如:ansible all -m yum -a "name=httpd state=present"


上面显示的是我已经装过了,就没有改变,现在我们卸载了看看:ansible all -m yum -a "name=httpd state=absent"


在使用rpm看一下就没有了


(9)service模块:管理服务

name=,state=, started(启动),stopped(停止),restarted(重启), enabled=,runlevel=

例如:先查看两台主机的80端口,再启动

ansible all -m shell -a "ss -tnl |grep :80 "

ansible all -m service -a "name=httpd state=started"

启动之后:


(10)user模块:管理用户,账号,组

name=,system=,uid=,shell=,group=,groups=,home=,passwd=,remove=(state=absent,同时删除家目录)

例如:ansible all -m user -a "name=user2 system=yes state=present uid=306 "


(11)setup模块,收集变量


六、ansible-playbook

ansible使用YAML语法描述配置文件,YAML语法以简洁明了、结构清晰著称。ansible的任务配置文件被称为playbook,就是剧本,每个剧本里面包含一系列的任务,每个任务在ansible中又被称为“戏剧”(play)。


(1)YAML语法格式

数据结构可以用类似大纲的缩排方式呈现,结构通过通过缩进来表示,连续的项目可以通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。如下:


(2)例子

先创建一个working文件夹,再cd到working里面,把yaml文件移到里面,创建一个files目录,把配置好的httpd.conf移到里面去,改一下监听端口,改成8080

ansible-playbook –check web.yaml


测试一下:

启动:ansible all -m service -a "name=httpd state=restarted"

ansible all -m shell -a "ss -tnl |grep :8080"


(3)上面的有一个缺陷,我改动那个配置文件了怎么办,这个时候就要用handlers了

在特定条件下触发;接收到其他任务的通知时被触发。Tasks中的任务都是有状态的,changed或者ok。 在Ansible中,只在task的执行状态为changed的时候,才会执行该task调用的handler。Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了。我改了配置文件要重启吧。







请到「今天看啥」查看全文