Ansible-使用Ansible自动化运维(二)

747 阅读3分钟

接上回,继续Ansible分享。


这回解释Ansible服务配置,Ansible命令参数以及主机清单(Inventory)的配置。

Ansible配置

Ansible安装后,已经默认设置了一些参数,如主机清单文件位置,远程用户,远程端口,日志存放路径。我们可能需要修改一些参数,可以通过修改ansible配置文件来实现。

Ansible配置的文件路径:/etc/ansible/ansible.cfg,文件格式为ini。

下面贴出该文件中部分配置参数并释义(大多数已经词达意了):

[defaults]
# some basic default values...
#inventory      = /etc/ansible/hosts  # 主机清单默认配置文件路径
#library        = /usr/share/my_modules/  # Ansible模块位置
#remote_tmp     = ~/.ansible/tmp  #  Managed Node临时状态文件
#local_tmp      = ~/.ansible/tmp  # Control Node临时状态文件
#sudo_user      = root  
#ask_sudo_pass = True
#ask_pass      = True  # 如果主机清单没有配置远程密码,则执行ansible命令会询问密码

# uncomment this to disable SSH key host checking
#host_key_checking = False    # 检查主机密钥

例:如果执行ansible命令遇到如下情况,需要将取消host_key_checking参数的注释并将值设置为False,因为连接主机时,默认会检查主机的密钥,而我们可能只是单纯的使用用户密码进行连接:

172.17.173.164 | FAILED! => {
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}

主机清单配置

默认的主机清单配置文件位于/etc/ansible/hosts,但是也可以自定义,自定义的主机清单文件使用Ansible命令时需要指定:
ansible node -m ping -i <your_hosts_path>
主机清单文件的配置支持ini和yaml两种格式,简约易读的缘故一般使用ini格式。
主机清单的配置一般以主机为单位,配置远程主机的IP或本机可解析的域名,可以为多个主机分组,组可以拥有自己的变量参数,组也可以嵌套。

INI格式配置示例:

a.example.com  # Managed Node的域名
192.168.0.1  # Managed Node的IP

[webservers]  # 组,包含多个主机
web.server01.com  ansible_user_pass=xxx  # 主机独有的变量参数
web.server02.com  ansible_user_pass=xxx

[webservers:vars]  # 组的变量参数,组中包含的主机共用
ansible_ssh_user=admin

[dbservers]
db.server01.com

[allserver:children]  # 组再组成组
webservers
dbservers
ansible <hosts>命令执行,<hosts>格式允许:
  • all或*,所有主机

  • ip或可解析的域名,多个用“:”分割

  • 组名,包括嵌套组

  • 可解析的域名

Ansible命令参数配置

使用ansible -h可以查看ansible命令参数,下面找几个比较常用的参数罗列:
[--version]   # Ansible版本
[-v]   # verbost
[-b]   # sudo运行,可以以sudo权限运行
[--become-method BECOME_METHOD]
[--become-user BECOME_USER] [-K]   # 提示输入sudo密码,当不是NOPASSWD模式时使用
[-i INVENTORY]   # 指定hosts文件路径,默认default=/etc/ansible/hosts
[--list-hosts]  # 打印有主机列表[-o]   # 压缩输出,摘要输出
[-t TREE] [-k]  # 提示输入ssh登录密码。当使用密码验证的时候用
[--private-key PRIVATE_KEY_FILE]   # ssh连接的私钥文件位置
[-u REMOTE_USER]  # ssh连接的用户名,默认用root,ansible.cfg中可以配置
[-c CONNECTION]   # 连接类型(default=smart),例如还有local
[-T TIMEOUT]  # 超时限制
[--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
[-f FORKS]     # fork多少个进程并发处理,默认为5个
[-M MODULE_PATH]   # 模块的执行文件位置,一般用于扩展模块
[--playbook-dir BASEDIR]
[-a MODULE_ARGS]   # 模块的参数
[-m MODULE_NAME]  # 要执行的模块,默认为command

结束语

该篇可以作为Ansible的设置和配置资料查询。
在此之前,介绍的Ansible使用都是单行命令形式的,但是在真正的生产使用过程中,我们不太可能每次都手动输入命令,我们最可能使用到的其实是Ansible Playbook这个功能,但是放下回介绍吧。