娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

ansible使用方法详解

1、安装

#先安装epel源
yum -y install epel-release
#再安装ansible
yum -y install absible

免密配置

#如果是root用户执行,在/root/.ssh/目录下生产公钥(id_rsa.pub)和私钥(id_rsa)两个文件
#一路回车下去
ssh-keygen -t rsa
#将公钥发送到其他被执行服务器
ssh-copy-id root@<ip>
2、配置

ansible分为2种工作模式

一是点对点(adhoc):此模式相当于对管理主机执行单个的shell命令

二是剧本模式(playbook):该模式是指将一系列任务整合形成一个剧本,以此来达成某种功能(譬如部署某个服务,数据库备份等)的目的。

如果是yum安装,默认配置文件如下

[root@centos ansible]# pwd
/etc/ansible
[root@centos ansible]# ls
ansible.cfg hosts roles
[root@centos ansible]#

ansible.cfg配置文件

inventory :管理的主机清单文件路径
library:ansible的模块存放的目录
remote_tmp:上述工作原理中提到的将脚本发送至对端的临时目录
local_tmp:上述工作原理中提到本地生成脚本存放的临时目录
forks:并发连接数,默认为5
sudo_user :命令执行用户
remote_port :访问管理主机的端口        
host_key_checking:设置是否检查SSH主机的密钥,默认为false
timeout :ssh连接被管理主机的超时时间
log_path:ansilbe日志文件路径

hosts配置文件

#hosts配置文件是ansible管理的主机列表文件,里面记载着管理主机的ip、端口等信息
#其有两种方式:
#一是单个主机名或主机ip记录
#二是将某一类主机分组记录,譬如数据库主句:
[test]
192.168.1.1
192.168.1.2
192.168.1.3
........
#当需要对该类主机进行操作时,只要调用dbserver即可调用该分组内所有主机,且此处可支持通配符
3、使用方法

常用参数

ansible-doc -l :列出所有模块
ansible-doc -s <模块名> :查看模块的参数信息
ansible --version :查看ansible版本
ansible -v :输出详细详细;-vv:输出更详细的信息
ansible -m :指定调用的模块名称
ansible -a :调用模块的参数
ansilbe -c :测试命令执行结果,不实际执行
ansible -k :提示输入ssh的秘密,而不是基于ssh认证
ansible -u :指定执行命令的用户
ansilbe -i :指定访问的主机列表文件
ansilbe -f :指定并发进程数

常用模块

3.1、ping模块测试连通性

[root@centos ansible]# ansible test -m ping
192.168.1.1 | SUCCESS => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/bin/python"
  },
   "changed": false,
   "ping": "pong"
}
[root@centos ansible]#

3.2、command模块

#执行某个命令不会通过shell处理,不支持管道
[root@centos ansible]# ansible test -m command -a "df -h"
192.168.1.1 | CHANGED | rc=0 >>
Filesystem               Size Used Avail Use% Mounted on
/dev/mapper/centos-root   28G  5.1G   23G  19% /
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G   28M  1.9G   2% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1               1014M 172M 843M  17% /boot
tmpfs                   378M     0 378M   0% /run/user/1000
tmpfs                   378M     0 378M   0% /run/user/0
[root@centos ansible]#

3.3、shell模块

#万能模块,支持所有shell命令
[root@centos ansible]# ansible s7 -m shell -a "df -h|grep dev"
192.168.1.1 | CHANGED | rc=0 >>
/dev/mapper/centos-root   28G  5.1G   23G  19% /
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
/dev/sda1               1014M 172M 843M  17% /boot
[root@centos ansible]#

3.4、copy模块

