Ansible

1.什么是ansible?

是基于python开发的配置管理和应用部署工具,在自动化运维中,现在是异军突起

Ansible能批量配置,部署,管理上千台主机。类似于xhell的一键输入的工具,不需要每次都切换主机进行操作。

只要有一台ansible的固定主机,就可以所有节点的操作。

不需要agent,客户端。

只需要一台主机配置了ansible。

ansible是基于模块进行工作,只是提供了一种运行的架构,执行操作和变更的是ansible的模块来实现的。比如 copy service 模块

2.Ansible的功能

远程操作主机功能

自动化运维(playbook 剧本 yaml)

3.ansible的优缺点

部署较为简单,主要在控制主机部署即可,被控制主机需要有ssh和python2.5以上版本,基本上linux都是自带的。

ansible只能控制linux系统,windows不行。

基于模块工作,可以使用任意语言开发模块(二次开发,底层架构)

4.如何安装ansible

1、管理端:192.168.233.10 ansible

2.被管理端:192.168.233.20

192.168.233.30

备用 192.168.233.40

所有:

systemctl stop firewalld

setenforce 0

10:

yum -y install epel-release

yum -y install ansible

yum -y install tree

tree /etc/ansible

##

ansible.cfg:ansible的主配置文件,一般无需修改

hosts:主机组,声明可以被控制的主机

roles:公共角色目录

配置主机有两种方式:

1.直接声明主机的ip地址

2.主机名(/etc/hosts做映射)

ansible的命令格式:

ansible 组名/IP -m 模块使用名称 -a '参数列表(执行的命令)'

##

vim /etc/ansible/hosts

Ansible_第1张图片

cd /opt

ssh-keygen -t rsa

一路回车

sshpass -p '123' ssh-copy-id [email protected]

sshpass -p '123' ssh-copy-id [email protected]

5.模块

模块1:

command模块,在远程主机执行linux的命令,不支持管道符,重定向输出

##

ansible 192.168.233.30 -m command -a 'date'

yes

ansible 192.168.233.20 -m command -a 'date'

yes

sshpass -p '123' ssh-copy-id [email protected]

sshpass -p '123' ssh-copy-id [email protected]

ansible 192.168.233.20 -m command -a 'date'

ansible webservers -m command -a 'date'

##

指定组,组内所有的声明的主机都会执行

##

ansible all -m command -a 'date'

##

所有主机都会执行

##

ansible 192.168.233.20 -a 'date'

##

不加-m 默认command模块

常用参数:

chdir:在远程主机上运行命令,提前进入目录

ansible all -m command -a 'chdir=/home ls'

creates:判断指定文件是否存在,如果存在,不指定后面的操作

ansible all -m command -a 'creates=/opt/123 ls /opt'

removes:判断指定的文件是否存在,如果存在,执行后续的命令

ansible all -m command -a 'removes=/opt/123 ls /opt'

##

模块2:

shell模块,在远程主机执行命令,支持管道符和重定向

ansible 192.168.233.20 -m shell -a 'useradd test'

ansible 192.168.233.20 -m shell -a 'cat /etc/passwd'

ansible 192.168.233.20 -m shell -a 'echo 123456 | passwd --stdin test'

ansible 192.168.66.17 -m shell -a "echo $(ifconfig ens33 | awk 'NR==2{print $2}')"

##

获取ip地址

在ansible当中,多个引号之间要做隔离

##

ansible 192.168.233.30 -m shell -a 'touch /opt/123 && echo 123 > /opt/123 && cat /opt/123 '

表示逻辑且,前一个命令成功才会执行后一个命令

ansible 192.168.233.30 -m shell -a 'touch 456 ; echo "郭旗真帅" > /opt/456 ; cat /opt/456'

指定主机上创建一个脚本,在脚本中写入一个内容 #!/bin/bash ifconfig .然后运行这个脚本

