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
cd /opt
ssh-keygen -t rsa
一路回车
sshpass -p '123' ssh-copy-id root@192.168.233.20
sshpass -p '123' ssh-copy-id root@192.168.233.30
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 root@192.168.233.20
sshpass -p '123' ssh-copy-id root@192.168.233.30
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!