ansible 1.7.2 api 获取有某些应用的ip

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

范例 参考http://john88wang.blog.51cto.com/2165294/1745339

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/usr/bin/python
  
  
"" " Check Zookeeper Cluster
  
zookeeper version should be newer than 3.4.x
  
# echo mntr|nc 127.0.0.1 2181
zk_version  3.4.6-1569965, built on 02 /20/2014  09:09 GMT
zk_avg_latency  0
zk_max_latency  4
zk_min_latency  0
zk_packets_received 84467
zk_packets_sent 84466
zk_num_alive_connections    3
zk_outstanding_requests 0
zk_server_state follower
zk_znode_count  17159
zk_watch_count  2
zk_ephemerals_count 1
zk_approximate_data_size    6666471
zk_open_file_descriptor_count   29
zk_max_file_descriptor_count    102400
  
# echo ruok|nc 127.0.0.1 2181
imok
  
"" "
  
import  sys
import  socket
import  re
import  subprocess
from StringIO  import  StringIO
import  os
  
  
zabbix_sender =  '/opt/app/zabbix/sbin/zabbix_sender'
zabbix_conf =  '/opt/app/zabbix/conf/zabbix_agentd.conf'
send_to_zabbix = 1
  
  
  
############# get zookeeper server status
class ZooKeeperServer(object):
  
     def __init__(self, host= 'localhost' , port= '2181' , timeout=1):
         self._address = (host, int(port))
         self._timeout = timeout
         self._result  = {}
  
     def _create_socket(self):
         return  socket.socket()
  
  
     def _send_cmd(self, cmd):
         "" " Send a 4letter word command to the server " ""
         s = self._create_socket()
         s.settimeout(self._timeout)
  
         s.connect(self._address)
         s.send(cmd)
  
         data = s.recv(2048)
         s.close()
  
         return  data
  
     def get_stats(self):
         "" " Get ZooKeeper server stats as a map " ""
         data_mntr = self._send_cmd( 'mntr' )
         data_ruok = self._send_cmd( 'ruok' )
         if  data_mntr:
             result_mntr = self._parse(data_mntr)
         if  data_ruok:
             result_ruok = self._parse_ruok(data_ruok)
  
         self._result = dict(result_mntr.items() + result_ruok.items())
          
         if  not self._result.has_key( 'zk_followers' ) and not self._result.has_key( 'zk_synced_followers' ) and not self._result.has_key( 'zk_pending_syncs' ):
  
            ##### the tree metrics only exposed on leader role zookeeper server, we just set the followers' to 0
            leader_only = { 'zk_followers' :0, 'zk_synced_followers' :0, 'zk_pending_syncs' :0}    
            self._result = dict(result_mntr.items() + result_ruok.items() + leader_only.items() )
  
         return  self._result  
  
  
  
     def _parse(self, data):
         "" " Parse the output from the 'mntr' 4letter word command " ""
         h = StringIO(data)
          
         result = {}
         for  line  in  h.readlines():
             try:
                 key, value = self._parse_line(line)
                 result[key] = value
             except ValueError:
                 pass  # ignore broken lines
  
         return  result
  
     def _parse_ruok(self, data):
         "" " Parse the output from the 'ruok' 4letter word command " ""
         
         h = StringIO(data)
         
         result = {}
         
         ruok = h.readline()
         if  ruok:
            result[ 'zk_server_ruok' ] = ruok
   
         return  result
   
  
  
     def _parse_line(self, line):
         try:
             key, value = map(str.strip, line. split ( '\t' ))
         except ValueError:
             raise ValueError( 'Found invalid line: %s'  % line)
  
         if  not key:
             raise ValueError( 'The key is mandatory and should not be empty' )
  
         try:
             value = int(value)
         except (TypeError, ValueError):
             pass
  
         return  key, value
  
  
  
     def get_pid(self):