支持的参数:
src    被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径
content  用于替换"src",可以直接指定文件的内容
dest    将源文件复制到的远程主机的绝对路径
backup   当文件内容发生改变后,在覆盖之前把源文件备份
force   当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设                                 为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
#从当前设备拷贝文件至对端
[root@centos ~]# ansible test -m copy -a 'src=mem.txt dest=/root'
192.168.1.1 | CHANGED => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": true,
   "checksum": "321b4039b2d0805781db9c38df6ab75cc1a4fe32",
   "dest": "/root/mem.txt/192.168.1.1",
   "gid": 0,
   "group": "root",
   "md5sum": "fb3a8f8cafdeccd3312e69eb18b5c205",
   "mode": "0644",
   "owner": "root",
   "secontext": "system_u:object_r:admin_home_t:s0",
   "size": 333,
   "src": "/root/.ansible/tmp/ansible-tmp-1653312782.0254133-7348-72341069223651/source",
   "state": "file",
   "uid": 0
}
#查看文件已发送过来
[root@centos ~]# ansible test -m shell -a 'ls -l /root'    
192.168.1.1 | CHANGED | rc=0 >>
total 24
-rw-r--r--. 1 root   root     142 May 18 10:27 1.sh
drwxr-xr-x. 2 root   root       6 May  8 04:15 123
-rw-------. 1 root   root    1429 Aug 20  2021 anaconda-ks.cfg
-rw-r--r--. 1 root   root    1721 Aug 21  2021 initial-setup-ks.cfg
drwxr-xr-x. 2 root   root      28 May 23 09:33 mem.txt
-rw-r--r--. 1 root   root      53 May 18 10:54 temp.txt

3.5、file模块

支持的参数:
group  定义文件/目录的所属组
owner  定义文件/目录的所属用户。后面必须跟上path:定义文件/目录的路径
dest   被链接到的路径,只应用于state=link的情况
state  状态,有以下选项:
directory:如果目录不存在,就创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其               最后修改时间
absent:删除目录、文件或者取消链接文件
#删除文件/root/mem.txt
[root@centos ~]# ansible test -m file -a 'path='/root/mem.txt' state=absent'
192.168.1.1 | CHANGED => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": true,
   "path": "/root/mem.txt",
   "state": "absent"
}
#查看文件/root/mem.txt已被删除
[root@centos ~]# ansible test -m shell -a 'ls -l /root'
192.168.1.1 | CHANGED | rc=0 >>
total 24
-rw-r--r--. 1 root   root     142 May 18 10:27 1.sh
drwxr-xr-x. 2 root   root       6 May  8 04:15 123
-rw-------. 1 root   root    1429 Aug 20  2021 anaconda-ks.cfg
-rw-r--r--. 1 root   root    1721 Aug 21  2021 initial-setup-ks.cfg
-rw-r--r--. 1 root   root      53 May 18 10:54 temp.txt

3.6、fetch模块

将远程文件复制到本地

dest:用来存放文件的目录
src:在远程拉取的文件,并且必须是一个file,不能是目录
[root@centos ~]# ansible test -m fetch -a 'src=/root/test.sh dest=/root'
192.168.1.1 | SUCCESS => {
   "changed": false,
   "checksum": "061375bc913062287ccd658347e8575d38dfa857",
   "dest": "/root/192.168.1.1/root/test.sh",
   "file": "/root/test.sh",
   "md5sum": "35dcd724c02d10850a560df9129a1cf2"
}

3.7、cron模块

day:  每天应该运行的工作( 1-31)
hour: 每小时 ( 0-23 )
minute:每分钟( 0-59 )
month:每月( 1-12 )
weekday:每周 ( 0-6 for Sunda y-Saturday,, )
job:指明运行的命令
name:定时任务描述
reboot :任务在重启时运行,不建议使用,建议使用special_time
special_time :特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state:指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
user :以哪个用户的身份执行
#每5小时重启httpd模块
[root@centos ~]# ansible test -m cron -a 'name="restart httpd" hour=*/5 job="systemctl restart httpd"'
192.168.1.1 | CHANGED => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": true,
   "envs": [],
   "jobs": [
       "restart httpd"
  ]
}
[root@centos ~]# ansible client -m shell -a 'crontab -l'
192.168.1.1 | CHANGED | rc=0 >>
#Ansible: restart httpd
* */5 * * * systemctl restart httpd

