文章目录

  • 一、构建Anisble
  • 1. 安装ansible
  • 2. 配置ansible
  • 3. 设置免密信息
  • 二、不同用户下构建Anisble
  • 1. 切换为普通用户
  • 2. 切换为root用户
  • 三、不同的目录下构建Anisble
  • 四、Inventory文件配置
  • 1. 嵌套清单
  • 2.变量的检索位置
  • 3. ansible命令指定清单的正则表达式
  • 五、Ad-Hoc命令集
  • 1.ansible实现管理的方式
  • 2.Ad-Hoc执行方式中如何获得帮助
  • 3.ansible命令运行方式及常用参数
  • 4.ansible的基本颜色代表信息
  • 5.ansible中的常用模块


一、构建Anisble

1. 安装ansible
##1.Ansible对于企业运维的重大意义####
批量管理

####2.Ansible的安装####
ansible --viersion

[root@server1 yum.repos.d]# vi epel.repo
[epelrepo]
name=epelrepo
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64
gpgcheck=0
[root@server1 ~]# dnf install -y ansible
2. 配置ansible
[root@server1 ~]# cd /etc/ansible/
[root@server1 ansible]# ls
ansible.cfg  hosts  roles
[root@server1 ansible]# cd roles/
[root@server1 roles]# ls
[root@server1 roles]# cd ..
[root@server1 ansible]# ls
ansible.cfg  hosts  roles

## ansible的基本信息:
/etc/ansible/ansible.conf ##全局配置文件,默认很少修改
/etc/ansible/hosts ##全局主机清单清单文件
3. 设置免密信息
[root@server1 ansible]# vim hosts
##添加在文件最后
[test]
192.168.0.2 
[prod]
192.168.0.3 
[root@server1 ansible]# ssh-keygen 
[root@server1 ansible]# ssh-copy-id 192.168.0.2
[root@server1 ansible]# ssh-copy-id 192.168.0.3
[root@server1 ansible]# ansible all -m ping
[root@server1 ansible]# ansible test -m ping
[root@server1 ansible]# ansible prod -m ping

ansible安装python3 ansible安装部署oracle_配置文件


ansible安装python3 ansible安装部署oracle_linux_02

免密成功

ansible安装python3 ansible安装部署oracle_vim_03

二、不同用户下构建Anisble

ansible 默认情况下首先加载当前目录下的配置文件,然后是用户主目录下的文件,最后才是/etc/ansible下的文件。
当前目录下优先级最高,用户主目录次之,最后是全局/etc下。

1. 切换为普通用户
[root@server1 ~]# useradd westos
[root@server2 ~]# useradd westos
[root@server3 ~]# useradd westos
[root@server3 ~]# passwd westos

[root@server1 ~]# su - westos
[westos@server1 ~]$ mkdir ansible
[westos@server1 ~]$ cd ansible/
[westos@server1 ansible]$ pwd
/home/devops/ansible
[westos@server1 ansible]$ ansible test -m ping -u root  ##-u 指定超户
[westos@server1 ansible]$ ansible test -m ping -u root -k  ##-k 询问密码
SSH password: 
[westos@server1 ansible]$ ansible test -m ping -u westos -k
[westos@server1 ansible]$ ansible all -m ping -u westos -k  ##需要缓存192.168.0.3
[westos@server1 ansible]$ ssh 192.168.0.3
[westos@server3 ~]$ logout
Connection to 192.168.0.3 closed.
[westos@server1 ansible]$ ansible all -m ping -u westos -k
[westos@server1 ansible]$ logout
[root@server1 ansible]# ansible all -m ping -k -u westos
[root@server1 ansible]# ansible test -k -u westos -m copy -a "src=/etc/passwd dest=/tmp"
[root@server1 ansible]# ansible all -k -u westos -a "ls /tmp"
192.168.0.2 | CHANGED | rc=0 >>
ansible_command_payload_v7bkqedj
passwd
192.168.0.3 | CHANGED | rc=0 >>
ansible_command_payload_a8en33yb

[root@server2 ~]# ls /tmp/
passwd

[root@server1 ansible]# ansible test -k -u westos -m copy -a "src=/etc/passwd dest=/mnt" ##复制失败
[root@server2 ansible]# ll -d /mnt/    ##other位没有写权限
drwxr-xr-x. 2 root root 6 Aug 12  2018 /mnt/

ansible安装python3 ansible安装部署oracle_linux_04


ansible安装python3 ansible安装部署oracle_ansible安装python3_05


ansible安装python3 ansible安装部署oracle_配置文件_06

ansible安装python3 ansible安装部署oracle_linux_07


server2与server1对/mnt 目录的权限一致

ansible安装python3 ansible安装部署oracle_ansible安装python3_08

