ansible 自动化部署

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 操作

  1. ping

  2. 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 表示本地文件路径
  3. 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
    	}
    
  4. file: file模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录、修改文件权限等

  5. blockinfile: blockinfile模块可以帮助我们在指定的文件中插入"一段文本",这段文本是被标记过的,换句话说就是,我们在这段文本上做了记号,以便在以后的操作中可以通过"标记"找到这段文本,然后修改或者删除它.

转载于:https://my.oschina.net/u/3788834/blog/3074118

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值