Linux之自动化运维工具ansible、ansible模块(2)

简介: Linux之自动化运维工具ansible、ansible模块(2)

Linux之自动化运维工具ansible、ansible模块(1)+https://developer.aliyun.com/article/1557938

带/:/lianxi/copy_dir/ :是将lianxi下的copy_dir下的所有子目录以及子文件都拷贝到/lianxi/ansible下面。

[root@b copy_dir]# ansible all -m copy -a "src=/lianxi/copy_dir/ dest=/lianxi/ansible"
192.168.2.132 | CHANGED => {
    "changed": true, 
    "dest": "/lianxi/ansible/", 
    "src": "/lianxi/copy_dir/"
}

2、fetch模块

从远程主机拉取文件到本地。

fetch会自动的在dest指定目录后加上远程主机命名的目录结构后面接src目录结构

fetch存储到本地的目录结构: dest + 远程主机名 + src

例如:将远程主机上的hostname整个目录拉取到ansible机器上的/tmp文件夹下面

[root@sc-master ~]# ansible webser -m fetch -a "src=/etc/hostname dest=/tmp/"
192.168.2.132 | CHANGED => {
    "changed": true, 
    "checksum": "6a407093b4b39fea35a63344f893529cf4ff26d2", 
    "dest": "/tmp/192.168.2.132/etc/hostname", 
    "md5sum": "c810e45b405a225acc2b9cced74d4e1f", 
    "remote_checksum": "6a407093b4b39fea35a63344f893529cf4ff26d2", 
    "remote_md5sum": null
}
192.168.2.137 | CHANGED => {
    "changed": true, 
    "checksum": "de9bcf635db0ce32c9975f2938b930d923576653", 
    "dest": "/tmp/192.168.2.137/etc/hostname", 
    "md5sum": "9fab83764b3e4608e27bd0c32ea881a9", 
    "remote_checksum": "de9bcf635db0ce32c9975f2938b930d923576653", 
    "remote_md5sum": null
}
[root@sc-master ~]# cd /tmp
[root@sc-master tmp]# ls
192.168.2.132
192.168.2.137
)

3、command模块

在远程主机上执行命令,属于裸执行,非键值对显示;不进行shell解析。

[root@b lianxi]# ansible all -m shell -a "ifconfig"
[root@b lianxi]# ansible all -m command -a "ifconfig|grep inet"
192.168.2.132 | FAILED | rc=2 >>
[Errno 2] 没有那个文件或目录
192.168.2.137 | FAILED | rc=2 >>
[Errno 2] 没有那个文件或目录

属于裸执行,不会解析它的管道符号 会认为ifconfig|grep 是一个命令。

4、shell模块

使用ansible中的shell命令的时候,需要两台机器上也有能执行的命令。比如执行ifconfig密码

跟command一样,只不过shell模块可以解析管道之类的功能。

[root@b lianxi]# ansible all -m shell -a "ifconfig|grep inet"
[root@sc-master 192.168.2.132]# ansible webser -m shell -a "ifconfig|grep inet"
192.168.2.132 | CHANGED | rc=0 >>
        inet 192.168.2.132  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::20c:29ff:fefd:d5db  prefixlen 64  scopeid 0x20<link>
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
192.168.2.137 | CHANGED | rc=0 >>
        inet 192.168.2.137  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::20c:29ff:fe3f:78b  prefixlen 64  scopeid 0x20<link>
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>

5、file模块

设置文件属性(创建文件)

常用参数:

path 目标路径

state directory为目录, link为软件链接

group 目录属组

owner 属主

mode 指定权限

等,其他参数通过ansible-doc -s file 获取

其中的state –

absent 删除文件和目录的

directory 目录

touch 新建空文件

link 软链接

hard 硬链接

例题:创建文件目录,并且设置权限为777。

[root@sc-master tmp]# ansible webser -m file -a "path=/tmp/sanchuang state=directory mode=777"
192.168.2.137 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "path": "/tmp/sanchuang", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}
192.168.2.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "path": "/tmp/sanchuang", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}

查看B机器:目录存在

[root@sc-slave tmp]# ls
ansible_stat_payload_fsj79S
sanchuang

C机器的也存在。

例如:删除那个sanchaung目录

