ansible cron的handler是怎么触发的

2533人阅读
ansible(5)

转载自:http://xdays.me/ansible状态管理.html
就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件,叫做playbook。所有这些类似的概念的东西都是让你用一种更简单的语言(而不是用脚本)来描述你的服务应该是什么样子的,然后这些工具根据你的描述将服务器变成你希望的样子。有了这么一层抽象后,服务部署和配置就变得更加的跨平台了,也提高了可复用性。但请注意,playbook不是万能的,因为playbook底层是在用模块来完成任务,因为模块有限,所以很多时候还是需要写shell脚本(ansible提供了script模块)来完成。
提前说明下要使用ansible的状态管理你需要学习哪些东西:
YAML语法,playbook用到的语法很少,这部分学习成本很低;
playbook的基本指令,这是基础;
模块的用法,这种重点;
jinja2语法,无论是在playbook还是在template里都支持jinja2语法,这是另一个重要的基础,关于jina2的语法不在本文范围内,具体参考。
yaml,数据交换格式,类似json和xml,但是比它们更具有可读性,通常用于作为程序的配置文件。ansible的playbook配置使用yaml格式来表达。
task,由模块来完成的一个单位任务,如修改文件或者启动服务
play,一组task的集合,ansible会自上而下执行
handler,task可以触发一定的事件,而处理该事件的task即为handler
host,应用play的主机范围
user,在这些主机上以什么用户运行playbook
role,角色,一组playbook以及和其配合的元素(vars, files等)的集合
- hosts: webservers
http_port: 80
max_clients: 200
remote_user: root
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
- restart apache
- name: ensure apache is running
service: name=httpd state=started
- name: restart apache
service: name=httpd state=restarted
playbook是用yaml语法编写的,但你只需要了解如下几条简单的规则即可:
文档以---开头
-代表列表,也可以写成[a,
:代表字典,也可以写成{a:
如果字符冲突用双引号把对应字符串引起来
定义playbook的执行主机范围,与命令模式下的ansible匹配规则一样。
remote_user
定义playbook的执行用户,执行任务也可以定义在任务级别,如:
- name: test connection
remote_user: yourname
注意:也可以用sudo指令来说明所有或者部分任务以sudo方式执行
vars_files
定义变量文件
定义任务列表,由模块来执行完成
定义playbook或者task的名称
任务执行结果如果是发生更改了的则触发定义在handler的任务执行
定义被触发的任务列表,由模块来执行完成
能包含的包括task,handler和playbook
可以在include的时候传递变量
- include: wordpress.yml
remote_user: timmy
some_list_variable:
定义主机对应的角色,角色是一组按照目录组合的配置,ansible自动完成文件搜索,去找对应目录下的main.yml文件来执行,具体目录结构如下:
defaults/ 默认的变量保存在这个目录下
files/ 文件
templates/ 模板
tasks/ 任务
handlers/ 处理器
vars/ 变量
meta/ 角色本身的信息,如通过dependencies指令指定依赖
library/ 私有模块
另外,你也可以给role传递变量。
这里重点说明下,role是使ansible的状态管理可复用很重要的一个概念,很多时候你只需要在自己的playbook里引用下别人的role即可,大家写的role可以相互共享,相互参考。官方也提供了ansible-galaxy这个命令用于安装社区分享的role,具体可参考
pre_task和post_task
在role被应用之前和之后执行的任务列表
变量本来是个很简单的东西,但是变量在Playbook里是个很复杂的,其复杂的原因在于你不知道它从哪里来到哪里去了,下面我们也从这两个方面来剖析它。
在group和host中都可以定义变量,示例如下:
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
[southeast:vars]
some_server=foo.
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2
vars和vars_files
在playbook的开头可以用这俩指令来定义一些初始变量,这个可以参考上文中的playbook的demo
通过在playbook的include指令可以其他task的时候,可以给文件传递变量,示例如下:
- include: wordpress.yml user=timmy
当给一个主机应用角色的时候可以传递变量,然后在角色内使用这些变量,示例如下:
- hosts: webservers
- { role: foo_app_instance, dir: '/opt/a',
port: 5000 }
默认在每次执行playbook前都获取设备信息,所有这些信息都可以作为变量应用到playbook中,要查看这些变量可以执行:
ansible cloud -m setup
把任务的输出定义为变量,然后用于其他任务,示例如下:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True
ansible内置了一些变量以方便主机之间相互调用各自的变量。这些变量包括:
* hostvars允许你访问另一个主机的变量,当然前提是ansible已经收集到这个主机的变量了:
group_names是当前主机所在的group列表
groups是所有inventory的group列表
inventory_hostname是在inventory里定义的主机名
play_hosts是当前的playbook范围内的主机列表
inventory_dir和inventory_file是定义inventory的目录和文件
在运行playbook的时候也可以传递一些变量供playbook使用,示例如下:
ansible-playbook release.yml --extra-vars &hosts=vipers user=starbuck&
也可以从json文件里读取变量,示例如下;
ansible-playbook main.yml -e &@vars.json&
所有变量都可以在playbook或者jinja2模板中通过{{
varname }}中使用。另外,当变量和jinja2的管道配合起来的时候能提供各种灵活的条件判断和变量处理。具体看下边两个例子。
如果第一个任务执行失败了才会执行第二个任务,可以这么写:
- shell: /usr/bin/foo
register: result
ignore_errors: True
- debug: msg=&it failed&
when: result|failed
去重一个列表,可以这么写:
{{ list | uniq }}
变量的优先级
-e 命令行指定的最高
inventory文件定义的变量次之,其实inventory文件也分全局,group级别的和hosts级别的变量定义
fact变量次之
角色的default变量优先级最低
可用于task,role和include,在满足条件时task才会被执行。至于when指令后跟的逻辑表达式也是标准的逻辑表达式,示例如下:
- shell: echo &only on Red Hat 6, derivatives, and later&
when: ansible_os_family == &RedHat& and ansible_lsb.major_release|int &= 6
- shell: echo &This certainly is epic!&
when: epic is defined
用with_items可以遍历一个列表,注意这里只会遍历一层。示例如下:
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
用with_nested可以遍历一个列表,注意这里会遍历多层,直到最内层。示例如下:
- name: give users access to multiple databases
mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
with_nested:
- [ 'alice', 'bob', 'eve' ]
- [ 'clientdb', 'employeedb', 'providerdb' ]
用with_dict可以遍历一个字典,用key和value来表示。示例如下:
name: Alice Appleworth
telephone: 123-456-7890
name: Bob Bananarama
telephone: 987-654-3210
playbook文件
- name: Print phone records
debug: msg=&User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})&
with_dict: users
文件通配符循环
用with_fileglob可以获取本地文件列表。示例如下:
# copy each file over that matches the given pattern
- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
with_fileglob:
- /playbooks/files/fooapp/*
对齐的列表
用with_together可以达到类似python里的zip函数的功能。示例如下:
变量文件:
alpha: [ 'a', 'b', 'c', 'd' ]
[ 1, 2, 3, 4 ]
playbook文件
- debug: msg=&{{ item.0 }} and {{ item.1 }}&
with_together:
子元素循环
with_subelements这个比较费解。
数字序列循环
可以通过with_sequence来生成一个数字序列,其参数包括:
start起始数字
end结束数字
stride步长
format输出的字符串
示例如下:
- hosts: all
# create groups
- group: name=evens state=present
- group: name=odds state=present
# create some test users
- user: name={{ item }} state=present groups=evens
with_sequence: start=0 end=32 format=testuser%02x
# create a series of directories with even numbers for some reason
- file: dest=/var/stuff/{{ item }} state=directory
with_sequence: start=4 end=16 stride=2
# a simpler way to use the sequence plugin
# create 4 groups
- group: name=group{{ item }} state=present
with_sequence: count=4
通过with_random_choice从一个序列里随机取一个元素。示例如下:
- debug: msg={{ item }}
with_random_choice:
- &go through the door&
- &drink from the goblet&
- &press the red button&
- &do nothing&
这种循环由三个指令完成:
* until是一个条件表达式,如果满足条件循环结束
* retry是重试的次数
* delay是延迟时间
示例如下:
- action: shell /usr/bin/foo
register: result
until: result.stdout.find(&all systems go&) != -1
retries: 5
循环直到找到文件
与with_items类似,只是with_first_found找到列表里的第一个文件就会终止循环。示例如下:
- name: INTERFACES | Create Ansible header for /etc/network/interfaces
template: src={{ item }} dest=/etc/foo.conf
with_first_found:
- &{{ansible_virtualization_type}}_foo.conf&
- &default_foo.conf&
循环一个task的输出
with_lines指令后跟一个命令,ansible会遍历命令的输出。示例如下:
- name: Example of looping over a command result
shell: /usr/bin/frobnicate {{ item }}
with_lines: /usr/bin/frobnications_per_host --param {{ inventory_hostname }}
带索引地循环列表
与with_items类似,with_indexed_items会把列表索引和对应元素放到一个列表里。示例如下:
- name: indexed loop demo
debug: msg=&at array position {{ item.0 }} there is a value {{ item.1 }}&
with_indexed_items: some_list
扁平化循环列表
with_flattened会先拍扁一个列表,然后执行with_items。示例如下:
- name: flattened loop demo
yum: name={{ item }} state=installed
with_flattened:
- ['nc','git', ['nmap', 'vim']]
配合register循环列表
register注册一个变量后,可以配合with_items来遍历变量结果。示例如下:
- shell: echo &{{ item }}&
with_items:
register: echo
- name: Fail if return code is not 0
msg: &The command ({{ item.cmd }}) did not have a 0 return code&
when: item.rc != 0
with_items: echo.results
Posted by&admin&Thu
19 June 2014&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:343256次
积分:5424
积分:5424
排名:第3403名
原创:218篇
转载:16篇
评论:110条
(1)(3)(16)(22)(30)(22)(20)(10)(15)(5)(2)(4)(17)(25)(7)(1)(4)(2)(4)(25)一、基础介绍
是新出现的自动化运维工具,基于开发,集合了众多运维工具(、、、、)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是所运行的模块,只是提供一种框架。主要包括:
、连接插件:负责和被监控端实现通信;
、:指定操作的主机,是一个配置文件里面定义监控的主机;
、各种模块核心模块、模块、自定义模块;
、借助于插件完成记录日志邮件等功能;
、:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
2、总体架构
、:不需要在被管控主机上安装任何客户端;
、:无服务器端,使用时直接运行命令即可;
、:基于模块工作,可使用任意语言开发模块;
、,:使用语言定制剧本;
、:基于工作;
、:可实现多级指挥。
4、优点、轻量级,无需在客户端安装,更新时,只需在操作机上进行一次更新即可;、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;、使用编写,维护更简单,语法过于复杂;、支持。
、任务执行流程
、以上内容大多是基于他人分享的基础上总结而来,学习借鉴之用;
、本次安装基于 CentOS 6.4系统环境。
二、基础安装与配置
、基础安装
将头文件拷贝到标准目录,以避免编译时,找不到所需的头文件
备份旧版本的,并符号链接新版本的
修改脚本,使其指向旧版本的,已避免其无法运行
、模块安装
、模块安装
、模块安装
、模块安装
、模块安装
、模块安装
、免密钥登录设置
生成公钥私钥
写入信任文件(将分发到其他服务器,并在所有服务器上执行如下指令):
主机组定义
、简单测试
说明:第一次运行时,需要输入一下“”【进行公钥验证】,后续无需再次输入。
、常用模块使用
用来查看远程主机的一些基本信息
用来测试远程主机的运行状态
设置文件的属性
相关选项如下:
:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:
:定义文件目录的属组
:定义文件目录的权限
:定义文件目录的属主
:必选项,定义文件目录的路径
:递归设置文件的属性,只对目录有效
:被链接的源文件路径,只应用于的情况
:被链接到的路径,只应用于的情况
:如果目录不存在,就创建目录
:即使文件不存在,也不会被创建
:创建软链接
:创建硬链接
:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
:删除目录、文件或者取消链接文件
远程文件符号链接创建
远程文件信息查看
远程文件符号链接删除
远程文件信息查看
说明:如上显示,代表文件或链接已经删除。
复制文件到远程主机
相关选项如下:
:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:
:用于替代“”,可以直接设定指定文件的值
:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
:递归设定目录的权限,默认为系统默认权限
:如果目标主机包含该文件,但内容不同,如果设置为,则强制覆盖,如果为,则只有当目标主机的目标位置不存在该文件时,才复制。默认为
:所有的模块里的选项都可以在这里使用
:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“”来结尾,则只复制目录里的内容,如果没有使用“”来结尾,则包含目录在内的整个内容全部复制,类似于。
将本地文件“”复制到远程服务器
远程文件信息查看
在远程主机上执行命令
相关选项如下:
:一个文件名,当该文件存在,则该命令不执行
:要执行的指令
:在执行指令之前,先切换到该目录
:一个文件名,当该文件不存在,则该选项不执行
:切换来执行指令,该执行路径必须是一个绝对路径
切换到某个执行指定的指令,参数与相同。
与不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:
先在本地创建一个脚本
将创建的脚本文件分发到远程
、更多模块
其他常用模块,比如:、、、就不一一例举,可以结合自身的系统环境进行测试。
:系统服务管理
:计划任务管理
:软件包安装管理
:使用同步文件
:系统用户管理
:系统用户组管理
更多模块可以参考:
国内的一个镜像站点,避免被墙
、一些概念补充
playbook的组成:playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行;所谓无非是调用的一个,而在模块参数中可以使用变量;模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致;
:中的各任务按次序逐个在中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在顺序运行某时,如果中途发生错误,所有已执行任务都将回滚,因此,在修改后重新执行一次即可;
组成:每个都应该有其,用于的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供,则的结果将用于输出;
指定的执行机制:“”这个可用于在每个的最后被触发,在中列出的操作称为,仅在所有的变化发生完成后一次性地执行指定操作。
三、后续工作
1、深入学习ansible的以及扩展模块;
结合业务环境,初步实现基础监控,以取代目前调用自动化部署平台的方式;
尝试自动化运维工具,并将其与进行对比。
一些学习资料:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11788次
排名:千里之外
原创:11篇
转载:11篇
(3)(4)(1)(2)(2)(1)(2)(1)(1)(1)(2)(1)(3)linux(65)
ansible简介ansible是与puppet、saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet、saltstack那样都需要客户端。与puppet类似,ansible也支持丰富的功能:批量执行支持模块化,支持playbook(相比puppet还是弱些)上手容易(puppet上手有门槛)权限控制安装方法为:yum -y install ansible或pip install ansible。使用方法在管理集群时,ansible需要先配置集群hosts列表以方便集群操作$ cat /etc/ansible/hosts
# 配置密码登陆,需要ansible本机安装sshpass
192.168.213.135 ansible_ssh_user=root ansible_ssh_pass=root
# 密钥登陆
172.17.0.2:49154 ansible_ssh_user=root
172.17.0.4:49155 ansible_ssh_user=root
172.17.0.10
测试连接登陆是否OK$ ansible local -m ping
192.168.213.135 | success && {
&changed&: false,
&ping&: &pong&
ansible常见用法为ansible host-pattern -m 模块 -a 命令,host-pattern类似于简化的正则表达式,而模块可以通过ansible-doc -l命令来查询。下面是一些常用模块的使用方法:安装软件:ansible local -m apt -a ‘name=gcc state=present’或者ansible local -m yum -a “name=nmap state=installed”执行命令:ansible local -m shell -a ‘uptime’拷贝文件:ansible local -m copy -a “src=/tmp/server dest=/tmp/server”文件属性:ansible local -m file -a “dest=/tmp/server mode=755 owner=root group=root”*playbookplaybook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。&一个简单的playbook配置如下:- hosts: local
remote_user: root
- name: echo hi
shell: echo &hi&
ansible还支持设置handlers,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下:# playbook.yml
- hosts: local
# hosts中指定
remote_user: root
# 如果和当前用户一样,则无需指定
- name: whoami
copy: src=~/hosts dest=~/hosts.dest
本地拷贝到远端
# 如果copy执行完之后~/hosts.dest文件发送了变化,则执行
- clear copy
# 调用handler
- name: clear copy
shell: 'mv ~/hosts.dest hosts.del'
# 假装删除
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:387189次
积分:8509
积分:8509
排名:第1569名
原创:472篇
转载:126篇
评论:17条你的位置: >
> 自动化工具 ansible中文指南
这两天花了点时间看了下ansible的文档,也稍稍体验了下,因为是全英文的文档,看起来有些慢,因此想着把常用的东西写篇文章提炼下,这样以后也就方便查阅,同时也方便那些想快速使用ansible的人,能够快速的上手。于是有了这篇文章,命名为“ansible使用指南”。有点标题党,有遗漏的地方欢迎补充^_^
1. 什么是ansible
ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。
所有的这几个目标本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。就像我之前有介绍过的Fabric,以及我们基于Fabric开发的自动化应用部署的工具:
。都是做了这么个事——批量的在远程服务器上执行命令 。
那么fabric和ansible有什么差别呢?简单来说fabric像是一个工具箱,提供了很多好用的工具,用来在Remote执行命令,而Ansible则是提供了一套简单的流程,你要按照它的流程来做,就能轻松完成任务。这就像是库和框架的关系一样。
当然,它们之间也是有共同点的——都是基于
开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
2. 快速安装
上面简单介绍了下这是个什么东西,怎么安装呢?也很简单,因为ansible是python开发的,因此可以这么安装:
sudo esay_install ansible
sudo pip install ansible
你也可以从github上clone最新版本,然后安装。
另外需要注意的是,控制服务器(Master)需要安装Python2.6/7,windows上无法使用ansible。被管理的服务器(Managed Node)需要安装Python2.4以上的版本,如果低于2.5,需要安装python-simplejson。
安装完成之后,先来配置下配置项——.ansible.cfg。ansible执行的时候会按照以下顺序查找配置项:
* ANSIBLE_CONFIG (环境变量)
* ansible.cfg (当前目录下)
* .ansible.cfg (用户家目录下)
* /etc/ansible/ansible.cfg
还有一个重要的配置是hosts的配置,所有的远程主机需要在hosts中配置,可以分组。当然hosts也可以执行是指定。先来一个简单的例子,在家目录下新建一个hosts文件:
然后在终端执行:
$ ansible -i ~/hosts all -a 'who'
# 结果如下:
127.0.0.1 | success | rc=0 &&
the5fire console
Jan 20 19:50
the5fire ttys018
Feb 22 15:35
(localhost)
这是一条ad-hoc命令——临时执行命令,ad-hoc是ansible里的一个概念, 在上面命令中就是 -a ,具体稍后再说。命令中的all是值hoss中的所有服务器,当然也可以通过 ansible -i ~/hosts local -a'who' 这样根据组名指定服务器。
再说到ansible.cfg的配置,默认ansible执行时会从该配置中加载hosts配置,因此可以通过修改.ansible.cfg来指定默认的hosts文件地址:
# .ansible.cfg
[defaults]
hostfile=/Users/the5fire/hosts
这样下次执行,就不需要 -i 参数了。
ad hoc——临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。对于复杂的命令后面会说playbook。
那么这个Ad-Hoc命令怎么用呢?上面已经简单的示范了下。在ansible中还有一个Module(模块)的概念,这个模块可以理解为一个库,所有的命令都需要通过模块来执行,比如上面的那个命令: ansible-i ~/hosts all -a 'who' ,其实是调用了默认的command模块: ansible -i ~/hosts all -mcommand -a 'who' ,除了command模块还有其他很多模块,比如你就想ping下这个服务器是不是还存在可以通过ping模块: ansible -i ~/hosts all -m ping 。
还有几个参数需要记录下:
-u username
# 指定ssh连接的用户名
# 指定并发数
--sudo [-K]
如果需要root权限执行的话,-K参数是用来输入root密码的
你可以通过各种模块来批量完成某个包的安装,或者其他什么需要的操作。 更多模块可以看官网文档:
关于Ad-Hoc的更多内容参考这里:
5. 简单Playbook
上面的ad hoc是指执行一条临时的不需要保存的命令,那么复杂的命令怎么执行呢?因此也就有了playbook这个命令: ansible-playbook 。
playbook(剧本),顾名思义,就是需要定义一个脚本或者说配置文件,然后定义好做什么。一个简单的playbook是这样的,把当前用户名输出到whoami.rst文件中:
# playbook.yml
- hosts: local
# hosts中指定
remote_user: the5fire
# 如果和当前用户一样,则无需指定
- name: whoami
shell: 'whoami & whoami.rst'
执行完这个命令后,你可以在local所代表的服务器的用户目录下发现这么个文件。说道这里,要停一下。这个配置文件是yaml格式的,因此你可能需要去了解下YAML:
简单解释下上面的playbook,hosts后面根据local是从hosts中读取的,tasks是是关键词,指明了要执行哪些任务;下面的name是任务的名称,shell是前面提到的module(模块),单引号中是命令。
除了tasks之外,还有一个handlers的命令,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下:
# playbook.yml
- hosts: local
# hosts中指定
remote_user: the5fire
# 如果和当前用户一样,则无需指定
- name: whoami
copy: src=~/hosts dest=~/hosts.dest
本地拷贝到远端
# 如果copy执行完之后~/hosts.dest文件发送了变化,则执行
- clear copy
# 调用handler
- name: clear copy
shell: 'mv ~/hosts.dest hosts.del'
# 假装删除
上面只是一个演示,再来一个真实的功能——在local服务器上,从git上clone下来我的blog源码,然后创建虚拟环境,创建数据库,最后运行:
# deploy-blog-simple.yml
- hosts: local
# hosts中指定
remote_user: the5fire
# 如果和当前用户一样,则无需指定
- name: check out django_blog
git: dest=~/demos/django_selfblog repo=/the5fire/django_selfblog
update=yes
- name: make virtualenv
shell: 'virtualenv ~/demos'
- name: install requirements
pip: requirements=~/demos/django_selfblog/requirements.txt
virtualenv=~/demos
- name: init database
shell: . ./bin/activate && cd django_selfblog/selfblog && ./init_database.sh chdir=~/demos
- name: run manage.py
shell: . ./bin/activate && cd django_selfblog/selfblog &&
./run.sh chdir=~/demos
如果你已经配置好ssh账户免密码登录之后,直接执行: ansible-playbookdeploy-blog-simple.yml 就可以在你指定的服务器上部署,并启动blog了。
好了,关于ansible的使用,到这里应该先告一段落了,后面还有一些稍微复杂点的概念:role和include。以后有时间再补充一个续。
在写最后一个playbook的时候,为了最后能正常启动blog程序,花了小半天时间把ansible的代码看了下,下一篇来分享下ansbile里面的一些原理性的东西。
转载请注明: &}

我要回帖

更多关于 ansible 安装 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信