ansible 192.168.66.16 -m shell -a 'touch /opt/guoqi.sh ; echo -e "#!/bin/bash\nifconfig" > /opt/guoqi.sh ; sh /opt/guoqi.sh'

##

;表示逻辑或者,前面的命令是否成功都会执行

在脚本中执行,实现加法,运行脚本

ansible 192.168.66.16 -m shell -a 'echo -e "#!/bin/bash\na=$((2+3))\necho \$a" > /opt/test1.sh && sh /opt/test1.sh'

模块3 cron 模块

远程主机定时任务

两种状态 present 表示添加(默认就是添加,可以省略)

absent 表示移除 #absent在整个ansible的语法中都表示移除的意思(删除)

分 时 日 月 周

分=minute

时=hour

日=day

月=month

周=weekday

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

job:任务执行的命令

name:任务计划的名称,可以不加。

ansible 192.168.233.20 -m cron -a 'minute="*/5" job="ls /opt" name="test1"'

ansible 192.168.233.20 -a 'crontab -l'

9月1号早上8点30分,执行ls /opt 任务名 test2

ansible 192.168.66.16 -m cron -a 'minute="30" hour="8" day="1" month="9" job="ls /opt" name="test2"'

ansible 192.168.66.16 -a 'crontab -l'

周三下午 14:30分执行 ls /opt 不要任务名

ansible 192.168.66.16 -m cron -a 'minute="30" hour="14" weekday="3" job="ls /opt"'

ansible 192.168.66.16 -a 'crontab -l'

如果删除有名字的

ansible 192.168.66.16 -m cron -a 'name=test1 state=absent'

多个计划任务,如果不给名字都是None,一旦删除None,全部删除,不推荐(最好是指定一个不重复的名称。)

模块4:

user模块:用户管理模块

常用的参数:

name 指定用户名,必须要有

state present absent 创建用户可以不加present 删除一定要加absent

system=yes|no 标记用户是否是一个程序用户

uid:用户的唯一标识

group:用户的所在组的家目录,不需要替换用户的家目录可以不写

password:创建用户的密码

create_home=yes|no 替换用户

comment :用户的注释信息(可

有可无)

remove=yes|no 当删除用户,加上remove=yes,删除用户的家目录,useradd -r 如果不需要删除家目录,可以不写

ansible 192.168.233.20 -m user -a 'name=guoqi system=yes'

在创建用户时,虽然我声明了是一个程序用户,但是默认的登录shell如果没有额外的声明,还是默认的/bin/bash,UID会按照程序用户来指定

ansible 192.168.233.20 -m user -a 'name=guoqi1 shell=/sbin/nologin'

使用ansible的user模块创建用户时,如果创建普通用户可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash

如果创建的是程序用户,一定要声明system=yes,声明shell的类型,shell=/sbin/nologin

也可以指定uid方式,给用户分配一个uid

ansible 192.168.233.20 -m user -a 'name=guoqi2 uid=1010 password=123456 home=/opt/test1'

ansible 192.168.233.20 -m user -a 'name=guoqi2 home =/home/guoqi2 create_home=yes'

##更换家目录

ansible 192.168.233.20 -a 'cat /etc/passwd'

ansible 192.168.233.20 -m user -a 'name=guoqi2 remove=yes state=absent'

##

删除并且家目录也删除

group模块:

用户组的管理模块

name 必须要有

gid 设置组的id

ansible 不适用交互命令

ansible 192.168.233.30 -m group -a 'name=guoqi3 gid=306 system=yes'

ansible 192.168.233.30 -m user -a 'name=guoqi uid=1011 group=guoqi3'

ansible 192.168.233.30 -a 'tail -f /var/log/messages'

ansible 192.168.233.30 -m group -a 'name=guoqi3 state=absent'

ansible 192.168.233.30 -a 'cat /etc/group'

模块5:ping模块:

检测主机的连通性

ansible all -m ping

你可能感兴趣的:(ansible)