[root@sc-master tmp]# ansible webser -m file -a "path=/tmp/sanchuang state=absent mode=777"

1、查看file模块帮助信息:ansible-doc

[root@b lianxi]# ansible-doc -s file

例题:设置修改文件属性

root@b lianxi]# ansible all -m file -a "path=/tmp/passwd owner=sanchuang"
192.168.2.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "sanchuang", 
    "path": "/tmp/passwd", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 1045, 
    "state": "file", 
    "uid": 1009
}

2、软连接 ,硬链接

创建一个硬链接 文件的链接数会+1。删除硬链接文件或者是源文件 只是把文件的链接数-1 文件不会被真正的删掉。

① 软连接:

[root@b lianxi]# vim ansible-copy
[root@b lianxi]# ln -s ansible-copy ansible-copy-link-s  #软链接
[root@b lianxi]# ls -al
总用量 4
drwxr-xr-x   4 root root  89 11月 25 11:37 .
dr-xr-xr-x. 18 root root 258 11月 25 10:10 ..
drwxr-xr-x   3 root root  17 11月 25 11:03 192.168.0.48
-rw-r--r--   1 root root   8 11月 25 11:36 ansible-copy
lrwxrwxrwx   1 root root  12 11月 25 11:37 ansible-copy-link-s -> ansible-copy
drwxr-xr-x   2 root root  36 11月 25 10:29 copy_dir

② 硬链接

[root@b lianxi]# ln ansible-copy ansible-copy-link   #硬链接
[root@b lianxi]# ls -al
总用量 8
drwxr-xr-x   4 root root 114 11月 25 11:38 .
dr-xr-xr-x. 18 root root 258 11月 25 10:10 ..
drwxr-xr-x   3 root root  17 11月 25 11:03 192.168.0.48
-rw-r--r--   2 root root   8 11月 25 11:36 ansible-copy
-rw-r--r--   2 root root   8 11月 25 11:36 ansible-copy-link
lrwxrwxrwx   1 root root  12 11月 25 11:37 ansible-copy-link-s -> ansible-copy
drwxr-xr-x   2 root root  36 11月 25 10:29 copy_dir

6、cron模块

通过cron模块对目标主机生成计划任务。

常用参数:

除了分(minute)时(hour)日(day)月(month)周(week)外

name: 本次计划任务的名称

state: present 生成(默认) | absent 删除 (基于name)

ntp服务,是一个时间管理服务器
在 centos 8 中, ntp 已经被 chrony 代替。
之前的版本:yum install -y ntp
centos8:yum install chrony

例题:每三分钟输出当前时间,到/tmp/time.txt文件。这个计划任务是设置为每三分钟生成一次,所以要记得及时删除。

[root@b ~]# ansible all -m cron -a "minute=*/3 job='date >>/tmp/time.txt' name=date_test  state=present"
192.168.2.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "date_test"
    ]
}

如果做测试的话,要及时删除计划任务。如果不记得设置的计划任务的名字,可以通过查看计划任务,上方会显示计划任务的名称,然后指定那个名字删除就可以了。

crantab -l:查看计划任务。

删除刚刚创建的计划任务。name是指刚刚创建的计划任务的名字。state=absent是表示删除。

[root@b ~]# ansible 192.168.0.48 -m cron -a "name=date_test  state=absent"
192.168.2.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}

例题:每天凌晨1点 ,检查/etc/passwd 文件是否被修改,并且生成检查报告。

实现ansible node节点服务器备份,备份/var/log/messages 备份到/backup目录下,并且取名2020-11-25-01-log.tar.gz,每一个小时执行一次。

ansible webserver -m cron -a "minute=*/1 job='tar -czf /tmp/sc/$(date +%Y-%m-%d-%H)-log.tar.gz /var/log/messages' name=date_test state=present"

7、yum模块

故名思义就是yum安装软件包的模块;

常用参数说明:

enablerepo,disablerepo表示启用与禁用某repo库

name 安装包名