[root@server1 ansible]# su - westos
[westos@server1 ~]$ cd ansible/
[westos@server1 ansible]$ ls
[westos@server1 ansible]$ vim hosts
[test]
192.168.0.2
[prod]
192.168.0.3
[westos@server1 ansible]$ logout
[root@server1 ansible]# pwd
/etc/ansible
[root@server1 ansible]# ls
ansible.cfg  hosts  roles
[root@server1 ansible]# vim hosts  ##注释写的内容
[root@server1 ansible]# su - westos 
[westos@server1 ~]$ cd ansible/
[westos@server1 ansible]$ ls
hosts
[westos@server1 ansible]$ vim ansible.cfg
[defaults]
inventory = ./hosts
[westos@server1 ansible]$ ssh-keygen 
[westos@server1 ansible]$ ssh-copy-id server2
[westos@server1 ansible]$ ssh-copy-id server3

ansible安装python3 ansible安装部署oracle_vim_09


ansible安装python3 ansible安装部署oracle_配置文件_10


ansible安装python3 ansible安装部署oracle_linux_11

2. 切换为root用户
[root@server2 ~]# ll -d /mnt
drwxr-xr-x. 2 root root 6 Aug 12  2018 /mnt
[root@server2 ~]# visudo
101 westos  ALL=(ALL)       NOPASSWD:ALL
[westos@server1 ansible]$ ansbible test -m ping -b  ##-b 切换成root身份