#  ps -ef|grep java|grep zookeeper|awk '{print $2}'
          pidarg =  '' 'ps -ef|grep java|grep zookeeper|grep -v grep|awk ' {print $2} ' ' '' 
          pidout = subprocess.Popen(pidarg,shell=True,stdout=subprocess.PIPE)
          pid = pidout.stdout.readline().strip( '\n' )
          return  pid
  
  
     def send_to_zabbix(self, metric):
          key =  "zookeeper.status["  +  metric +  "]"
  
          if  send_to_zabbix > 0:
              #print key + ":" + str(self._result[metric])
              try:
  
                 subprocess.call([zabbix_sender,  "-c" , zabbix_conf,  "-k" , key,  "-o" , str(self._result[metric]) ], stdout=FNULL, stderr=FNULL, shell=False)
              except OSError, detail:
                 print  "Something went wrong while exectuting zabbix_sender : " , detail
          else :
                 print  "Simulation: the following command would be execucted :\n" , zabbix_sender,  "-c" , zabbix_conf,  "-k" , key,  "-o" , self._result[metric],  "\n"
  
  
  
  
def usage():
         "" "Display program usage" ""
  
         print  "\nUsage : " , sys.argv[0],  " alive|all"
         print  "Modes : \n\talive : Return pid of running zookeeper\n\tall : Send zookeeper stats as well"
         sys. exit (1)
  
  
  
accepted_modes = [ 'alive' 'all' ]
  
if  len(sys.argv) == 2 and sys.argv[1]  in  accepted_modes:
         mode = sys.argv[1]
else :
         usage()
  
  
  
  
zk = ZooKeeperServer()
#  print zk.get_stats()
pid = zk.get_pid()
  
if  pid !=  ""  and  mode ==  'all' :
    zk.get_stats()
    # print zk._result
    FNULL =  open (os.devnull,  'w' )
    for  key  in  zk._result:
        zk.send_to_zabbix(key)
    FNULL.close()
    print pid
  
elif  pid !=  ""  and mode ==  "alive" :
     print pid
else :
     print 0

我对比上面搞了自己的

1
2
3
4
5
1. cat  qa_servers.txt 
[dev]
t8 ansible_ssh_user=root ansible_ssh_host=xx
[cs]
t7 ansible_ssh_user=root ansible_ssh_host=xx
1
2
3
4
5
2. cat  test .sh
#!/bin/bash
if  [ ` ps  -ef| grep  tomcat| grep  /opt | wc  -l` -gt 0 ]; then
echo  ` ifconfig | grep  'inet ' | grep  - v  '127.0' | xargs | awk  -F  '[ :]'  '{print $3}' `
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
3. cat  test .sh
#!/bin/bash
if  [ ` ps  -ef| grep  tomcat| grep  /opt | wc  -l` -gt 0 ]; then
echo  ` ifconfig | grep  'inet ' | grep  - v  '127.0' | xargs | awk  -F  '[ :]'  '{print $3}' `
fi
[root@jk home] # cat test.py
import  ansible.runner
from ansible.color  import  stringc
import  sys
import  socket
import  re
import  subprocess 
 
host_list= 'qa_servers.txt'
private_key_file= '/root/.ssh/id_rsa'
pattern= '*'
forks=10
timeout=30
module_name= 'script'
module_args= 'test.sh'
# construct the ansible runner and execute on all hosts
results = ansible.runner.Runner(
host_list=host_list,
private_key_file=private_key_file,
pattern=pattern,
forks=forks,
timeout=timeout,
module_name=module_name,
module_args=module_args
                                ).run()
#print results
if  results is None:
    print  "No hosts found"
    sys. exit (1)
print results
for  ( hostname , result)  in  results[ 'contacted' ].items():
     if  not  'failed'  in  result:
         ip=result[ 'stdout' ].strip()
         if  ip !=  ""  :
                    output= open ( '/home/ip.txt' , 'a' )
                    output.write(ip)  
                    output.write( '\n' )
1
2
3
4.运行 python  test .py
验证  cat  /home/ip .txt
简单来说,就是处理ansible的输出




