ansible 执行结果怎么传回控制台执行js

ansible很亮的功能之一就是role, 我们可以将不同分类的task 归类之后放到一个相同的role中,方便管理,方便重用
一个简单的role:
`-- main.yml
roles/`-- test&&&&`-- tasks&&&&&&&&`-- main.yml
是的,有一个role 名字叫 test ,test这个role下只有一个文件夹,tasks, 只有一个yml文件,内容为:
- name: debug some info
debug: var=test1
- name: debug some info2
debug: var=test2
---&- name: debug some info&&debug: var=test1&&- name: debug some info2 &&debug: var=test2
这是一个特殊的例子, 因为是测试用的,所以,不需要太多的文件,正常的role应该是这个样子的
ansible_home/
├── main.yml
└── roles
├── common
├── defaults
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
├── dbservers
├── defaults
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
└── webservers
├── defaults
├── files
├── handlers
├── meta
├── tasks
├── apache_conf.yml
├── apache_vhost_conf.yml
└── main.yml
├── templates
├── apache_conf.j2
└── apache_vhost.conf.j2
└── vars
└── main.yml
123456789101112131415161718192021222324252627282930313233
ansible_home/├── main.yml└── roles&&&&├── common&&&&│&& ├── defaults&&&&│&& ├── files&&&&│&& ├── handlers&&&&│&& ├── meta&&&&│&& ├── tasks&&&&│&& ├── templates&&&&│&& └── vars&&&&├── dbservers&&&&│&& ├── defaults&&&&│&& ├── files&&&&│&& ├── handlers&&&&│&& ├── meta&&&&│&& ├── tasks&&&&│&& ├── templates&&&&│&& └── vars&&&&└── webservers&&&&&&&&├── defaults&&&&&&&&├── files&&&&&&&&├── handlers&&&&&&&&├── meta&&&&&&&&├── tasks&&&&&&&&│&& ├── apache_conf.yml&&&&&&&&│&& ├── apache_vhost_conf.yml&&&&&&&&│&& └── main.yml&&&&&&&&├── templates&&&&&&&&│&& ├── apache_conf.j2&&&&&&&&│&& └── apache_vhost.conf.j2&&&&&&&&└── vars&&&&&&&&&&&&└── main.yml
好了,我们说说为什么要传递变量个role , 因为如果我们想给role设置变量,只需要再创建一个vars文件夹在 test文件夹下,然后在vars下增加一个main.yml 把我们的值写到里边,role中使用就可以了,但是,有时候,我们需要测试一些东西的时候,需要不使用默认值,或者需要临时增加新的值,我们只需要在引入role的时候将变量一并传递给role就可以了
第一种格式:
- hosts: localhost
remote_user: zhiming
- role: test
vvvv_1: 'ah'
test1: 'this is test1'
test2: 'this is test2'
---&- hosts: localhost&&remote_user: zhiming&&roles:&&- role: test&&&&vvvv_1: 'ah'&&&&test1: 'this is test1'&&&&test2: 'this is test2'
第二种格式:
- hosts: localhost
remote_user: zhiming
- {role: "test", vvvv_1: "ah" , test1: "this is test1", }
---&&- hosts: localhost&&remote_user: zhiming&&roles: &&- {role: "test", vvvv_1: "ah" , test1: "this is test1", }
大家随意, 第一种略显清晰一。 ansible介绍
ansbile是基于的强大的批量命令执行工具,在管理数量庞大的集群中,有很强大的功能,而且体积小,依赖少,大有一统江湖的趋势。二。安装
RHEL6中,提供了ansible的包,在使用CentOS6的时候,可能需要添加epel源,具体如何添加,请自行#
install ansible安装后会在/etc/ansible/目录下生成2个文件 ansible.cfg
hosts三。使用
演示环境介绍:3台节点,分别为node1,node2,node3,在/etc/hosts里添加如下信息
172.16.0.1 node1
172.16.0.2 node2
172.16.0.3 node3其中只需要1台安装ansible,这里选用node1做“host”1.node1生成密匙,并将公匙推送给node2和node3# ssh-copy-id node{1,2,3}(注意本机也要传)2.编辑/etc/ansible/hosts,将内容全部注释,添加如下信息[test]
node3必须保证/etc/hosts里面有主机名对应的IP3.查看ansible帮助文档#man ansibleUsage: ansible &host-pattern& [options]4.进行测试#ansible test -a "date"5.ansible常见模块及其功能yum,user,common#yum all -a "ntpdate 172.16.0.100"
(将所有节点与时间同步,默认使用common模块,可省略)
#yum all -m yum -a “name=htop state=present"
(使用yum模块在所有节点上安装htop,关于yum模块的使用,
可以man ansible.yum)
#yum all -m cron -a 'name=time minute="*/3" job="ntpdate 172.16.0.100 &&/dev/null"'
(给所有节点制定cron任务,每3分钟更新一次时间)具体其他用法可自行man
ansible.&module&
无相关信息[原创] Ansible Ad-Hoc命令集之一_运维部落_传送门
[原创] Ansible Ad-Hoc命令集之一
马哥Linux团队
Ansible Ad-Hoc命令集前言在前面章节中,为大家介绍了掌握Ansible所必须了解的基础,如变量命名方式,facts, register,变量传递,inventory等. 如上内容是掌握Ansible的基础,请务必熟练掌握. 本章为大家介绍的是Ansible Ad-Hoc命令集。作为Ansible最常用的命令,本节内容显得尤为重要。一、Ad-Hoc及其使用场景所谓的Ad-Hoc简而言之可以称之为“临时命令”(英文中作为形容词Ad-Hoc有“特别的,临时”的含义)。大家按各自习惯称谓均可(就笔者而言平时直呼“临时操作”,Ad-Hoc实在有些拗口)。Ad-Hoc就其功能上是相对Ansible-playbook而言,Ansible提供两种方式完成任务:一种是Ad-Hoc命令集,即命令ansible,另外一种就是Ansible-playbook了,即命令ansible-playbook。前者更注重于解决一些简单或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令,后者更适合于解决复杂或需固化下来的任务,相当于Linux系统的Shell Scripts。通常,深入Ansible是从接触Ansible-playbook后开始,灵活运用Ansible-playbook才能更好地体会到Ansible的强大所在。具体来讲,什么样的场景下我们需要用到Ad-Hoc,什么样的情况下需要使用Ansible-playbook呢?(1)需要使用Ad-Hoc的场景情景1:春节将至(好吧,写这个章节的时候,离过年已经不到半个月了),我们需要关闭所有不必要的服务器,并对所有服务器进行节前健康检查。情景2:我临时更新了Apache &N的配置文件,同时需要将其分发至所有需更新该配置的Web Servers。(2)需要使用Ansible-playbook的场景情景1:新购置的服务器安装完系统后需做一系列固化的初始化工作,诸如:定制防火墙策略,添加NTP时间同步配置,添加EPEL源等。情景2:业务侧每周定期对生产环境发布更新程序代码。Ansible-playbook其实两者之间关系用急行军(Ad-Hoc)和远征军(Ansible-playbook)来形容可能更容易理解。急行军需轻装上阵,注重灵活机动; 远征军需稳扎稳打,注重长远规划。正如我们上面所讲,Ad-Hoc更注重于解决一些简单或者平时工作中临时遇到的任务,Ansible-playbook更适合于解决复杂或需固化下来的任务。后面的章节中我们会介绍大量企业实战场景,相信大家会有更深刻的体会。二、Ad-Hoc命令集介绍上节我们介绍了Ad-Hoc的使用场景,本小节为大家介绍通过Ad-Hoc 命令集Ansible查看系统设置,通过Ad-Hoc研究Ansible的并发特性,通过Ad-Hoc研究Ansible的模块使用。磨刀不误砍柴工,开始之前做一些简单的初始化化检查,如系统时间正确与否,磁盘容量是否充足等,这些检查工作是很有必要的。参考提示: 在实际工作中,很多“诡异”问题迫使我们花费大量时间排查,最终却发现是非常简单的基础环境问题导致的,这其实还是挺常见的,不论对新手还是老鸟均是如此,谨记!
我们前面做的系统时间正确与否,磁盘容量是否充足等工作,其实Linux下是有开源工具可以帮助我们自动监控。这里也为大家推荐几款Linux下耳熟能详的监控工具,如Zabbix,Nagios,Cacti,falcon,Cat等。1、Ad-Hoc命令集用法简介本节我们介绍Ad-Hoc命令集用法。Ad-Hoc命令集的由/usr/bin/ansible实现。/usr/bin/ansible命令使用介绍如下。命令用法:ansible
[options]Options:-v, --verbose:输出更详细的执行过程信息,-vvv可得到所有执行过程信息。-i PATH, --inventory=PATH:指定inventory信息,默认/etc/ansible/hosts。-f NUM, --forks=NUM:并发线程数,默认5个线程。--private-key=PRIVATE_KEY_FILE:指定密钥文件。-m NAME, --module-name=NAME:指定执行使用的模块。-M DIRECTORY, --module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。-a 'ARGUMENTS', --args='ARGUMENTS':模块参数。-k, --ask-pass SSH:认证密码。-K, --ask-sudo-pass sudo:用户的密码(--sudo时使用)。-o, --one-line:标准输出至一行。-s, --sudo:相当于Linux系统下的sudo命令。-t DIRECTORY, --tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机名命名。-T SECONDS, --timeout=SECONDS:指定连接远程主机的最大超时,单位是:秒。-B NUM, --background=NUM:后台执行命令,超NUM秒后kill正在执行的任务。-P NUM, --poll=NUM:定期返回后台任务进度。-u USERNAME, --user=USERNAME:指定远程主机以USERNAME运行命令。-U SUDO_USERNAME, --sudo-user=SUDO_USERNAM:E使用sudo,相当于Linux下的sudo命令。-c CONNECTION, --connection=CONNECTION:指定连接方式,可用选项paramiko (SSH), ssh, local。Local方式常用于crontab 和 kickstarts。-l SUBSET, --limit=SUBSET:指定运行主机。-l ~REGEX, --limit=~REGEX:指定运行主机(正则)。--list-hosts:列出符合条件的主机列表,不执行任何其它命令。下面的示例有助于加深对其理解程度:情景1:检查proxy组所有主机是否存活执行命令:ansible proxy
–f 5 –m ping返回结果如下如图执行结果诠释:192.168.37.159 | success >> {
"changed": false,
"ping": "pong"
}其中192.168.37.159是指命令执行的主机,Success表示命令执行成功,>> {} 表示详细返回结果如下。”changed”: false表示没有对主机做变更,”ping”: “pong”表示执行了ping命令返回结果为pong。情景2:返回proxy组所有主机的hostname并打印最详细的执行过程到标准输出执行命令:ansible proxy -s -m command -a 'hostname' -vvv返回结果如下如图所示:执行结果诠释: ESTABLISH CONNECTION FOR USER: root on PORT 22 TO 192.168.37.159
#远程主机192.168.37.159监听ROOT用户的22号端口
REMOTE_MODULE command hostname #远程执行命令hostname
EXEC /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-.83-43 && echo $HOME/.ansible/tmp/ansible-tmp-.83-43' #生成临时临时目录用于存放Ansible远程执行脚本
PUT /tmp/tmp5sawsq TO /root/.ansible/tmp/ansible-tmp-.83-43/command #改名临时脚本并存放至临时目录
EXEC /bin/sh -c 'sudo -k && sudo -H -S -p "[sudo via ansible, key=urvzacjxvaagwvlrywymxpxfhjkirkqb] password: " -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-urvzacjxvaag LANG=C LC_CTYPE=C /usr/bin/python /root/.ansible/tmp/ansible-tmp-.83-43/ rm -rf /root/.ansible/tmp/ansible-tmp-.83-43/ >/dev/null 2>&1'"'"'' #使用sudo方式并以Python脚本方式执行命令
192.168.37.159 | success | rc=0 >> #返回结果为success,CodeResult为0
Linuxlst #返回的命令返回结果如下使用-vvv参数可以清楚了解Ansible命令执行流程,执行流程如图:情景3:列出Web组所有主机列表执行命令:ansible web --list返回结果如下:
10.3.33.21
10.3.33.23执行结果诠释:--list选项列出web组所有主机列表信息,Web组中包括 10.3.33.21 和 10.3.33.23两台主机。Ok,接下来我们模拟较为复杂的场景情景4:对10.21.40.61服务器以root执行sleep 20,并设置最大连接超时时长为2s,且设置为后台运行模式,执行过程每2s输出一次进度,如5s还未执行完则kill终止该任务执行命令:time ansible 10.21.40.61 -B 5 -P 2 -T 2 -m command -a 'sleep 20'
-u root(注:time命令可省,为方便观察结果这里使用time命令查看执行时长)返回结果如图:执行结果诠释:第一行:[WARNING]不用理会,需升级gmp,该提醒不影响命令返回结果如下
第二行:background launch...表示使用-B使该命令后台运行
每隔2s输出一次执行进度
polling on 10.21.40.61, 3s remaining表示执行时长剩余3s
每隔2s输出一次执行进度
polling on 10.21.40.61, 1s remaining表示执行时长剩余1s
0m10.268s程序执行总时长
0m1.898s系统用户层执行时长
0m0.163s系统内核层执行时长参考提示细心的朋友会发现,我们sleep 20表示sleep 20s,即该命令最少执行时长为20s,但为什么real程序实际运行时长只有10s呢?这就是-B选项的意义了,如果超过其指定时间则kill终止正在执行的任务(但real为什么是10.268s而不是5.268s,经笔者实测,-B功能生效但时间不精确,正式使用前请多测试)关注我们:
觉得不错,分享给更多人看到
运维部落 微信二维码
分享这篇文章
运维部落 最新头条文章
运维部落 热门头条文章[原创]Ansible模块知多少_运维部落_传送门
[原创]Ansible模块知多少
马哥Linux团队
一、通过Ad-Hoc研究Ansible的模块使用前面的章节为大家详细介绍了Ad-Hoc的命令集使用方法及其它并发特性等,那Ansible究竟有多少现成功能可供大家使用呢?本节来为大家介绍Ad-Hoc的模块使用。截止本篇编写时间(),官方呈现的所有可用模块约 468 个,所有模块官方也做了详尽的功能分类。明细可参考官方链接/ansible/modules_by_category.html。另外,Ansible也提供了类似man功能的help说明工具ansible-doc ,直接回车或 -h 显示功能用法,和Linux下系统下的man命令一样重要,正式学习Ansible模块使用前,有必要先来了解ansible-doc 用法。命令用法:ansible-doc [options] [module...]Options:--version : 显示工具版本号-h, --help : 显示该help说明-M MODULE_PATH, --module-path=MODULE_PATH: 指定Ansible模块的默认加载目录-l, --list:列出所有可用模块-s, --snippet : 只显示playbook说明的代码段-v : 只显示playbook说明的代码段情景1:显示所有可用模块执行命令:ansible-doc –l返回结果如下:a10_server
Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
a10_service_group
Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
a10_virtual_server
Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
Sets and retrieves file ACL information.
add a host (and alternatively a group) to the ansible-playboo...
airbrake_deployment
Notify airbrake about app deployments
alternatives
Manages alternative programs for common commands
apache2_module
enables/disables a module of the Apache2 webserver
Manages apt-packages
Add or remove an apt key
apt_repository
Add and remove APT repositories
apt_rpmapt_rpm package manager
arista_interface
Manage physical Ethernet interfaces
arista_l2interface
Manage layer 2 interfaces
arista_lag
Manage port channel (lag) interfaces
arista_vlan
Manage VLAN resources
Assembles a configuration file from fragments
…情景2:以yum模块为例,我们希望获取yum模块的HELP说明执行命令:ansible-doc yum返回结果如下: YUM
Installs, upgrade, removes, and lists packages and groups with the
`yum' package manager.
Options (= is mandatory):
- conf_file
The remote yum configuration file to use for the transaction.
[Default: None]其它模块HELP说明以此类推即可,下面通过Ansible内置模块来完成一些操作。示例1:安装redhat-lsb并查看服务器系统版本号步骤1 : 安装redhat-lsb执行命令:ansible apps -m yum -a 'name=redhat-lsb state=present'返回结果如下:192.168.37.142 | success >> {
"changed": false,
"msg": "",
"results": [
"redhat-lsb-4.0-7.el6.centos.i686 providing redhat-lsb is already installed"
…返回结果说明:“changed”: 主机是否有变更 true:有 false:没有 (第一次运行或事先没有安装,返回值一般是true,否则为false)“msg”:安装过程信息“rc”: 0,resultcode结果返回码,非0返回码往往是红色并且错误的返回,非常明显步骤2: 查看系统版本号执行命令:ansible apps -m command -a 'lsb_release -a'返回结果如下:192.168.37.155 | success | rc=0 >>
LSB Version:
:base-4.0-ia32:base-4.0-noarch:core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description:
CentOS release 6.5 (Final)
Final返回结果说明:192.168.37.155表示执行的主机,success表示命令执行成功,rc=0表示返回结果如下返回码为0 ,>>后lsb_release –a 命令返回的结果示例2:为所有服务器安装ntp服务并设置为开机启动。步骤1:安装ntp服务执行命令:ansible apps -s -m yum -a "name=ntp state=present"步骤2:启动ntp服务并设置为开机启动执行命令:ansible apps -m service -a "name=ntpd state=started enabled=yes"返回的结果不再一一为大家列举出来,相信上面那么多的示例,大家对如何判断结果是否正确有准备的了解了。参考提示:
如LINUX所有的命令用法一样,我们只能记住日常工作中最常用到的那些,另外那些不常用的命令用法我们需要知道如何快速获取他们的用法,LINUX系统为我们提供了man工具来快速获取所需。ansible-doc则等同 man 的功能和作用,这样解释相信大家会更容易理解其重要性关注我们:
觉得不错,分享给更多人看到
运维部落 微信二维码
分享这篇文章
8月26日 8:35
运维部落 最新头条文章
运维部落 热门头条文章1380人阅读
JAVA(22)
最近在研究jenkins,最后卡在了war包传输的问题。看见同事配置了使用ansible,记录一下相关脚本。
1、首先安装ansible
推荐用yum install ansible。
如果没有镜像源,请如下使用:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
yum install ansible
2、jenkins部署机器生产rsa公钥,放入到业务程序部署机
3、在jenkins的post steps之后,配置Run only if build succeeds&
WORKSPACE=`pwd`
WAR_DIR=${WORKSPACE}/${PROJ_NAME}-web/target
JETTY_DIR=/data/www/java/work/${PROJ_NAME}-jetty
REMOTE_DEPLOY_DIR=${JETTY_DIR}/webapps
INVENTORY_FILE=/tmp/${PROJ_NAME}-inventory-${JOB_NAME##*/}
INVENTORY_TEMPLATE=/opt/jenkins/default_inventory_template
cd $WAR_DIR
#准备Inventory
cat ${INVENTORY_TEMPLATE} & ${INVENTORY_FILE}
echo ${DEPLOY_HOST} && ${INVENTORY_FILE}
#删除远程服务器部署文件
ansible -i ${INVENTORY_FILE} all -m raw -a &rm -rf ${REMOTE_DEPLOY_DIR}/${PROJ_NAME}-web.war&
#COPY文件到远程服务器部署目录
ansible -i ${INVENTORY_FILE} all -m copy -a &src=${WAR_DIR}/${PROJ_NAME}-web.war dest=${REMOTE_DEPLOY_DIR}/&
#重启jetty
ansible -i ${INVENTORY_FILE} all -m shell -a &${JETTY_DIR}/bin/jetty.sh restart&
注意1:/opt/jenkins/default_inventory_template,模板内容如下
INVENTORY_FILE最终的样子是,如下,第二行的ip就是应用的部署机器
192.168.142.12
注意2:jenkins需要配置几个参数
PROJ_NAME: & & & & & &#项目的名字
DEPLOY_HOST: & & & & & & & & #业务应用部署的机器
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:147729次
积分:1543
积分:1543
排名:千里之外
原创:35篇
转载:17篇
(1)(1)(1)(2)(1)(1)(1)(1)(1)(1)(2)(1)(4)(1)(2)(3)(4)(2)(1)(3)(1)(2)(2)(2)(1)(1)(2)(2)(3)(1)(1)

我要回帖

更多关于 chrome 控制台 执行js 的文章

 

随机推荐