运维工具介绍
Ansible
Ansible优点:
Agentless (去中心化)
Stupied Simple (上手简单,学习曲线平滑)
SSH by default (安全,无需安装客户端)
YAML no code,定制剧本 (语法简单,维护方便)
自动工具衍生过程:
早期(很复杂,使用复杂,安装复杂,配置复杂):chef cfengine(C语言) func
中期(向轻量型发展):puppet (ruby)
近代(轻量工具): saltstack ansible (Python)
Ansible使用场景:
ls cd pwd top touch cp mv rm mkdir ln useradd userdel use* group* passwd* cat head tail tac
more less set ifconfig scp rsync
(1)文件传输:
mv cp scp rsync
(2)命令执行:
剩下的其它命令
安装http服务:
安装
配置
启动服务(本机的服务启动) tasks
让服务对用户提供服务(路由器配置,iptables)
Ansible企业实际应用场景分析:
(1)Dev开发环境
使用者:程序员
功能:程序员开发软件测试BUG的环境
管理者:千万不能是运维,一定是要程序员自已
(2)测试环境
使用者:qa测试工程师
功能:测试经过Dev环境测试通过的软件的功能
管理者:运维
备注:测试环境往往有多套(测试环境满足测试功能即可,不宜过多)
(1)测试同学希望测试环境有多套
公司的产品多产品线并发,即多个版本,意味着多个版本同步测试
(2)通常情况下,测试环境有多少套和产品线数量保持一样
(3)发布环境(代码发布机,有些公司堡垒机(安全屏障))
使用者:运维
功能:发布代码至生产环境
管理者:运维(有经验的)
发布机:往往需要有2台(主备)
(4)生产环境
使用者:运维,只能是运维(极少数情况下会开放权限给核心开发人员,
极少数公司将该环境权限完全开放给开发人员并让开发人员维护)
功能:对用户提供公司产品的服务
管理者:只能是运维
生产环境服务器数量:一般比较多,且应用非常重要。
往往需要自动工具协助部署配置应用。机器数量具体和公司业务规模相关。
(5)灰度环境(生产环境的一部分)
使用者:运维
功能:在全量发布代码前将代码的功能面向少量精准用户发布的环境
案例:
大家手头100台服务器,先发布其中的10台服务器,这10台服务器就是灰度服务器
管理者:只能是运维
为什么灰度环境:往往该版本功能变更较大,为保险起见特意先让一部分用户优化
体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器。
基于key认证:
ssh-keygen 然后一直回车 生成成功
ssh-cpio-id root@172.18.12.11(目标主机) 回车输入密码
然后使用ssh 172.18.12.11 验证,不需要输入密码即成功
Ansible安装
yum install ansible -y
ansible –verison ##查看安装的版本号
Ansible 1.9和2.0的区别:
(1) 最大区别是2.0的API调用方式发生变化,1.9原有的api调用方式在2.0不再支持
(2) 2.0增加了重要的功能: ansible-console
(3) Ansible 2.0的模块数量增加很多,500+个模块数量
Ansible命令集
/usr/bin/ansible # Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc # Ansible 模块功能查看工具
/usr/bin/ansible-galaxy # 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook # Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull # Ansible远程执行命令的工具(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault # Ansible 文件加密工具
/usr/bin/ansible-console # Ansible基于Linux Consoble界面可与用户交互的命令执行工具
Ansible高级自定义插件目录(需要python基础)
/usr/share/ansible_plugins
action ((可能使用较多))
callback (可能使用较多)
connection
filter
lookup
vars
调用ping模块检测172.16.0.68是否存活
ansible 172.16.0.68 -m ping
返回信息如下:
172.16.0.68 | success >> {
“changed”: false,
“ping”: “pong”
}
也可以这样使用: ansible “172.16.0.6” -m ping
– Ansible模块查看
ansible-doc -l
– Ansible command创建文件
ansible 172.16.0.6 -m command -a “touch /tmp/stanley.md”
有特殊符号的需使用shell 模块 : -m shell
Ansible命令详解:
Usage: ansible <host-pattern> [options]
Options:
-a MODULE_ARGS, –args=MODULE_ARGS
module arguments # 指定Ansible调用的模块
–ask-become-pass ask for privilege escalation password # Ansible su切换用户的时候使用该参数输入密码
-k, –ask-pass ask for SSH password # 以密码认证
–ask-su-pass ask for su password (deprecated, use become) # su的时候使用该 参数
-K, –ask-sudo-pass ask for sudo password (deprecated, use become) # sudo的时候
–ask-vault-pass ask for vault password # ansible-valut 加密文件
-B SECONDS, –background=SECONDS # 后台等待X秒
run asynchronously, failing after X seconds
(default=N/A)
-b, –become run operations with become (nopasswd implied)
–become-method=BECOME_METHOD
privilege escalation method to use (default=sudo),
valid choices: [ sudo | su | pbrun | pfexec | runas ]
–become-user=BECOME_USER
run operations as this user (default=None) # su到哪个用户
-C, –check don’t make any changes; instead, try to predict some
of the changes that may occur # 不执行命令只做命令执行检查
-c CONNECTION, –connection=CONNECTION
connection type to use (default=smart)
-e EXTRA_VARS, –extra-vars=EXTRA_VARS # 调用外部变量
set additional variables as key=value or YAML/JSON
-f FORKS, –forks=FORKS # Ansible一次命令执行并发的线程数
specify number of parallel processes to use
(default=5)
-h, –help show this help message and exit
-i INVENTORY, –inventory-file=INVENTORY # Ansible调用的Hosts文件,默认/etc/ansible/hosts
specify inventory host file
(default=/etc/ansible/hosts)
-l SUBSET, –limit=SUBSET # 限定主机列表中的某台机器执行
further limit selected hosts to an additional pattern
–list-hosts outputs a list of matching hosts; does not execute
anything else ## 列出主机列表中的主机
-m MODULE_NAME, –module-name=MODULE_NAME # Ansible 调用的执行模块
module name to execute (default=command)
-M MODULE_PATH, –module-path=MODULE_PATH
specify path(s) to module library (default=None)
-o, –one-line condense output
-P POLL_INTERVAL, –poll=POLL_INTERVAL
set the poll interval if using -B (default=15)
–private-key=PRIVATE_KEY_FILE
use this file to authenticate the connection
-S, –su run operations with su (deprecated, use become) #使用su和become结合使用
-R SU_USER, –su-user=SU_USER # su的话切换至哪个用户
run operations with su as this user (default=root)
(deprecated, use become)
-s, –sudo run operations with sudo (nopasswd) (deprecated, use
become) # 执行sudo命令
-U SUDO_USER, –sudo-user=SUDO_USER # sudo
desired sudo user (default=root) (deprecated, use
become)
-T TIMEOUT, –timeout=TIMEOUT # 执行命令的超时时间
override the SSH timeout in seconds (default=10)
-t TREE, –tree=TREE log output to this directory
-u REMOTE_USER, –user=REMOTE_USER
connect as this user (default=root)
–vault-password-file=VAULT_PASSWORD_FILE ## ansible-vault加密的密码文件
vault password file
-v, –verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging) # 显示详细信息 -vvvv
–version show program’s version number and exit ## 显示版本号
Ansiblie命令执行过程 (-vvvv)
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的
对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件 - 给文件+x执行
- 执行并返回结果
- 删除临时py文件,sleep 0退出
Ansible核心组件:
ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件;
INVENTORY:Ansible管理主机的清单;/etc/ansible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义; (ansible-doc -l获取Ansible的所有模块列表)
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用。
API:供第三方程序调用的应用程序编程接口;
ANSIBLE:该部分图中表示的不明显,组合INVENTORY、API、MODULES、PLUGINS的绿框大家可以理解为是ansible命令工具,其为核心执行工具;Ansible命令执行来源:
(1) USER,普通用户,即SA (SYSTEM ADMINISTRATOR)。
(2) CMDB API 调用
(3) PUBLIC/PRIVATE CLOUD API调用
(4)USER-> Ansible Playbook -> Ansibile
Ansible-playbook(剧本):
a> 将已有编排好的任务集写入Ansible-Playbook
b> 通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行。Ansible 和 Ansible-playbook的使用场景:
Ansible 主要用于临时命令使用场景
Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划。Ansible主要操作对象:
HOSTS(主要学习)
NETWORKINGAnsible组件调用关系:(大家自己总结)
Ansible 实战演练
ansible 172.16.0.6* -m command -a ‘ls /tmp’
– Ansible group 定义:
[groupname] 定义Inventory 组,后面可跟ip ,也可跟hostname
[mageduweb]
172.16.0.68
172.16.0.69
Ansible 配置文件(绝大多数配置保持默认就好)
(1)[defaults]
inventory = /etc/ansible/hosts # 主机列表配置文件
library = /usr/share/my_modules/ # 库文件存放目录
remote_tmp = $HOME/.ansible/tmp # 生成的临时py命令文件存放在远程主机的目录
local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
forks = 5 # 默认并发数
poll_interval = 15 # 默认的线程池
sudo_user = root # 默认sudo 用户
ask_sudo_pass = True
ask_pass = True
transport = smart
remote_port = 22
module_lang = C
module_set_locale = False
host_key_checking = False ### 检查对应服务器的host_key
(2)[privilege_escalation]
(3)[paramiko_connection]
(4)[ssh_connection]
(5)[accelerate]
(6)[selinux]
(7)[colors]
Ansible模块:
– command模块:使用ansible自带模块执行命令 如果要用 > < | & ‘ ‘ 使用shell模块 core
ansible mageduweb -m command -a ‘ls /tmp’
ansible mageduweb -m command -a ‘cat /tmp/stanley.md | grep echo’ ##执行失败,即使不返回失败结果也不会正常生效
– creates
a filename or (since 2.0) glob pattern, when it already exists, this
step will not be run.
[Default: None]
– shell 模块: 调用bash执行命令 类似 cat /tmp/stanley.md | awk -F’|’ ‘{print $1,$2}’ &> /tmp/stanley.txt 这些复杂命令,即使使用shell也会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器(执行Ansible命令的机器往往称为:Master机或者中控机或者堡垒机)。
ansible mageduweb -m shell -a ‘echo magedu | passwd –-stdin stanley’
– copy: 复制本地文件至远程服务器,并且能够改属性等
ansible mageduweb -m copy -a ‘src=/root/125.sh dest=/root/p.sh owner=stanley backup=no mode=600’
cron:定时执行任务的模块
* * * *
分 时 日 月 周
// 增加一条crontab
ansible mageduweb -m cron -a ‘minute=”/5″ job=”/usr/sbin/ntpdate 172.16.0.1 &> /dev/null” name=”SynctimeStanley”‘
// 删除名为SynctimeStanley的crontab任务
ansible mageduweb -m cron -a ‘state=absent name=”SynctimeStanley”‘
– fetch模块: 从远程服务器拉取文件至本机,
只能fetch文件,不能fetch目录,如果拉目录,先tar/zip 再拉到本机即可
ansible mageduweb -m fetch -a ‘src=/root/p.sh dest=/root/ppp.sh’
远程主机目录 本地主机目录
– file模块: 设置文件属性
ansible mageduweb -m file -a ‘path=/root/p.sh mode=755’ # 设置文件属性,
ansible mageduweb -m file -a ‘src=/root/p.sh dest=/tmp/pp.sh mode=644
state=touch’ # 复制文件并且设置文件属性
create a directory if it doesn’t exist #建立目录
– file: path=/etc/some_directory state=directory mode=0755
ansible 172.18.12.12 -m hostname -a ‘name={{ hostname }}{{ http_port }}’
#定义主机名,自己的变量优先于组变量
– pip 模块: Python的包管理工具
ansible mageduweb -m pip -a ‘name=pip2’
– ping 模块: 检测主机存活
– yum模块: 安装软件
ansible mageduweb -m yum -a ‘name=httpd state=latest’ //安装httpd包
ansible mageduweb -m shell -a ‘ss -tnl | grep 80 ‘
ansible mageduweb -m command -a ‘ss -tnl ‘
ansible mageduweb -m command -a ‘systemctl start httpd.service’
ansible mageduweb -m command -a ‘systemctl stop httpd.service’
– service模块:
ansible mageduweb -m service -a ‘name=httpd state=started’
ansible mageduweb -m service -a ‘name=httpd state=stopped’
– user模块:
ansible mageduweb -m user -a ‘name=magedu home=/tmp/magedu/ shell=/bin/bash uid=2000 comment=”test user” group=root’
Ansible系列命令
ansible ansible-doc ansible-playbook ansible-vault
ansible-console ansible-galaxy ansible-pull
– ansible-galaxy
用法:
ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [–help] [options] …
去 https://galaxy.ansible.com/ 上传或下载优秀的Playbook(roles)
* 列出所有已安装的galaxy
ansible-galaxy list
* 安装galaxy
ansible-galaxy install geerlingguy.redis
* 删除galaxy
ansible-galaxy remove geerlingguy.redis
– ansible-playbook用法
Usage: ansible-playbook playbook.yml
– ansible-valut用法
Usage: ansible-vault [create|decrypt|edit|encrypt|rekey|view] [–help] [options] vaultfile.ym
ansible-vault encrypt hello.yml # 加密
ansible-vault decrypt hello.yml # 解密
ansible-vault view hello.yml # 查看
– ansible-console用法
root@mageduweb (2)[f:10] $ service name=httpd state=stopped
root@mageduweb (2)[f:10] $
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$
设置并发数: forks n 例如: forks 10
切换组: cd groupname 例如: cd mageduweb
列出当前组主机列表: list
列出所有的内置模块: ?
执行状态:
绿色: 执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
ansible all -m ping -u bruce -b –become-user batman
Ansible-playbook 剧本
—
– hosts: mageduweb
remote_user: root
tasks:
– name: add group nginx
user: name=nginx state=present
– name: add user nginx
user: name=nginx state=present group=nginx
– name: Install Nginx
yum: name=nginx state=present
– name: Start Nginx
service: name=nginx state=started enabled=yes
* 安装http脚本实现:
!/bin/bash
安装Apache
yum install –quiet -y httpd httpd-devel # command: yum install –quiet -y httpd httpd-devel
复制配置文件
cp /path/to/config/httpd.conf /etc/httpd/conf/httpd.conf -f
cp/path/to/httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf -f
启动Apache,并设置开机启动
service httpd start
chkconfig httpd on
* 安装httpd ansible-playbook实现
—
– hosts: all
tasks:
– name: “安装Apache”
command: yum install –quiet -y httpd httpd-devel
– name: “复制配置文件”
command: cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
command: cp /tmp/httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf
– name: “启动Apache,并设置开机启动”
command: service httpd start
command: chkconfig httpd on
* Playbook 核心组件
Hosts #执行的远程主机列表
Tasks #任务集
Varniables #内置变量或自定义变量在playbook中调用
Templates #模板,可替换模板文件中的变量及可实现一些简单逻辑的文件。
Handlers #和nogity结合使用,为条件触发操作,满足条件方才执行否则不执行
* tags 标签
指定某条任务执行
ansible-playbook –tags=user useradd.yml
—
– hosts: mageduweb
remote_user: root
tasks:
– name: add group nginx
tags: user
user: name=nginx state=present
– name: add user nginx
user: name=nginx state=present group=nginx
– name: Install Nginx
yum: name=nginx state=present
– name: Start Nginx
service: name=nginx state=started enabled=yes
* handlers 和 notify 结合使用触发条件,让playbook在满足一定触发条件时才去执行某条task
—
– hosts: mageduweb
remote_user: root
tasks:
– name: add group nginx
tags: user
user: name=nginx state=present
– name: add user nginx
user: name=nginx state=present group=nginx
– name: Install Nginx
yum: name=nginx state=present
– name: config
copy: src=/root/config.txt dest=/etc/nginx/config.txt
notify:
– Restart Nginx
– Check Nginx Process
handlers:
– name: Restart Nginx
service: name=nginx state=restarted enabled=yes
– name: Check Nginx Process
shell: ss -tnl | grep 80
playbook 变量使用
- 变量来源:
(1)ansible setup facts远程主机的所有变量都可以用
(2)自定义变量
a. 在/etc/ansible/hosts 定义变量,在主机组中的主机单独定义,优先级高于组中公共变量
b. 在/etc/ansible/hosts 定义变量,针对主机组中的所有主机集中定义变量
c. 通过命令行指定变量,优先级最高 - 变量调用方式:
{{ variable_name }} 通过{{ }} 调用变量,且变量和{}两头之间必须有空格
额外介绍的是:
在playbook中调用变量时,有时”{{ variable_name }}”需要要双引号引起来方可生效,有时候必须不能用””引起来 - 变量定义:
key=value
例:
http_port=80
templates
功能:
根据模块文件动态生成对应的配置文件
(1) templates文件必须存放于目录名为templates下,且命名为 .j2 结尾
(2)yaml/yml playbook文件需和templates目录平级,目录结构如下:
./
├── temnginx.yml
└── templates
└── nginx.conf.j2
* template 流语句语法
案例1:
// templates/nginx.conf.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost }}
}
{% endfor %}
// temnginx.yml
—
– hosts: mageduweb
remote_user: root
vars:
nginx_vhosts:
– web1
– web2
– web3
# nginx_vhosts:
# – listen: 8080
tasks:
– name: template config to remote hosts
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
* 生成的结果:
server {
listen web1
}
server {
listen web2
}
server {
listen web3
}
案例2:
shell脚本与Jinja语法对比:
— shell脚本中写法
for i in {1..10}
do
con
done
if [ xx ];then
con
elif
con
else
con
fi
— Jinja写法:
// templates/nginx.conf.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
}
{% endfor %}
* 生成的结果
server {
listen 8080
}
* playbook调用文件
// temnginx.yml
—
– hosts: mageduweb
remote_user: root
vars:
nginx_vhosts:
– listen: 8080
tasks:
– name: template config to remote hosts
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
* 案例3
// temnginx.yml
—
– hosts: mageduweb
remote_user: root
vars:
nginx_vhosts:
– web1:
listen: 8080
server_name: “web1.magedu.com”
root: “/var/www/nginx/web1/”
– web2:
listen: 8080
server_name: “web2.magedu.com”
root: “/var/www/nginx/web2/”
– web3:
listen: 8080
server_name: “web3.magedu.com”
root: “/var/www/nginx/web3/”
## 案例1
# nginx_vhosts:
# – web1
# – web2
# – web3
## 案例2
tasks:
– name: template config to remote hosts
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
// templates/nginx.conf.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
server_name {{ vhost.server_name }}
root {{ vhost.root }}
}
{% endfor %}
* 生成结果:
server {
listen 8080
server_name web1.magedu.com
root /var/www/nginx/web1/
}
server {
listen 8080
server_name web2.magedu.com
root /var/www/nginx/web2/
}
server {
listen 8080
server_name web3.magedu.com
root /var/www/nginx/web3/
}
* 案例4
// templates/nginx.conf.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost.listen }}
{% if vhost.server_name is defined %}
server_name {{ vhost.server_name }}
{% endif %}
root {{ vhost.root }}
}
{% endfor %}
// temnginx.yml
—
– hosts: mageduweb
remote_user: root
vars:
nginx_vhosts:
– web1:
listen: 8080
#server_name: “web1.magedu.com”
root: “/var/www/nginx/web1/”
– web2:
listen: 8080
server_name: “web2.magedu.com”
root: “/var/www/nginx/web2/”
– web3:
listen: 8080
server_name: “web3.magedu.com”
root: “/var/www/nginx/web3/”
## 案例1
# nginx_vhosts:
# – web1
# – web2
# – web3
## 案例2
tasks:
– name: template config to remote hosts
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
* 执行命令
ansible-playbook temnginx.yml
* 生成的结果
server {
listen 8080
root /var/www/nginx/web1/
}
server {
listen 8080
server_name web2.magedu.com
root /var/www/nginx/web2/
}
server {
listen 8080
server_name web3.magedu.com
root /var/www/nginx/web3/
}
ansible-playbook when条件判断
—
– hosts: mageduweb
remote_user: root
tasks:
– name: add group nginx
tags: user
user: name=nginx state=present
– name: add user nginx
user: name=nginx state=present group=nginx
– name: Install Nginx
yum: name=nginx state=present
– name: restart Nginx
service: name=nginx state=restarted
when: ansible_distribution_major_version == “6”
ansible-playbook with_items 列表
—
– hosts: mageduweb
remote_user: root
tasks:
– name: create rsyncd file
copy: src={{ item }} dest=/tmp/{{ item }}
with_items:
– a
– b
– c
– d
– name: yum install httpd
yum: name={{ item }} state=present
with_items:
– apr
– apr-util
– httpd
* with_itmes 嵌套子变量
—
– hosts: mageduweb
remote_user: root
tasks:
– name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
– { name: ‘testuser1’ , groups: ‘wheel’}
– { name: ‘testuser2’ , groups: ‘root’}
ansible-playbook 变量定义其它内容
Roles (角色)
针对大型项目使用Roles进行编排。
调用角色的.yml的文件必须和roles同级目录
roles目录结构:
playbook.yml
roles/
project/
tasks/
files/
vars/ # 不经常用
default/ # 不经常用
templates/
handlers/
meta/ # 不经常用
userconf.yml
roles/
└── nginx
├── files
│ └── main.yml
├── tasks
│ ├── groupadd.yml
│ ├── install.yml
│ ├── main.yml
│ ├── restart.yml
│ └── useradd.yml
└── vars
└── main.yml
saltstack
puppet
class 面向对象,写程序一个较为高级的使用。
* 完整的roles架构
// nginx-role.yml 顶层任务调用yml文件
—
0- hosts: mageduweb
remote_user: root
roles:
– role: nginx
~
cat roles/nginx/tasks/main.yml
—
– include: groupadd.yml
– include: useradd.yml
– include: install.yml
– include: restart.yml
– include: filecp.yml
cat roles/nginx/tasks/install.yml
—
– name: Install Nginx
yum: name=nginx state=present
ls roles/nginx/files/
main.yml tom.md
* roles playbook tags使用
ansible-playbook –tags=”nginx,httpd,mysql” nginx-role.yml
// nginx-role.yml
—
– hosts: mageduweb
remote_user: root
roles:
– { role: nginx ,tags: [ ‘nginx’, ‘web’ ] }
– { role: httpd ,tags: [ ‘httpd’, ‘web’ ] }
– { role: mysql ,tags: [ ‘mysql’, ‘db’ ] }
– { role: marridb ,tags: [ ‘mysql’, ‘db’ ] }
– { role: php }
—
– hosts: mageduweb
remote_user: root
roles:
– { role: nginx ,tags: [ ‘nginx’, ‘web’ ] ,when: ansible_distribution_major_version == “6” }
– { role: httpd ,tags: [ ‘httpd’, ‘web’ ] }
– { role: mysql ,tags: [ ‘mysql’, ‘db’ ] }
– { role: marridb ,tags: [ ‘mysql’, ‘db’ ] }
– { role: php }
其它自己研究的功能
* 委任(指定某一台机器做某一个task)
delegate_to
local_action (专指针对ansible命令执行的机器做的变更操作)
* 交互提示
prompt
* 暂停(java)
wait_for
* Debug
debug: msg=”This always executes.”
* Include
* Template 多值合并
* Template 动态变量配置
推荐资料
http://galaxy.ansible.com
https://galaxy.ansible.com/explore#/
http://github.com/
http://ansible.com.cn/
https://github.com/ansible/ansible
https://github.com/ansible/ansible-examples
原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/76792