服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Ansible 点对点命令快速入门指南示例

Ansible 点对点命令快速入门指南示例

2021-03-01 23:07Linux中国Magesh Maruthamuthu Linux

之前,我们写了一篇有关 Ansible 安装和配置 的文章。在那个教程中只包含了一些使用方法的示例。如果你是 Ansible 新手,建议你阅读上篇文章。一旦你熟悉了,就可以继续阅读本文了。

Ansible 点对点命令快速入门指南示例

之前,我们写了一篇有关 Ansible 安装和配置 的文章。在那个教程中只包含了一些使用方法的示例。如果你是 Ansible 新手,建议你阅读上篇文章。一旦你熟悉了,就可以继续阅读本文了。

默认情况下,Ansible 仅使用 5 个并行进程。如果要在多个主机上执行任务,需要通过添加 -f [进程数] 选项来手动设置进程数。

什么是点对点ad-hoc命令

 

点对点命令用于在一个或多个受控节点上自动执行任务。它非常简单,但是不可重用。它使用 /usr/bin/ansible 二进制文件执行所有操作。

点对点命令最适合运行一次的任务。例如,如果要检查指定用户是否可用,你可以使用一行命令而无需编写剧本。

为什么你要了解点对点命令?

点对点命令证明了 Ansible 的简单性和强大功能。从 2.9 版本开始,它支持 3389 个模块,因此你需要了解和学习要定期使用的 Ansible 模块列表。

如果你是一个 Ansible 新手,可以借助点对点命令轻松地练习这些模块及参数。

你在这里学习到的概念将直接移植到剧本中。

点对点命令的一般语法:

  1. ansible [模式] -m [模块] -a "[模块选项]"

点对点命令包含四个部分,详细信息如下:

部分 描述
ansible 命令
模式 输入清单或指定组
模块 运行指定的模块名称
模块选项 指定模块参数

如何使用 Ansible 清单文件

如果使用 Ansible 的默认清单文件 /etc/ansible/hosts,你可以直接调用它。否则你可以使用 -i 选项指定 Ansible 清单文件的路径。

什么是模式以及如何使用它?

Ansible 模式可以代指某个主机、IP 地址、清单组、一组主机或者清单中的所有主机。它允许你对它们运行命令和剧本。模式非常灵活,你可以根据需要使用它们。

例如,你可以排除主机、使用通配符或正则表达式等等。

下表描述了常见的模式以及用法。但是,如果它不能满足你的需求,你可以在 ansible-playbook 中使用带有 -e 参数的模式中的变量。

描述 模式 目标
所有主机 all(或 * 对清单中的所有服务器运行 Ansible
一台主机 host1 只针对给定主机运行 Ansible
多台主机 host1:host2(或 host1,host2 对上述多台主机运行 Ansible
一组 webservers 在 webservers 群组中运行 Ansible
多组 webservers:dbservers webservers 中的所有主机加上 dbservers 中的所有主机
排除组 webservers:!atlanta webservers 中除 atlanta 以外的所有主机
组之间的交集 webservers:&staging webservers 中也在 staging 的任何主机

什么是 Ansible 模块,它干了什么?

模块,也称为“任务插件”或“库插件”,它是一组代码单元,可以直接或通过剧本在远程主机上执行指定任务。

Ansible 在远程目标节点上执行指定模块并收集其返回值。

每个模块都支持多个参数,可以满足用户的需求。除少数模块外,几乎所有模块都采用 key=value 参数。你可以一次添加带有空格的多个参数,而 command 或 shell 模块会直接运行你输入的字符串。

我们将添加一个包含最常用的“模块选项”参数的表。

列出所有可用的模块,运行以下命令:

  1. $ ansible-doc -l

运行以下命令来阅读指定模块的文档:

  1. $ ansible-doc [模块]

1)如何在 Linux 上使用 Ansible 列出目录的内容

 

可以使用 Ansible command 模块来完成这项操作,如下所示。我们列出了 node1.2g.lab 和 nod2.2g.lab* 远程服务器上 daygeek 用户主目录的内容。

  1. $ ansible web -m command -a "ls -lh /home/daygeek"
  2.  
  3. node1.2g.lab | CHANGED | rc=0 >>
  4. total 12K
  5. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Desktop
  6. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Documents
  7. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Downloads
  8. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Music
  9. -rwxr-xr-x. 1 daygeek daygeek 159 Mar 4 2019 passwd-up.sh
  10. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Pictures
  11. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Public
  12. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Templates
  13. -rwxrwxr-x. 1 daygeek daygeek 138 Mar 10 2019 user-add.sh
  14. -rw-rw-r--. 1 daygeek daygeek 18 Mar 10 2019 user-list1.txt
  15. drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Videos
  16.  
  17. node2.2g.lab | CHANGED | rc=0 >>
  18. total 0
  19. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Desktop
  20. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Documents
  21. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Downloads
  22. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Music
  23. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Pictures
  24. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Public
  25. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Templates
  26. drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Videos

2)如何在 Linux 使用 Ansible 管理文件

 

