【Linux32-3】Ansible之ad-hoc示例



【Linux32-1】Ansible自动化运维-基础篇

【Linux32-2】Ansible命令与模块详解



1. 实验前配置


安装ansible主机:server1:192.168.43.17

目标主机:

  1. server2:192.168.43.27
  2. server3:192.168.43.37
  3. 以此类推

(之后的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实现的,配置公私钥后,免密操作,实验也会顺畅许多

  1. 生成私钥:ssh-keygen
  2. 向目标主机分发私钥:ssh-copy-id 用户@IP

1.3 配置文件


  1. 配置主机清单

vim /mnt/ansible/hosts:建议自己建立ansible目录

(或 vim /etc/ansible/hosts:默认主机清单)


#/mnt/ansible/hosts
[test]	#主机组名
192.168.43.27
[prod]
192.168.43.37

  1. 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	#不询问密码

  1. 为了方便实验,设置主机解析:vim /etc/hosts

在这里插入图片描述

1.4 在目标主机设置


  1. 在目标主机分别创建用户devops(并让ansible主机向其分发私钥)
  2. visudo
devops    ALL=(ALL)       NOPASSWD: ALL

在这里插入图片描述

1.5 测试连接


ansible all -m ping


在这里插入图片描述

2. ad-hoc临时命令


2.1 ad-hoc命令参数


ansible:临时命令的执行

命令格式:
ansible <host-pattern> 选项 参数

host-pattern 匹配主机的列表
All
表示所有Inventory中的所有主机
*
通配符
逻辑或
:&
逻辑与
:!
逻辑非

ansible
-a
模块的参数
(如果执行默认COMMAND的模块,即是命令参数)
-B
后台运行超时时间
-c
连接类型使用
-k
提示输入SSH密码
-K
提示连接密码
-f
并行任务数,默认为5
-i
指定主机清单的路径,默认为 /etc/ansible/hosts
--list-hosts
查看有哪些主机组
-m
执行模块的名字,默认使用 command 模块
(所以如果是只执行单一命令可以不用 -m参数)
-S
用 su 命令
-R
指定 su 的用户,默认为 root 用户
-s
用 sudo 命令
-U
指定 sudo 到哪个用户,默认为 root 用户
-T
指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u
远程用户,默认为 root 用户
-v
查看详细信息
(-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

猜你喜欢

转载自blog.csdn.net/weixin_46069582/article/details/112076167