• 文件格式
    1. PROXY_ADD_START
    2. 10.21.16.88
    3. PROXY_ADD_END
    4. AGENT_ADD_START
    5. 10.11.12.11
    6. 10.11.12.12
    7. AGENT_ADD_END
    • 处理逻辑
    1. def fileAnalyze(self, fileName):
    2. """
    3. 解析列表文件中的zabbix proxy ip及zabbix agent ip信息
    4. 根据固定标志字段区分PROXY_ADD段和AGENT_ADD段,设置初始标志位状态,
    5. 逐行读取文件并更新标志位。按照标志位状态更新到proxy_ips和agent_ips
    6. :param fileName: zabbix-agent-ip.xxx
    7. :return:proxy_ips, agent_ips
    8. """
    9. # 指定proxy_ip标志字段
    10. PROXY_ADD_START = "PROXY_ADD_START"
    11. PROXY_ADD_END = "PROXY_ADD_END"
    12. # 待安装agent_ip标志字段
    13. AGENT_ADD_START = 'AGENT_ADD_START'
    14. AGENT_ADD_END = 'AGENT_ADD_END'
    15. # 存储标志字段状态
    16. PROXY_STATUS = 0
    17. AGENT_STATUS = 0
    18. proxy_ips = set()
    19. agent_ips = set()
    20. try:
    21. # 判断列表文件是否存在
    22. if os.path.exists(fileName):
    23. f = open(fileName, 'r')
    24. else:
    25. logger.info(fileName, "不存在")
    26. return
    27. for line in f.readlines():
    28. line = line.strip()
    29. # 如果读取到的是标志字段,则修改对应的状态,如果是数据则放入对应的set
    30. if line == PROXY_ADD_START:
    31. if PROXY_STATUS:
    32. logger.error("格式错误,有多行PROXY_ADD_START")
    33. return
    34. else:
    35. PROXY_STATUS = 1
    36. logger.info("开始读取新增的代理IP进入内存********")
    37. elif line == PROXY_ADD_END:
    38. if not PROXY_STATUS:
    39. logger.error("格式错误,没有PROXY_ADD_START或者有多行PROXY_ADD_END")
    40. return
    41. else:
    42. PROXY_STATUS = 0
    43. logger.info("结束读取新增的代理IP进入内存********")
    44. elif line == AGENT_ADD_START:
    45. if AGENT_STATUS:
    46. logger.error("格式错误,有多行PROXY_ADD_START")
    47. return
    48. else:
    49. AGENT_STATUS = 1
    50. logger.info("开始读取待安装的Zabbix Agent IP进入内存********")
    51. elif line == AGENT_ADD_END:
    52. if not AGENT_STATUS:
    53. logger.error("格式错误,没有AGENT_ADD_START或者有多行AGENT_ADD_END")
    54. return
    55. else:
    56. AGENT_STATUS = 0
    57. logger.info("结束读取待安装的Zabbix Agent IP进入内存********")
    58. elif line.startswith('#'):
    59. logger.info(line, "被注释,已过滤")
    60. else:
    61. if PROXY_STATUS:
    62. if line in proxy_ips:
    63. logger.warning("Proxy代理IP:", line, "重复,已过滤")
    64. else:
    65. proxy_ips.add(line)
    66. elif AGENT_STATUS:
    67. if line in agent_ips:
    68. logger.warning("Zabbix Agent IP:", line, "重复,已过滤")
    69. else:
    70. agent_ips.add(line)
    71. # 判断文件是否正常结束
    72. if PROXY_STATUS or AGENT_STATUS:
    73. logger.error("格式错误,文件没有正常结束")
    74. return
    75. finally:
    76. if os.path.exists(fileName) and f:
    77. f.close()
    78. return proxy_ips, agent_ips