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

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

范例 参考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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
23天前
|
JSON 搜索推荐 API
Lazada Item_review API接口的开发应用与收益
Lazada作为东南亚领先的电商平台,通过其丰富的API接口为第三方开发者提供了强大的工具。其中,Lazada商品评论列表API(item_review API)尤为重要,能够实时获取商品评论数据,帮助开发者了解用户反馈、优化商品策略、提高购物体验和建立品牌形象,从而在电商行业中实现显著的收益。本文将深入探讨该API的开发应用及其多方面的价值。
50 14
|
25天前
|
供应链 搜索推荐 安全
唯品会Vip商品详情 API 接口:开发应用与收益深度剖析
唯品会Vip商品详情API接口,作为电商数据交互的枢纽,提供详尽的商品信息与动态数据,助力开发者、商家及市场分析者洞察市场趋势、优化商品推荐、提升用户体验,从而实现销售额增长、利润空间拓展及用户忠诚度加固,推动电商行业创新发展。
67 16
|
23天前
|
搜索推荐 数据挖掘 API
Suning商品详情API接口的开发应用与收益
在电商迅猛发展的时代,API接口技术成为连接不同系统的桥梁,为电商平台提供高效的数据交换能力。苏宁易购的商品详情API接口,为商家和开发者带来诸多便利和收益,包括商品信息获取、选品上架、竞品分析、个性化推荐、自动化管理和运营效率提升等方面,助力商家优化销售策略,提高用户体验,降低运营成本,增强市场竞争力,促进业务创新。
43 2
|
5天前
|
存储 缓存 API
API接口详解及其在电子商务中的应用研究
通过这些内容的详细介绍和实际案例分析,希望能帮助您深入理解API接口及其在电子商务中的应用,提高系统的互操作性和用户体验。
37 14
|
1天前
|
JSON 数据挖掘 API
唯品会按关键字搜索 VIP 商品 API 接口的开发应用与收益
在电商蓬勃发展的今天,精准的商品搜索功能至关重要。唯品会的按关键字搜索VIP商品API接口通过高效、精准的检索,提升了用户购物体验和商家销售业绩。该接口基于RESTful架构,采用JSON格式交互,支持唯品会APP内搜索、第三方平台合作及数据分析等场景,显著提升用户活跃度与忠诚度,拓展销售渠道,增加收入,并挖掘数据驱动的商业价值,助力唯品会持续发展。
14 4
|
6天前
|
人工智能 运维 监控
发现API安全风险,F5随时随地保障应用和API安全
发现API安全风险,F5随时随地保障应用和API安全
22 7
|
9天前
|
人工智能 监控 安全
自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
骨骼点检测技术能够从图片中识别出人体的关键骨骼点位置,如头部、肩部、手肘等,广泛应用于运动健身指导、游戏交互、医疗辅助、安全监控等领域。我决定深入学习HarmonyOS Next API 13中的Skeleton Detection API,并开发一个简单的骨骼点检测应用。通过理解API核心功能、项目初始化与配置、实现检测功能、构建用户界面,以及性能优化和功能扩展,逐步实现这一技术的应用。未来计划将其应用于健身指导和智能监控领域,探索与其他AI能力的结合,开发更智能的解决方案。如果你也对骨骼点检测感兴趣,不妨一起进步!
131 9
|
8天前
|
JSON API 开发者
Lazada 商品评论列表 API 接口:开发、应用与收益
Lazada作为东南亚领先的电商平台,其商品评论数据蕴含丰富信息。通过开发和利用Lazada商品评论列表API接口,企业可深入挖掘这些数据,优化产品、营销和服务,提升客户体验和市场竞争力。该API基于HTTP协议,支持GET、POST等方法,开发者需注册获取API密钥,并选择合适的编程语言(如Python)进行开发。应用场景包括竞品分析、客户反馈处理及精准营销,帮助企业提升销售业绩、降低运营成本并增强品牌声誉。
25 2
|
18天前
|
存储 搜索推荐 安全
介绍几个常用的电商API接口及其应用场景。(一篇文章全清楚)
电商API接口是电商平台高效运营的核心技术支撑,涵盖商品管理、订单管理、支付、客户管理、营销推广和数据分析六大模块。商品管理API实现商品信息的精准上传与动态调整;订单管理API确保订单全流程透明可控;支付API保障交易安全便捷;客户管理API通过数据分析提供个性化服务;营销推广API助力精准营销;数据分析API为决策提供数据支持。各API协同工作,推动电商行业创新发展,构建智能便捷的电商生态。
120 12
|
12天前
|
供应链 搜索推荐 API
1688榜单商品详细信息API接口的开发、应用与收益
1688作为全球知名的B2B电商平台,为企业提供丰富的商品信息和交易机会。为满足企业对数据的需求,1688开发了榜单商品详细信息API接口,帮助企业批量获取商品详情,应用于信息采集、校验、同步与数据分析等领域,提升运营效率、优化库存管理、精准推荐、制定市场策略、降低采购成本并提高客户满意度。该接口通过HTTP请求调用,支持多种应用场景,助力企业在电商领域实现可持续发展。
55 4