自动化运维工具—Ansible 的使用
ansible简介
ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.
ansible 安装方式
ansible安装方式常用的有2种方式:yum安装和pip安装
pip安装ansible
yum install -y python-pip
pip install -y ansible
yum 安装ansible
yum install -y epel-release
yum install ansible –y
配置文件
Ansible 配置公私钥
1. 创建秘钥对
ssh-keygen
2. 将公钥进行分发
ssh-copy-id -i /root/.ssh/id_dsa.pub root@服务器IP
Ansible 命令详解
ansible官网:https://docs.ansible.com/
命令的具体格式如下:
参数 | 详解 |
---|---|
-a MODULE_ARGS | 模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等 |
-k ,–ask-pass | 登录密码,提示输入SSH密码而不是假设基于密钥的验证 |
–ask-su-pass | ask for su password 。su切换密码 |
-K,–ask-sudo-pass | ask for sudo password。提示密码使用sudo,sudo表示提权操作 |
–ask-vault-pass | ask for vault password。假设我们设定了加密的密码,则用该选项进行访问 |
-B SECONDS | 后台运行超时时间 |
-C | 拟运行环境并进行预运行,可以进行查错测试 |
-c CONNECTION | 连接类型使用 |
-f FORKS | 并行任务数,默认为5,可以针对批量执行的服务器的数量进行调整 |
-i INVENTORY | 指定主机清单的路径,默认为/etc/ansible/hosts |
–list-hosts | 查看有哪些主机组 |
-m MODULE_NAME | 行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数 |
-o | 压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用 |
-S | 用 su 命令 |
-R SU_USER | 指定 su 的用户,默认为 root 用户 |
-s | 用 sudo 命令 |
-U SUDO_USER | 指定 sudo 到哪个用户,默认为 root 用户 |
-T TIMEOUT | 指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改 |
-u REMOTE_USER | 远程用户,默认为 root 用户 |
-v | 查看详细信息,同时支持-vvv,-vvvv可查看更详细信息 |
Ansible常用模块
1. Ping模块
常用来测试主机的连通性
lzd@LAPTOP-US7ILSVQ:/mnt/c/Users/lzd$ ansible 10.131.1.5 -m ping
10.131.1.5 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
2. Command模块
command 模块可以帮助我们在远程主机上执行命令。
2.1 chdir参数
此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
2.2 reates参数
看到creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令。
removes参数
与creates参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果/testdir/tests文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件
free_form参数
必须参数,指定需要远程执行的命令,需要说明一点,free_form参数与其他参数并不相同,在之前的模块示例中,如果想要使用一个参数,那么则需要为这个参数赋值,举个例子,之前的示例模块中,大多都有path参数,当我们需要指定要操作的文件时,通常需要对path参数赋值,比如,path=/testdir/test,表示我们想要操作/testdir/test文件,但是free_form参数则不同,“free_form"并不是一个"实际存在"的参数名,比如,当我们想要在远程主机上执行ls命令时,我们并不需要写成"free_form=ls” ,这样写反而是错误的,因为并没有任何参数的名字是free_form,当我们想要在远程主机中执行ls命令时,直接写成ls即可,这就是free_form参数的含义,因为command模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为free_form