本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1812500,如需转载请自行联系原作者
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6天前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
27天前
|
存储 缓存 搜索推荐
Lazada淘宝详情API的价值与应用解析
在电商行业,数据是驱动业务增长的核心。Lazada作为东南亚知名电商平台,其商品详情API对电商行业影响深远。本文探讨了Lazada商品详情API的重要性,包括提供全面准确的商品信息、增强平台竞争力、促进销售转化、支持用户搜索和发现需求、数据驱动决策、竞品分析、用户行为研究及提升购物体验。文章还介绍了如何通过Lazada提供的API接口、编写代码及使用第三方工具实现实时数据获取。
55 3
|
1月前
|
缓存 数据挖掘 API
商品详情API接口的应用实践
本文探讨了商品详情API接口在电商领域的应用实践,介绍了其作为高效数据交互方式的重要性,包括实时获取商品信息、提升用户体验和运营效率。文章详细描述了API接口的特点、应用场景如商品展示、SEO优化、数据分析及跨平台整合,并提出了缓存机制、分页加载、异步加载和错误处理等优化策略,旨在全面提升电商运营效果。
|
1月前
|
监控 搜索推荐 数据挖掘
淘宝 API 接口的调用频率限制是否会因应用类型而异?
淘宝API调用频率限制依应用类型而异。电商管理类如商家后台、商品批量上传工具,调用频次较高;数据分析类如市场调研、店铺分析工具,频次较严;导购推荐类如第三方导购平台、社交媒体导购应用,依据规模与信誉设定;其他如开发者测试、个人小型应用则限制较宽松。
|
9天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
30 4
|
8天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【10月更文挑战第37天】本文将深入探讨如何利用Ansible简化和自动化复杂的IT基础设施管理任务。我们将通过实际案例,展示如何用Ansible编写可重用的配置代码,以及这些代码如何帮助运维团队提高效率和减少人为错误。文章还将讨论如何构建Ansible playbook来自动部署应用、管理系统更新和执行常规维护任务。准备好深入了解这个强大的工具,让你的运维工作更加轻松吧!
23 2
|
9天前
|
监控 搜索推荐 安全
探究亚马逊详情API接口:开发与应用
在数字化时代,亚马逊作为全球领先的电商平台,为商家和消费者提供了丰富的商品信息和便捷的购物体验。本文深入探讨了亚马逊详情API接口的获取与运用,帮助开发者和商家实时监控商品数据、分析市场趋势、优化价格策略、分析竞争对手、构建推荐系统及自动化营销工具,从而在竞争中占据优势。文章还提供了Python调用示例和注意事项,确保API使用的安全与高效。
32 3
|
13天前
|
搜索推荐 数据挖掘 API
API接口在电商的应用及收益
本文探讨了API接口技术在电商领域的应用及其带来的收益。API接口作为连接电商平台与外部系统的桥梁,实现了高效、实时的数据交换和集成,提升了用户体验、运营效率和市场竞争力。具体应用包括库存管理、支付网关、物流跟踪、自动化业务流程、个性化推荐和精准营销等方面。通过实战案例分析,展示了亚马逊和小型电商公司如何利用API接口实现自动化管理,提高了工作效率和客户满意度。未来,API接口技术将更加注重智能化、标准化、安全性和跨界合作。
42 3
|
24天前
|
JSON 供应链 API
京东商品评价API的获取和应用
京东商品评价API是电商数据分析的重要工具,帮助开发者和商家获取商品的用户评价数据,包括评分、评论内容和购买时间等。通过分析这些数据,商家可以优化产品和服务,提升客户满意度,制定更有效的营销策略。本文介绍了获取和应用京东商品评价API的详细步骤,包括注册账号、获取权限、阅读文档和编写代码调用API。示例代码展示了如何使用Python调用API并处理响应数据。
74 2
|
25天前
|
JSON API 开发者
淘宝商品评价API的获取与应用
在数字化时代,电商平台如淘宝成为消费者购物的主要渠道。本文介绍如何使用淘宝开放平台的商品评论API获取并利用评论数据,以优化产品和服务,提升用户体验。内容涵盖API的重要性、准备工作、调用流程及代码实现,帮助开发者高效获取和分析数据。
44 3