ansible入门教程(三)使用
今天我们重点讲 ansible的 playbook 使用,因为它通吃所有的服务器操作,其它使用姿势本文就不演示了.
先看效果
[图1]
这样一行命令,就搞定了nginx 的一个配置,都不用登录服务器
下面是本教程的demo代码:https://github.com/jackysong/docker_lnmp_swoole_efk_java
欢迎start 和 follow
如图2所示目录机构
[图2]
操作步骤:
第一步,编辑hosts,把目标服务器信息录入到hosts 文件
[test]
192.168.10.110 ansible_ssh_user=root ansible_ssh_pass=your_password
192.168.10.111 ansible_ssh_user=root ansible_ssh_pass=your_password
[test-1]
127.0.0.1 ansible_ssh_user=root ansible_ssh_pass=your_password
注意事项:
- ansible 的 host 都是基于 ssh 的,所以请提前把 ssh远程登录配置好 默认的 hosts
- hosts文件一般是安装在是在ansible配置目录下,可以自定义路径,修改配置文件即可
mac 是~/.ansible.cfg
linux 是在/etc/ansible/
[defaults]
inventory = /Users/jackysong/Work/devops/hosts #这个是 hosts 文件目录,可以修改成你的路径
#library = ~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
#module_utils = ~/.ansible/plugins/module_utils:/usr/share/ansible/plugins/module_utils
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#forks = 5
#poll_interval = 0.001
#ask_pass = False
#transport = smart
第二步,编写 playbook 脚本
这个脚本是核心,playbook好比是舞台脚本,roles就是舞台中扮演的各个角色,舞台脚本是由各个角色合作去完成的,所以角色是核心的核心。
下面我们来简单的介绍下 role 的功能,如图2,我们建立了roles目录,下面建立了若干角色,一个角色一个子目录,比如 git 拉取,copy 文件,gulp 命令等,任何常规的,重复操作,你都可以自己抽象成一个角色,角色的目录构成如下
tasks/ 角色要执行的任务列表
handlers/ 角色执行中或执行后要执行的操作,比如改了配置文件要重启的操作,可以放这里面
library/ 角色执行中如果要执行某些脚本,可以放这里
files/ 角色部署的文件
templates/ 角色部署的模板
vars/ 角色执行的其它变量
defaults/ 角色需要的变量默认值,如果playbook 调用这个角色,不单独设置变量,就以这里面默认变量为准
meta/ 角色的元数据,包括该角色的依赖关系
我在根目录下建了一个 sample.yml作为playbook 的例子,大家可以参考一下。你可以一台服务器一个 yml,或者同一类型的服务用一个 yml 都可以
---
- hosts: test # 对应 hosts文件里的主机标签,该标签下放多个主机地址,这个脚本就会在多台主机上执行相关脚本,100台服务器同时安装一个软件的奥秘在此
vars: #这边推荐放一些公共变量,比如下面roles 都会用到的变量,如果只是某个 roles 执行时需要用到的私有变量,可以放 roles下面
roles:
- { role: yum, app: ["git", "curl", "python-pip"], tags: ["software"] }
- { role: docker, tags: ["docker"] }
- {
role: git, # git参照 roles 下面的 git
tags: ["git.devops"], # tag,playbook 执行的时候需要,可以打多个tag,用逗号隔开
project_name: "devops", #项目名
repository: "git@github.com:jackysong/docker_lnmp_swoole_efk_java.git", # 这边改成你自己的 git 地址
dest_path: "/opt/web/devops", # 服务器上目录
branch: "master", # git所在分支
}
- {
role: templates,
tags: ["nginx", "nginx.frontend"],
file: sites-enabled/vue.conf.j2,
path: "/opt/web/devops/dockerFile/nginx/sites-enabled/test.xx.com.conf",
nginx_domain: "test.xx.com",
nginx_path: "/opt/web/test",
}
tasks:
- name: restartnginx
shell: cd /opt/web/devops/dockerFile && docker-compose up -d --build nginx
tags:
- restartnginx
这就是一个完整的 playbook的例子,那怎么执行它呢?
ansible-playbook 脚本本地绝对路径 -t tags标签名(多个逗号隔开) -vv
例子
ansible-playbook ~/Work/docker_lnmp_swoole_efk_java/ansible/sample.yml -t git.devops,nginx.frontend -vv
- 扫码关注“火龙果编程”公众号,早日成为编程大神
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。