Ansible 的 copy 模块将文件从本地系统复制到远程系统。使用 Ansible command 模块将文件移动或复制到远程计算机。

  1. $ ansible web -m copy -a "src=/home/daygeek/backup/CentOS7.2daygeek.com-20191025.tar dest=/home/u1" --become
  2.  
  3. node1.2g.lab | CHANGED => {
  4. "ansible_facts": {
  5. "discovered_interpreter_python": "/usr/bin/python"
  6. },
  7. "changed": true,
  8. "checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c",
  9. "dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar",
  10. "gid": 0,
  11. "group": "root",
  12. "md5sum": "ee8e778646e00456a4cedd5fd6458cf5",
  13. "mode": "0644",
  14. "owner": "root",
  15. "secontext": "unconfined_u:object_r:user_home_t:s0",
  16. "size": 30720,
  17. "src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.474042-118186643704900/source",
  18. "state": "file",
  19. "uid": 0
  20. }
  21.  
  22. node2.2g.lab | CHANGED => {
  23. "ansible_facts": {
  24. "discovered_interpreter_python": "/usr/libexec/platform-python"
  25. },
  26. "changed": true,
  27. "checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c",
  28. "dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar",
  29. "gid": 0,
  30. "group": "root",
  31. "md5sum": "ee8e778646e00456a4cedd5fd6458cf5",
  32. "mode": "0644",
  33. "owner": "root",
  34. "secontext": "unconfined_u:object_r:user_home_t:s0",
  35. "size": 30720,
  36. "src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.4793239-237229399335623/source",
  37. "state": "file",
  38. "uid": 0
  39. }

我们可以运行以下命令进行验证:

  1. $ ansible web -m command -a "ls -lh /home/u1" --become
  2.  
  3. node1.2g.lab | CHANGED | rc=0 >>
  4. total 36K
  5. -rw-r--r--. 1 root root 30K Jan 22 14:56 CentOS7.2daygeek.com-20191025.tar
  6. -rw-r--r--. 1 root root 25 Dec 9 03:31 user-add.sh
  7.  
  8. node2.2g.lab | CHANGED | rc=0 >>
  9. total 36K
  10. -rw-r--r--. 1 root root 30K Jan 23 02:26 CentOS7.2daygeek.com-20191025.tar
  11. -rw-rw-r--. 1 u1 u1 18 Jan 23 02:21 magi.txt

要将文件从一个位置复制到远程计算机上的另一个位置,使用以下命令:

  1. $ ansible web -m command -a "cp /home/u2/magi/ansible-1.txt /home/u2/magi/2g" --become

移动文件,使用以下命令:

  1. $ ansible web -m command -a "mv /home/u2/magi/ansible.txt /home/u2/magi/2g" --become

在 u1 用户目录下创建一个名为 ansible.txt 的新文件,运行以下命令:

  1. $ ansible web -m file -a "dest=/home/u1/ansible.txt owner=u1 group=u1 state=touch" --become

在 u1 用户目录下创建一个名为 magi 的新目录,运行以下命令:

  1. $ ansible web -m file -a "dest=/home/u1/magi mode=755 owner=u2 group=u2 state=directory" --become

将 u1 用户目录下的 ansible.txt* 文件权限更改为 777,运行以下命令:

  1. $ ansible web -m file -a "dest=/home/u1/ansible.txt mode=777" --become

删除 u1 用户目录下的 ansible.txt 文件,运行以下命令:

  1. $ ansible web -m file -a "dest=/home/u2/magi/ansible-1.txt state=absent" --become

使用以下命令删除目录,它将递归删除指定目录:

  1. $ ansible web -m file -a "dest=/home/u2/magi/2g state=absent" --become

3)用户管理

 

你可以使用 Ansible 轻松执行用户管理活动。例如创建、删除用户以及向一个组添加用户。

  1. $ ansible all -m user -a "name=foo password=[crypted password here]"

运行以下命令删除用户:

  1. $ ansible all -m user -a "name=foo state=absent"

4)管理包

 

使用合适的 Ansible 包管理器模块可以轻松地管理安装包。例如,我们将使用 yum 模块来管理 CentOS 系统上的软件包。

安装最新的 Apache(httpd):

  1. $ ansible web -m yum -a "name=httpd state=latest"

卸载 Apache(httpd) 包:

  1. $ ansible web -m yum -a "name=httpd state=absent"

5)管理服务

 

使用以下 Ansible 模块命令可以在 Linux 上管理任何服务。

停止 httpd 服务:

  1. $ ansible web -m service -a "name=httpd state=stopped"

启动 httpd 服务:

  1. $ ansible web -m service -a "name=httpd state=started"

重启 httpd 服务:

  1. $ ansible web -m service -a "name=httpd state=restarted"

原文地址:https://linux.cn/article-13163-1.html

延伸 · 阅读

精彩推荐
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08