state (present’ or installed’, latest’)表示安装, (absent’ or `removed’) 表示删除

示例:通过安装epel扩展源并安装nginx。

1、安装wget:

[root@b ~]# ansible all -m yum -a "name=wget state=installed"

2、卸载wget

[root@b ~]# ansible all -m yum -a "name=wget state=absent"

8、service模块

服务管理模块。

常用参数:

name:服务名

state:服务状态 started(启动) stopped(关闭) restarted(重启) reloaded(重新加载)

enabled: 是否开机启动 true|false

runlevel: 启动级别 (systemed方式忽略)

安装文件传输服务vsftpd。

[root@b ~]# ansible all -m yum -a "name=vsftpd state=installed"
192.168.0.48 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": true, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Installed: vsftpd-3.0.3-31.el8.x86_64"
    ]
}

关闭vsftpd服务:ansible all -m service -a “name=vsftpd state=stopped”

[root@b ~]# ansible all -m service -a "name=vsftpd state=stopped"

开启vsftpd服务:ansible all -m service -a “name=vsftpd state=started”

[root@b ~]# ansible all -m service -a "name=vsftpd state=started"

例题:使用ansible 部署web服务

安装nginx, 修改nginx的配置文件 /etc/nginx/conf.d/sc.conf

传递index.html文件 到 /opt/dist目录下

index里面的内容: this is index

启动服务

测试能不能访问

server {
        listen       80 ;
        server_name  www.sc.com;
        root         /opt/dist;
  access_log  /var/log/nginx/sc_access.log  main;
        location / {
  }
  location =/api {
  }
}
[root@scmysql opt]# curl -H "Host: www.sc.com" http://192.168.77.13
4
this is index

9、script模块

把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行;只在远程服务器执行脚本,不上传脚本到远程服务器。

例如:测试将ansible本地机上的文件放在B、C机器上执行。

1、本地机器上的文件test.sh
[root@b ~]# cat test.sh
#!/bin/bash
echo "test ansible" >> /tmp/ansible.txt
2、使用script命令将本地机上的test.sh文件放在B、C两台远程机上执行。
[root@sc-master ~]# ansible all -m script -a "/root/test.sh"
192.168.2.132 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.2.132 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.2.132 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}
192.168.2.137 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.2.137 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.2.137 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}

执行慢,机器多 。可以使用多进程去执行

-f 6 执行6个进程去执行。


相关文章
|
6天前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
9天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
30 4
|
8天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【10月更文挑战第37天】本文将深入探讨如何利用Ansible简化和自动化复杂的IT基础设施管理任务。我们将通过实际案例,展示如何用Ansible编写可重用的配置代码,以及这些代码如何帮助运维团队提高效率和减少人为错误。文章还将讨论如何构建Ansible playbook来自动部署应用、管理系统更新和执行常规维护任务。准备好深入了解这个强大的工具,让你的运维工作更加轻松吧!
23 2
|
8天前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible实战指南
【10月更文挑战第36天】在快速迭代的数字时代,自动化运维成为提升效率、减少错误的关键。Ansible以其简洁性、易用性和强大的功能脱颖而出。本文将带你了解Ansible的核心组件,通过实际案例深入其应用,并探讨如何结合最佳实践优化你的自动化工作流程。无论你是新手还是有经验的运维人员,本指南都将为你提供宝贵的知识和技能。
|
9天前
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible进行批量配置管理
【10月更文挑战第36天】在现代的IT基础设施中,高效和可靠的系统管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具来简化运维任务,包括安装、配置、部署应用程序以及管理系统更新。我们将探讨Ansible的核心概念,并通过实际代码示例展示其应用。通过阅读本文,读者将获得使用Ansible改善日常运维工作流程的实用知识。
|
10天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
1月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
164 64
|
1月前
|
运维 负载均衡 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第34天】在现代IT运维工作中,自动化已成为提升效率、减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。我们将通过实际案例展示如何利用Ansible的Playbooks来自动化常见任务,并讨论其对提高运维团队工作效率的影响。
|
1月前
|
运维 应用服务中间件 网络安全
自动化运维:使用Ansible进行批量服务器配置
【9月更文挑战第35天】在现代IT基础设施管理中,高效、可扩展的自动化工具是提升工作效率的关键。本文将引导您了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置过程,确保一致性和可靠性的同时减少人为错误。通过实际案例,我们将展示如何编写Ansible Playbook以实现批量服务器配置,从而让您能够更加轻松地管理和维护您的服务器群。
|
13天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。