[westos@server1 ansible]$ vim ansible.cfg   ##复制 /etc/ansible/ansible.cfg[privilege_escalation] 模块
[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root         ##切换成root身份
become_ask_pass=False    ## 不用密码
[westos@server1 ansible]$ ansbible test -m ping  ##以westos身份进入测试端,以root身份运作
[westos@server1 ansible]$ ansible-doc -l  ##列出所有模块
[westos@server1 ansible]$ ansible-doc -l | wc -l
3387
[westos@server1 ansible]$ ansible test -m copy -a "src=/etc/passwd dest=/mnt"
[westos@server1 ansible]$ ansible test -a "ls /mnt"
192.168.0.2 | CHANGED | rc=0 >>
passwd
[westos@server1 ansible]$ ansible test -a "rm -fr /mnt/passwd"
[westos@server1 ansible]$ ansible test -a "ls /mnt"
192.168.0.2 | CHANGED | rc=0 >>

ansible安装python3 ansible安装部署oracle_ansible安装python3_12

ansible安装python3 ansible安装部署oracle_linux_13

ansible安装python3 ansible安装部署oracle_ansible安装python3_14

三、不同的目录下构建Anisble

Ansible配置文件参数详解
ansible 清单中组名称 -m 模块 -u remote_user

[root@server1 ~]# cp -r /home/westos/ansible/ /mnt/
[root@server1 ~]# cd /mnt/
[root@server1 mnt]# ls
ansible
[root@server1 mnt]# cd ansible/
[root@server1 ansible]# ls
ansible.cfg  hosts
[root@server1 ansible]# ssh-copy-id westos@192.168.0.2
[root@server1 ansible]# ssh-copy-id westos@192.168.0.3
[root@server1 ansible]# ansible test -m ping 
[root@server1 ansible]# ansible all -m ping 
[root@server1 ansible]# pwd
/mnt/ansible

ansible安装python3 ansible安装部署oracle_linux_15

ansible安装python3 ansible安装部署oracle_配置文件_16

[root@server3 ~]# visudo
westos    ALL=(ALL)     NOPASSWD:ALL

[root@server1 ansible]# vim ansible.cfg  
## inventory= ./hosts    ##默认指定全局
[root@server1 ansible]# ansible -i hosts all -m ping ##指定配置文件中的配置清单

[root@server1 ansible]# vim ansible.cfg 
inventory= ./hosts
[root@server1 ansible]# ansible  all -m ping

ansible安装python3 ansible安装部署oracle_vim_17

四、Inventory文件配置

1. 嵌套清单
## 1.嵌套清单#
[root@server1 ansible]# pwd
/mnt/ansible
[root@server1 ansible]# ls
ansible.cfg  hosts
[root@server1 ansible]# vim hosts  ##添加行
[webserver:children]
test
prod
[root@server1 ansible]# ansible webserver -m ping
2.变量的检索位置
- Inventory配置文件(默认/etc/ansible/hosts)
- Playbook中vars定义的区域
- Roles中vars目录下的文件
- Roles同级目录group_vars和hosts_vars目录下的文件

ansible安装python3 ansible安装部署oracle_vim_18

3. ansible命令指定清单的正则表达式
匹配所有主机,all或*号功能相同
: ##逻辑或
:& ##逻辑与
:! ##逻辑非
~ ##以关键字开头
~(str1|str2) ##以条件1或者条件2开头 

对多台主机或多个组同时执行,相互之间用冒号分隔即可
在test组但不在prod组的主机,用感叹号表示
在test组和prod组中同时存在的主机,用&符号表示

ansible安装python3 ansible安装部署oracle_linux_19

五、Ad-Hoc命令集

1.ansible实现管理的方式

Ad-Hoc ##利用ansible命令直接完成管理,主要用于临时命令使用场景
playbook ##ansible脚本,主要用于大型项目场景,需要前期的规划

2.Ad-Hoc执行方式中如何获得帮助
ansible-doc ##显示模块帮助的指令

#格式
ansible-doc [参数] [模块…]

#常用参数
-l ##列出可用模块
-s ##显示指定模块的playbook片段

[root@server1 ansible]# ansible-doc -l | grep dnf
dnf                                                           Manages packages with the `dnf' package manager  
[root@server1 ansible]# ansible-doc dnf

ansible安装python3 ansible安装部署oracle_vim_20

3.ansible命令运行方式及常用参数
#格式:
ansible 清单 -m 模块 -a 模块参数

#常用参数
#–version ##显示版本
#-m module ##指定模块,默认为command模块
#-v ##详细过程 -vv -vvv更详细过程
#–list ##显示主机列表,也可以用–list-hosts
#-k ##提示输入ssh连接密码,默认key认证
#-C ##预执行检测
#-T ##执行命令的超时时间,默认10s
#-u ##指定远程执行的用户
#-b ##执行sudo切换身份操作
#-become-user=USERNAME ##指定sudo的用户
#-K ##提示输入sudo密码
4.ansible的基本颜色代表信息
绿色 ##执行成功但为对远程主机做任何改变
黄色 ##执行成功并对远程主机做改变
红色 ##执行失败
5.ansible中的常用模块

copy、service模块

[root@server1 ansible]# ansible test -m dnf -a "name=httpd state=present"
[root@server1 ansible]# ansible test -a "rpm -q httpd"
[root@server1 ansible]# ansible test -m service -a "name=httpd state=started"
[root@server1 ansible]# ansible test -m service -a "name=httpd enabled=yes"
[root@server2 mnt]# systemctl is-enabled httpd
enabled
[root@server1 ansible]# ansible-doc -l | grep firewalld
firewalld                                                     Manage arbitrary ports/services with firewalld       
[root@server1 ansible]# ansible-doc firewalld
[root@server1 ansible]# ansible test -m firewalld -a "service=http permanent=yes immediate=yes state=enabled"
[root@server1 ansible]# vim index.html
www.westos.org
[root@server1 ansible]# ansible test -m copy -a "src=index.html dest=/var/www/html/"
[root@server1 ansible]# curl 192.168.0.2
www.westos.org

ansible安装python3 ansible安装部署oracle_ansible安装python3_21

ansible安装python3 ansible安装部署oracle_ansible安装python3_22


file 、user 模块

[root@server2 tmp]# ls -l passwd 
-rw-rw-r-- 1 westos westos 1198  Dec 29 18:00 passwd
[root@server1 ansible]# ansible test -m file -a "dest=/tmp/passwd owner=root group=root"  ##修改属性
[root@server2 tmp]# ls -l passwd
-rw-rw-r--. 1 root root 1155 Dec 29 18:06 passwd

[root@server1 ansible]# ansible test -m file -a "dest=/tmp/passwd mode=600"   ##修改权限
[root@server2 tmp]# ll passwd
-rw-------. 1 root root 1155 Dec 29 18:06 passwd

[root@server1 ansible]# ansible test -m user -a "name=linux"  ##在test主机上调用用户模块创建linux,若加密码,密码是加密密码 "name=wxh password=<加密密码>"
[root@server2 tmp]# id linux
uid=1001(linux) gid=1001(linux) groups=1001(linux)

[root@server1 ansible]# ansible test -m user -a "name=linux state=absent" absent ##删除用户
[root@server2 tmp]# id linux
id: ‘linux’: no such user

mysql_user 模块

[root@server1 ansible]# ansible test -m dnf -a "name=mariadb-server"
[root@server2 tmp]# rpm -q mariadb-server
mariadb-server-10.3.17-1.module+el8.1.0+3974+90eded84.x86_64
[root@server1 ansible]# ansible test -m service -a "name=mariadb state=started"
[root@server1 ansible]# ansible-doc -l | grep mysql
[root@server1 ansible]# ansible-doc mysql_user
[root@server1 ansible]# ansible test -m dnf -a "name=python3-PyMySQL.noarch"
[root@server1 ansible]# ansible test -m mysql_user -a "name=westos password=westos priv='*.*:select' state=present"

ansible安装python3 ansible安装部署oracle_vim_23


ansible安装python3 ansible安装部署oracle_配置文件_24

ansible安装python3 ansible安装部署oracle_ansible安装python3_25


ansible安装python3 ansible安装部署oracle_ansible安装python3_26


ansible安装python3 ansible安装部署oracle_linux_27