Ansible:模块1

Ansible:

远程操作主机功能

自动化运维(playbook 剧本 yaml)

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

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

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

不需要agent,客户端。

主协议一台主机上配置了ansible。

ansible是基于模块进行工作,只是提供了一种运行的架构,执行和辩证的是absible的模块来实现的。

copy

service

Ansible默认是通过ssh的密钥对来实现通信。(可以改)

Ansible的另一个特点,所有模块都是幂等性。

幂等性:指的是多次操作或者多次对协调资源的影响是一致的。

systemctl stop firewalld

systemctl stop firewalld

systemctl stop firewalld只要发现要停止的目标服务已经停止了,后续同样的停止操作,不会改变任何结果,什么也不做。

systemctl restart firewalld每一次操作都会先停再启动。不是幂等性

http get 幂等性

post 多次执行相同的post可能会创建多个相同的资源。不是幂等性

ansible的幂等性:决定了你可以放心大胆的实验,重复执行某个任务不会对结构生产任何影响(绝大多数情况)

Ansible的四大组件:

1,inventory 主机清单(主机组)定义ansible可以远程操作的服务器。

2,模块 13个模块(常用的)通过模块可以实现远程的配置和操作。

3,plugins 插件

4,playbook 剧本 (shell脚本 yaml格式)

Ansible的优缺点:

部署较为简单,注意在控制主机部署即可,被控制主机协议有shh和pyhon2.5以上版本。举办的linux都是自带的。ansible只能控制linux系统,windows不行。

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

环境:

1,管理端:

2,被管理端:

备用:

要先安装epel源

yum install -y epel-release.noarch

yum install -y ansible

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

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

roles:公共角色目录

配置主机有两种方式:

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

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

名称只是一个标识,没有意义,不要用中文

vim hosts

配置密钥对验证

ssh-keygen -t rsa

ansible的命令格式:

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

模块1:

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

要先执行到目标主机的命令

ansible 192.168.176.50 -m command -a 'date'

ansible 192.168.176.60 -m command -a 'date'

指定ip地址

在目标主机上不会显示执行命令但在日志会显示

再连接

sshpass -p '123' ssh-copy-id root@192.168.176.50

sshpass -p '123' ssh-copy-id root@192.168.176.60

指定执行组,也可以用组名,在组下的所有机器

ansible webservers -m command -a 'ls /opt'

也可以对所有:所有组中的所有机器

ansible all -m command -a 'ls /opt'

不加-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.176.50 -m shell -a 'useradd test'

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

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

获取IP地址

ansible 192.168.176.50 -m shell -a 'echo (ifconfig ens33 \| awk "NR==2{print 2}")|cut -d " " -f2'

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

多个shell命令执行,多个命令之间用&&连在一块,表示逻辑且

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

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

也可以用;符号。表示逻辑或

ansible 192.168.176.50 -m shell -a 'touch /opt/456 ; echo "cc正" > /opt/456 ; cat /opt/456'

前面的命令成不成功后面的都会执行。

远程运行脚本

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

ansible 192.168.176.50 -m shell -a 'echo -e "#!/bin/bash\nifconfig" > /opt/test.sh && sh /opt/test.sh'

简单的加法

ansible 192.168.176.50 -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:任务计划的名称,可以不加。

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

查看远程主机的但是任务:

ansible 192.168.176.50 -a 'crontab -l'

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

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

远程删除定时任务删除一定要加state=名称

有名字的

ansible 192.168.176.50 -m cron -a 'name=test2 state=absent'

没有名字的

ansible 192.168.176.50 -m cron -a 'name=None state=absent'

多个none,会一起删除。所以最好给名称,指名不要重复。

模块4:

user模块:用户管理模块

常用参数:

name 指定用户名,必须要有

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

system=yes | no,标记用户是否是一个程序用户 只会指明uid为程序用户

uid:用户的唯一标识

group:用户的所在组

create_home=yes | no, 替换用户的家目录,不需要替换用户的家目录可以不写

password:创建用户的密码

comment:户的注释信息(可有可无)

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

给远程主机添加用户:

ansible 192.168.176.50 -m user -a 'name=cc1 system=yes'

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

如何正确声明:

ansible 192.168.176.50 -m user -a 'name=cc2 shell=/sbin/nologin'

使用ansible的user模块创建用户时,如果创建普通用户可以不加system=no,指定shell轮询可以不加,默认就是/bin/bash 如果创建的是程序用户,一定要声明system=yes,声明shell的类型 shell=/sbin/nologin。

也可以指定uid的方式,给用户分配一个uid,同时指定用户的家目录

ansible 192.168.176.50 -m user -a 'name=cc5 uid=1013 password=123456 home=/opt/test3'

改变用户家目录:

ansible 192.168.176.50 -m user -a 'name=cc5 home=/opt/test4 create_home=yes'

删除用户连家目录一并删除

ansible 192.168.176.50 -m user -a 'name=cc5 remove=yes state=absent'

group 模块:

用户组的管理模块

name 必须要有

system=yes | no,标记用户组中的用户是否是程序用户 只会指明uid为程序用户

gid 设置组的id

ansible 192.168.176.50 -m group -a 'name=chen gid=306 system=yes'

创建的是组,不是用户

在创建一个用户的时候,怎么添加到一个组中。

ansible 192.168.176.50 -m user -a 'name=cc uid=1011 group=chen'

ansible不使用交互式的命令。

如何删除组

ansible 192.168.176.50 -m group -a 'name=chen state=absent'

要先删除组用户,才能删除组。

ansible 192.168.176.50 -m user -a 'name=cc remove=yes state=absent'

ansible 192.168.176.50 -m group -a 'name=chen state=absent'

ping模块:

ansible all -m ping

相关推荐
风清再凯4 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机4 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星17 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥17 天前
ANSIBLE
ansible
码农101号17 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号17 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信19 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li19 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@22 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91925 天前
Ansible
ansible