文章目录
1. 实验前配置
安装ansible主机:server1:192.168.43.17
目标主机:
- server2:192.168.43.27
- server3:192.168.43.37
- 以此类推
(之后的ansible配置除特别说明外配置与本次相同)
1.1 安装ansible
添加epel源:
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm:使用Aliyun的epel源
sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
安装:
yum repolist
yum list ansible
yum install ansible -y
1.2 ansible 配置公私钥
ansible是基于ssh实现的,配置公私钥后,免密操作,实验也会顺畅许多
- 生成私钥:
ssh-keygen
- 向目标主机分发私钥:
ssh-copy-id 用户@IP
1.3 配置文件
- 配置主机清单
vim /mnt/ansible/hosts
:建议自己建立ansible目录
(或 vim /etc/ansible/hosts
:默认主机清单)
#/mnt/ansible/hosts
[test] #主机组名
192.168.43.27
[prod]
192.168.43.37
vim ansible/ansible.cfg
: 编辑主配置文件
[defaults]
inventory = ./hosts #主机清单文件为当前目录下的hosts文件
remote_user = devops #远程用户
[privilege_escalation]
become=True #开启第二个用户的权限创建资源
become_method=sudo #用sudo的方式将普通账户切换到root或所需的其他账户
become_user=root #此用户为root
become_ask_pass=False #不询问密码
- 为了方便实验,设置主机解析:
vim /etc/hosts
1.4 在目标主机设置
- 在目标主机分别创建用户devops(并让ansible主机向其分发私钥)
visudo
devops ALL=(ALL) NOPASSWD: ALL
1.5 测试连接
ansible all -m ping
2. ad-hoc临时命令
2.1 ad-hoc命令参数
ansible:临时命令的执行
命令格式:
ansible <host-pattern> 选项 参数
|
|
---|---|
|
表示所有Inventory中的所有主机 |
|
通配符 |
|
逻辑或 |
|
逻辑与 |
|
逻辑非 |
|
|
---|---|
|
模块的参数 (如果执行默认COMMAND的模块,即是命令参数) |
|
后台运行超时时间 |
|
连接类型使用 |
|
提示输入SSH密码 |
|
提示连接密码 |
|
并行任务数,默认为5 |
|
指定主机清单的路径,默认为 /etc/ansible/hosts |
|
查看有哪些主机组 |
|
执行模块的名字,默认使用 command 模块 (所以如果是只执行单一命令可以不用 -m参数) |
|
用 su 命令 |
|
指定 su 的用户,默认为 root 用户 |
|
用 sudo 命令 |
|
指定 sudo 到哪个用户,默认为 root 用户 |
|
指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改 |
|
远程用户,默认为 root 用户 |
|
查看详细信息 (-vvv,-vvvv可查看更详细信息) |
2.2 ad-hoc举例
ansible示例1:
#用远程用户root访问,并询问密码
ansible test -m ping -u root -k
#用远程用户devops访问
ansible test -m ping -u devops -k
#复制文件/etc/passwd到指定路径/tmp
ansible test -k -u devops -m copy -a "src=/etc/passwd dest=/tmp"
#查看目录文件
ansible all -k -u devops -a "ls /tmp"
#删除文件
ansible test -a "rm -fr /tmp/passwd"
ansible示例2:设置主机组
ansible示例3:同时作用全部组
#同时作用全部组
ansible "*" -m ping
ansible all -m ping
ansible示例4:
#':'作用于全部组
ansible "test:prod" -m ping
#':!'除过prod组成员的test组
ansible 'test:!prod' -m ping
#':&'两个组的交集
ansible 'test:&prod' -m ping
ansible示例5:dnf 模块
ansible-doc -l | grep dnf #查看帮助
#安装Apache
ansible test -m dnf -a "name=httpd state=present"
ansible test -a "rpm -q httpd"
#开启服务
ansible test -m service -a "name=httpd state=started"
#更改防火墙规则
ansible test -m firewalld -a "service=http permanent=yes immediate=yes state=enabled"
#编辑一个.html文件,复制到目标主机的Apache的默认发布目录下
vim index.html
ansible test -m copy -a "src=index.html dest=/var/www/html/"
#测试
curl 172.25.17.2
ansible示例6:设置权限,用户
#修改文件权限
ansible test -m file -a "dest=/mnt/file1 mode=600 owner=kiosk group=kiosk"
#创建用户
ansible test -m user -a "name=user1"
#删除用户
ansible test -m user -a "name=user1 state=absent"
ansible示例7:数据库
#安装数据库及Python3
ansible test -m dnf -a "name=mariadb-server"
ansible test -m dnf -a "name=python3-PyMySQL.noarch"
#开启数据库服务
ansible test -m service -a "name=mariadb state=started"
#创建数据库用户,及设置权限
ansible test -m mysql_user -a "name=zy password=westos priv='*.*:select' state=present"
#在server2测试:mysql -u zy -p