ansible整理

批量管理服务器的工具
2015年被红帽公司收购
使用Python语言编写的
基于ssh进行管理,所以不需要在被管端安装任何软件
ansible在管理远程主机的时候,主要是通过各种模块进行操作的

4台主机,需要配置主机名、IP地址、YUM。关闭SELINUX和防火墙
主机名    IP地址    角色
web1    192.168.88.11    被控制节点
web2    192.168.88.12    被控制节点
db1    192.168.88.13    被控制节点
pubserver    192.168.88.240    控制节点

# 在192.168.88.240上配置yum源

安装ansible
[root@pubserver ~]# yum install -y ansible

配置控制节点pubserver,具体要求如下:

配置名称解析,能够通过名字访问所有节点
配置可以通过ssh到所有节点免密登陆

# 配置名称解析
[root@pubserver ~]# echo -e "192.168.88.240\tpubserver" >> /etc/hosts
[root@pubserver ~]# for i in 1 2
> do
> echo -e "192.168.88.1$i\tweb$i" >> /etc/hosts
> done
[root@pubserver ~]# echo -e "192.168.88.13\tdb1" >> /etc/hosts
[root@pubserver ~]# tail -4 /etc/hosts
192.168.88.240   pubserver
192.168.88.11    web1
192.168.88.12    web2
192.168.88.13    db1

# 配置免密登陆
 

[root@pubserver ~]# ssh-keygen   # 三个问题都直接回车,使用默认值
# 执行以下命令时,可能需要回答yes和远程用户的密码,请按提示操作
[root@pubserver ~]# for i in web{1..2} db1
> do
> ssh-copy-id $i
> done

配置ansible管理环境
使用一套ansible软件,有可能需要管理多种环境。如在同一台管理主机上管理开发环境和生产环境。
通过创建不同的工作目录,来实现相应的管理需求。
将某一环境下的主机写入到对应工作目录的主机清单文件。
进入对应的工作目录执行管理任务,就可以管理相应环境的主机。

# 创建ansible工作目录,目录名自己定义,不是固定的。
[root@pubserver ~]# mkdir ansible
[root@pubserver ~]# cd ansible
# 创建配置文件。默认的配置文件是/etc/ansible/ansible.cfg,但是一般不使用它,而是在工作目录下创建自己的配置文件
[root@pubserver ansible]# vim ansible.cfg    # 文件名必须是ansible.cfg
[defaults]
host_key_checking = false   # 不检查主机密钥,=号两边空格可有可无。
inventory = inventory       # 定义主机清单文件为当前目录的inventory

# 创建主机清单文件。写在[]里的是组名,[]下面的是组内的主机名
[root@pubserver ansible]# vim inventory
[webservers]
web[1:2]   # web1和web2的简化写法,表示从1到2

[dbs]
db1

# cluster是组名,自定义的;:children是固定写法,表示下面的组名是cluster的子组。
[cluster:children]
webservers
dbs

# 查看被管理的所有的主机。注意,一定在工作目录下执行命令。
[root@pubserver ansible]# ansible all --list-hosts
  hosts (3):
    web1
    web2
    db1

# 查看webservers组中所有的主机
[root@pubserver ansible]# ansible webservers --list-hosts
  hosts (2):
    web1
    web2

adhoc临时命令

语法:
ansible 主机或组列表 -m 模块 -a "参数"    # -a是可选的 command模块默认是这个模块通过ping模块测试到远程主机的连通性。
[root@pubserver ansible]# ansible all -m ping
# 该命令检查是否可以管理远程主机。如果结果为绿色的SUCCESS,则表示成功。
# 如果是红色的UNREACHABLE,则检查网络是否可通,是否已经可以免密登陆

ansible模块

# 列出全部可用模块,按空格键向下翻页,按q退出
[root@pubserver ansible]# ansible-doc -l

# 查看包含yum的模块名
[root@pubserver ansible]# ansible-doc -l | grep yum


# 查看yum模块的帮助文档,按空格键向下翻页,按q退出
[root@pubserver ansible]# ansible-doc yum

command模块:ansible默认模块,用于在远程主机上执行任意命令,command不支持shell特性,如管道、重定向。

shell模块:与command模块类似,但是支持shell特性,如管道、重定向
# 查看web1的ip地址,只显示前10行
[root@pubserver ansible]# ansible web1 -m shell -a "ip a s | head"

script模块:用于在远程主机上执行脚本

# 在控制端创建脚本即可
[root@pubserver ansible]# vim test.sh
#!/bin/bash

for user in user{1..5}
do
    useradd $user
    echo '123456' | passwd --stdin $user
done

# 在webservers组的主机上执行脚本
[root@pubserver ansible]# ansible webservers -m script -a "test.sh"

file模块:可以创建文件、目录、链接等,还可以修改权限、属性等

path:指定文件路径,owner:设置文件所有者,group:设置文件所属组,state:状态。touch表示创建文件,directory表示创建目录,link表示创建软链接,absent表示删除

mode:设置权限,src:source的简写,源,dest:destination的简写,目标

[root@pubserver ansible]# ansible-doc file

EXAMPLES:

- name: Change file ownership, group and permissions  # 忽略
  ansible.builtin.file:           # 模块名。以下是它的各种参数
    path: /etc/foo.conf           # 要修改的文件的路径
    owner: foo                    # 文件所有者
    group: foo                    # 文件的所有组
    mode: '0644'                  # 权限

copy模块:用于将文件从控制端拷贝到被控端  src:源。控制端的文件路径  dest:目标。被控制端的文件路径   content:内容。需要写到文件中的内容

[root@pubserver ansible]# echo "AAA" > a3.txt
# 将a3.txt拷贝到webservers主机的/root/
[root@pubserver ansible]# ansible webservers -m copy -a "src=a3.txt dest=/root/"

fetch模块:与copy模块相反,copy是上传,fetch是下载  src:源。被控制端的文件路径 dest:目标。控制端的文件路径

# 将webservers主机上的/etc/hostname下载到本地用户的家目录下
[root@pubserver ansible]# ansible webservers -m fetch -a "src=/etc/hostname dest=~/"

lineinfile模块:用于确保存目标文件中有某一行内容 path:待修改的文件路径, line:写入文件的一行内容,regexp:正则表达式,用于查找文件中的内容

# webservers组中的主机,/etc/issue中一定要有一行Hello World。如果该行不存在,则默认添加到文件结尾
[root@pubserver ansible]# ansible webservers -m lineinfile -a "path=/etc/issue line='Hello World'"

replace模块:lineinfile会替换一行,replace可以替换关键词  path:待修改的文件路径  replace:将正则表达式查到的内容,替换成replace的内容  regexp:正则表达式,用于查找文件中的内容
# 把webservers组中主机上/etc/issue文件中的chi,替换成he
[root@pubserver ansible]# ansible webservers -m replace -a "path=/etc/issue regexp='chi' replace='he'"

user模块:实现linux用户管理   name:待创建的用户名  uid:用户ID   group:设置主组  groups:设置附加组  home:设置家目录    password:设置用户密码   state:状态。present表示创建,它是默认选项。absent表示删除  remove:删除家目录、邮箱等。值为yes或true都可以

# 在webservers组中的主机上,创建zhangsan用户
[root@pubserver ansible]# ansible webservers -m user -a "name=zhangsan"

group模块:创建、删除组   name:待创建的组名   gid:组的ID号   state:present表示创建,它是默认选项。absent表示删除

# 在webservers组中的主机上创建名为devops的组
[root@pubserver ansible]# ansible webservers -m group -a "name=devops"
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值