Ansibe基础操作

CentOS安装ansible

示例:

yum instsll -y epel-release
yum install -y ansible

其它系统安装请参考[[Ansible安装]]

Ansible配置文件

/etc/ansible/ansible.cfg	# 主配置文件
/etc/ansible/hosts			# Inventory

定义Inventory

vi /etc/ansible/hosts

[dbserver]
192.168.1.2 ansible_sudo_pass='123456'	# ansibble_sudo_pass是当连接的用户不是root时,要使用sudo命令的密码

[webserver]
192.168.1.3 ansible_ssh_user=admin ansible_ssh_pass='12345' # 默认remote_user=root,在ansible.cfg中可以修改
192.168.1.4

使用秘钥方式连接服务器

Ansible命令基础


常见模块

command Ansible的默认模块,可以运行远程权限范围所有的shell命令,不支持变量和管理符。

cron 计划任务

  • month # 月

  • minute # 分

  • day # 天

  • hour # 小时

  • weekday # 周几

  • job # 指定任务

  • state # 表示添加还是删除

    • present # 添加(默认)

    • absent # 删除

添加、删除定时任务示例

user 用户账号管理

  • name

  • uid

  • state

    • present # 添加(默认)

    • absent # 删除

  • group # 所属组

  • groups # 附加组

  • home

  • createhome # 是否创建家目录

  • comment # 注释信息

  • system # 是否为系统用户

示例

group 用户组管理

  • gid

  • name # 组外

  • state

    • present # 添加(默认)

    • absent # 删除

  • system # 是否为系统用户

示例

copy 复制文件

  • src

  • dest

  • owner # 所有者

  • group # 所有组

  • mode # 权限

  • content # 取代src=,直接秀此处的信息生成文件内容

示例

file 设置文件属性

  • path|dest|name # 要操作的文件具体路径

示例

ping 测试指定主机是否能连接

service 管理服务运行状态

  • enabled # 是否开机启动

  • name # 服务名

  • state # 指定服务状态

    • started # 启动

    • stoped # 停止

    • restarted # 重启

  • arguments # 服务参数

示例

shell 在远程主机上运行命令,可以使用管道符或变量等复杂命令

示例

在Ansible中,-a 选项和 shell 模块都可以用于在目标主机上执行命令,但它们有一些区别。

  1. -a 选项

    -a 选项用于在命令行中指定Ad-hoc命令,允许直接执行简单的命令。例如:

    这种方式适用于简单的任务,但对于复杂的任务,尤其是需要使用管道、重定向或其他高级Shell功能的任务,可能会变得笨拙和不方便。

  2. shell 模块

    shell 模块是一个Ansible模块,允许你在目标主机上运行复杂的Shell命令。使用这个模块,你可以在Playbook中以更结构化的方式定义命令。示例:

    在这个示例中,shell 模块允许你通过 | 符号定义多行Shell命令。

总体而言,推荐使用 shell 模块,尤其是在编写更复杂的Playbooks时。它提供了更好的可读性和维护性,而 -a 选项更适合在命令行上执行简单的任务。

script 将本地服务复制到运程主机上运行

示例

yum 安装程序

  • name # 包名

  • state

    • present|latest # 安装

    • absent # 卸载

示例

setup 收集远程主机的信息,如操作系统版本,IP地址等

示例


远程用户非root,使用sudo/su执行

ansible 1.9之前的操作

先调整一下/etc/ansible/hosts的配置

在管理机上执行

ansilbe 1.9之后的版本使用become替代了sudo/su

修改配置文件/etc/ansible/ansible.cfg

修改/etc/ansible/hosts内容


Ansible playbook

结构:

  • inventory # 应对要操作的主机

  • modules # 调用哪些模块做操作

  • ad hoc commadns # 在这些主机上执行哪些命令

  • playbooks

    • tasks # 任务,即调用模块完成的操作

    • variable # 变量

    • templates # 模板

    • handlers # 触发器,由某件事件触发执行的操作

    • roles # 角色

playbook示例

运行Ansible playbook ansible-playbook playbook.yaml

playbook变量的赋值与调用

通过playbook 使用yum删除和安装软件

在 Ansible 中,你可以通过 playbook 使用 yum 模块来删除和安装软件。这对于在基于 Red Hat 的系统(如 CentOS, Fedora, RHEL 等)上管理软件包非常有用。下面是如何编写这样的 playbook 的示例。

安装软件包

要安装软件包,你可以使用 yum 模块并设置 state 参数为 present。这会确保指定的软件包已安装。

删除软件包

要删除软件包,将 state 参数设置为 absent。这将确保指定的软件包未安装在系统上。

运行 playbook

保存你的 playbook 为一个文件(例如 manage_packages.yml),然后在包含你的远程主机的 Ansible inventory 的情况下运行它:


主机信息可以写到/etc/ansible/hosts和用-i参数单独引用的区别

将主机信息写入 /etc/ansible/hosts 文件是一种常见的做法,这样你就无需在执行 Ansible 命令时显式指定 -i 参数。Ansible 在默认情况下会在 /etc/ansible/hosts 文件中查找主机清单,因此如果你的主机信息已经在该文件中,你可以直接运行 Ansible 命令而不需要额外的参数。

然而,有时候你可能希望在不同的场景中使用不同的主机清单,或者你可能希望将主机信息存储在不同的文件中以便于管理。在这种情况下,你可以使用 -i 参数来指定不同的主机清单文件。这使得你可以根据需要选择不同的主机清单,而不受默认清单文件的限制。

例如,你可能有一个用于生产环境的清单文件,另一个用于测试环境。在执行 Ansible 命令时,使用 -i 参数可以方便地切换到不同的清单文件,而不必每次都编辑默认的 /etc/ansible/hosts 文件。

-i 参数提供了更大的灵活性,允许你动态选择要使用的主机清单,而不仅限于默认的清单文件路径。

最后更新于