ansible安装/配置
- ubuntu apt 安装
sudo apt install ansible
- pip安装
pip install ansible
ansible 基于密码配置
配置 /etc/ansible/hosts 文件, 添加如下内容
ali1 ansible_host=118.31.39.31 ansible_port=22 ansible_user=root ansible_ssh_pass=123456
- ali1: 目标服务器别名
- ansible_host: 目标服务器ip
- ansible_user: 目标服务器user
- ansible_ssh_pass: 目标服务器用户密码
测试 ansible ali1 -m ping
返回成功消息
ali1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ansible 基于秘钥配置
-
将本机 公钥复制到目标服务器
ssh-copy-id -i ./.ssh/id_rsa.pub root@118.31.39.31
-
配置 /etc/ansible/hosts 文件
ali2 ansible_host=118.31.39.31 ansible_port=22 ansible_user=root
测试 ansible ali2 -m ping
返回成功消息
ali2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
/etc/ansible/hosts 配置示例
[dev]
dev1 10.0.0.1
dev2 10.0.0.2
[devA]
10.0.0.[1:2] # 此配置效果与上条相同
[proA]
pro1 10.0.1.1
pro2 10.0.1.2
[proB]
pro1 10.0.2.1
pro2 10.0.2.2
[pro:children]
proA
proB
ansible all -m ping
会操作配置中的所有主机
ansible dev -m ping
会操作配置中 dev 下的所有主机
此外, /etc/ansible/hosts 还支持YAML语法, 以下两种配置效果相同
ali1 ansible_host=118.31.39.31 ansible_port=22 ansible_user=root ansible_ssh_pass=123456
ali2 ansible_host=118.31.39.31 ansible_port=22 ansible_user=root
all:
children:
ali:
hosts:
ali1:
ansible_host: 118.31.39.31
ansible_port: 22
ansible_user: root
ansible_ssh_pass: 123456
ali2:
ansible_host: 118.31.39.31
ansible_port: 22
ansible_user: root
ansible 操作
-
ping
-
fetch: 将远程主机文件下载到本地
ansible ali -m fetch -a "src=~/t1 dest=./"
输出 如下:
ali2 | SUCCESS => { "changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/amumu/ali2/root/t1", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "remote_md5sum": null } ali1 | SUCCESS => { "changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/amumu/ali1/root/t1", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "remote_md5sum": null }
- -m fetch 表示调用fetch 模块
- -a 用于传递模块所需要的参数
- src 表示目标文件路径, dest 表示本地文件路径
-
copy: 将本地文件推到远程主机
copy模块的作用就是拷贝文件,它与之前介绍的fetch模块类似,不过, fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中。
常用参数:
- src: 需要复制的文件
- dest: 复制到远程主机所在目录, 必填
- content: 当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
- force: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
- backup: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
- owner: 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
- group: 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
- mode: 指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r--r--",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
ansible ali1 -m copy -a "src=./1559046715290.mp3 dest=/opt/"
ali1 | SUCCESS => { "changed": true, "checksum": "fdfb75ceb6c974ab04542988e40ce1b5d0b8a8ef", "dest": "/opt/1559046715290.mp3", "gid": 0, "group": "root", "md5sum": "50fb29bc41e178cca66f76ab58f51c7e", "mode": "0644", "owner": "root", "size": 95040, "src": "/root/.ansible/tmp/ansible-tmp-1562914219.72-269735739996180/source", "state": "file", "uid": 0 }
-
file: file模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录、修改文件权限等
-
blockinfile: blockinfile模块可以帮助我们在指定的文件中插入"一段文本",这段文本是被标记过的,换句话说就是,我们在这段文本上做了记号,以便在以后的操作中可以通过"标记"找到这段文本,然后修改或者删除它.