Ansible入门

Ansible入门

On this page

Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理远程虚拟机、物理机,也可以是本地主机(linux、windows)。

Ansible通过SSH协议实现管理节点、远程节点的通信。

ansible作为运维自动化的核心软件之一,可以让我们把双手从机械性的重复劳动中解放出来,简单快捷的管理大量主机。

Ansible的安装和部署

安装Ansible软件

配置好了软件源后可以使用一条命令安装:

yum install ansible libselinux-python -y

查看Ansible版本

ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

配置Ansible主机清单

修改/etc/ansible/hosts文件

清单模式

主机清单有两种模式,一种是分组清单,一种是普通清单(无分组)。

分组清单:

[web]
172.16.1.7
172.16.1.9

普通清单就是把组标号去掉。

清单不仅仅支持IP,也支持域名,如:

[site]
web.example.com
db.example.com

范围匹配模式

web-[7:9].example.com

这意味着将web-7.example.com,web-8.example.com,web-9.example.com都加入清单中。

Ansible主机登录认证

基于密码认证

在hosts文件中增加登录参数配置;有以下几个参数:

参数 参数类型
ansible_host 主机地址
ansible_port 主机端口
ansible_user 操作用户
ansible_password 登录密码

修改后如下:

[web]
172.16.1.7 ansible_port=22 ansible_user=root ansible_password=123456
172.16.1.9 ansible_port=22000 ansible_user=root ansible_password=123123

通用变量配置

如果当前清单中有多个主机组,而每个主机组的参数配置都一样,则可以使用通用配置,免去在每个主机后面加上参数配置。如:

[web:vars]
ansible_ssh_port=22000
ansible_ssh_user=root
ansible_ssh_pass=123123

[web]
172.16.1.7
172.16.1.9

[web:vars]中的配置将自动用于所有web组下的主机。

基于免密登录

在使用ansible前通过ssh-keygen和ssh-copy-id两条命令将本机秘钥发送至目标主机,由此实现免密登录,这样就无需再对登录密码进行配置。

ansible-doc 命令

该命令是ansible的说明文档命令,可以通过此命令查看ansible支持的模块,具体模块的使用方法等。

查看ansible支持的所有模块

ansible-doc -l

查看具体某个模块的用法,以command模块为例

[root@master-61 ~/.ssh]#ansible-doc -s command
- name: Execute commands on targets
  command:
      argv:                  # Passes the command as a list rather than a string. Use `argv'
                               to avoid quoting values that
                               would otherwise be interpreted
                               incorrectly (for example "user
                               name"). Only the string or the
                               list form can be provided, not
                               both.  One or the other must
                               be provided.
      chdir:                 # Change into this directory before running the command.
      cmd:                   # The command to run.
      creates:               # A filename or (since 2.0) glob pattern. If it already exists,
                               this step *won't* be run.
      free_form:             # The command module takes a free form command to run. There is
                               no actual parameter named
                               'free form'.
      removes:               # A filename or (since 2.0) glob pattern. If it already exists,
                               this step *will* be run.
      stdin:                 # Set the stdin of the command directly to the specified value.
      stdin_add_newline:     # If set to `yes', append a newline to stdin data.
      strip_empty_ends:      # Strip empty lines from the end of stdout/stderr in result.
      warn:                  # Enable or disable task warnings.

Ansible执行命令结果(状态颜色)

💡
黄色:命令以用户期望的执行了,并且状态发生了改变;
💡
绿色:命令以用户期望的执行了,但是状态没有发生改变;
💡
蓝色: 详细的执行过程;
💡
紫色:警告信息,说明ansible提示你有更合适的用法;
💡
红色:命令错误,执行失败;