3.8、yum模块

支持的参数:
name:安装包名称
state:三种状态:
  present:安装
  latest:安装最新的
  absent: 卸载软件
[root@centos ~]# ansible test -m yum -a 'name=httpd state=present'

3.9、service模块

支持的参数:
enabled :设置开机启动。
name : 服务名称
state :四种状态
    started:启动服务               stopped:停止服务
    restarted:重启服务             reloaded:重载配置
#重启httpd服务
[root@centos ~]# ansible test -m service -a 'name=httpd state=restarted'    
192.168.1.1 | CHANGED => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": true,
   "name": "httpd",
   "state": "started",
   "status": {
       "ActiveEnterTimestamp": "Mon 2022-05-23 10:16:02 EDT",
       "ActiveEnterTimestampMonotonic": "134284476109",
       "ActiveExitTimestamp": "Mon 2022-05-23 10:16:01 EDT",
       "ActiveExitTimestampMonotonic": "134283332327",
       "ActiveState": "active",
  ........
      }
}

3.10、user模块

支持的参数:
name:指定用户名
group:指定基本组
state:设置帐号状态,不指定为创建,指定值为absent表示删除
system:当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid: 指定用户的uid
password: 指定用户密码
#创建用户test,uid为23
[root@centos ~]# ansible test -m user -a 'name=test uid=23'
192.168.1.1 | CHANGED => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": true,
   "comment": "",
   "create_home": true,
   "group": 1001,
   "home": "/home/test",
   "name": "test",
   "shell": "/bin/bash",
   "state": "present",
   "system": false,
   "uid": 23
}
#删除用户state=absent
[root@centos ~]# ansible test -m user -a 'name=test state=absent'

3.11、group模块

支持的参数:
gid:设置组ID
name:组的名称
state:组的状态,默认为创建,设置值为absent为删除
system:值为yes,表示创建为系统组
#创建组test1,gid为233
[root@centos ~]# ansible test -m group -a 'name=test1 gid=233'
192.168.1.1 | CHANGED => {
   "ansible_facts": {
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": true,
   "gid": 233,
   "name": "test1",
   "state": "present",
   "system": false
}

3.12、script模块

该模块用于将本地的一个脚本文件在管理设备上执行,脚本文件需有可执行权限

[root@centos ~]# ansible test -m script -a '/root/192.168.1.1/test.sh'

3.13、setup模块

该模块用于采集被管理设备信息并返回给服务端,后面跟–tree <目录>,可以将采集信息以ip为文件名保存至指定目录下

#输出所有设备信息输出内容较多,可通过过滤采集我们需要的设备信息,譬如只要内存信息    
[root@centos ~]# ansible test -m setup -a 'filter=*mem*'
192.168.1.1 | SUCCESS => {
   "ansible_facts": {
       "ansible_memfree_mb": 55,
       "ansible_memory_mb": {
           "nocache": {
               "free": 216,
               "used": 566
          },
           "real": {
               "free": 55,
               "total": 782,
               "used": 727
          },
           "swap": {
               "cached": 56,
               "free": 1175,
               "total": 2047,
               "used": 872
          }
      },
       "ansible_memtotal_mb": 782,
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": false
}
#再或者仅要ipv4地址:
[root@centos root]# ansible test -m setup -a 'filter=*all_ipv4*'
192.168.1.1 | SUCCESS => {
   "ansible_facts": {
       "ansible_all_ipv4_addresses": [
           "127.0.0.1",
           "192.168.1.1"
      ],
       "discovered_interpreter_python": "/usr/libexec/platform-python"
  },
   "changed": false
}

3.14、playbook剧本模式

未完待续

赞(0)
未经允许不得转载:娃哈哈好喝 » ansible使用方法详解
分享到: 更多 (0)