From 6d62b51b401fce2b74ec63266c06762084829fe8 Mon Sep 17 00:00:00 2001 From: Canux CHENG Date: Mon, 13 Feb 2017 03:44:41 -0500 Subject: [PATCH] [20170213]add gitignore and requirements.txt --- .gitattributes | 1 + .gitignore | 91 ++++++++++++++++++ README.rst | 13 +-- examples/Nagios/check_wmi_sh.py | 39 ++++---- examples/Nagios/check_wmi_subprocess.py | 39 ++++---- pymonitoringplugins/__init__.pyc | Bin 542 -> 0 bytes pymonitoringplugins/ftp_ftplib.pyc | Bin 3111 -> 0 bytes pymonitoringplugins/monitor.py | 17 +++- pymonitoringplugins/monitor.pyc | Bin 7564 -> 7991 bytes pymonitoringplugins/tests/test_wmi_sh.py | 51 +++++----- .../tests/test_wmi_subprocess.py | 51 +++++----- requirements.txt | 21 ++++ 12 files changed, 226 insertions(+), 97 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore delete mode 100644 pymonitoringplugins/__init__.pyc delete mode 100644 pymonitoringplugins/ftp_ftplib.pyc create mode 100644 requirements.txt diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f305c61 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* linguist-language=Python diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe7a250 --- /dev/null +++ b/.gitignore @@ -0,0 +1,91 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +#htmlcov/ +#.tox/ +#.coverage +#.coverage.* +#.cache +#nosetests.xml +#coverage.xml +#*,cover +#.hypothesis/ + +# Translations +#*.mo +#*.pot + +# Django stuff: +#*.log +#local_settings.py + +# Flask stuff: +#instance/ +#.webassets-cache + +# Scrapy stuff: +#.scrapy + +# Sphinx documentation +#docs/_build/ + +# PyBuilder +#target/ + +# Jupyter Notebook +#.ipynb_checkpoints + +# pyenv +#.python-version + +# celery beat schedule file +#celerybeat-schedule + +# dotenv +#.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +#.spyderproject + +# Rope project settings +.ropeproject diff --git a/README.rst b/README.rst index 539a389..1e82cb3 100644 --- a/README.rst +++ b/README.rst @@ -106,12 +106,13 @@ Also you can pull request for your code. TODO ----- -1. Compatible with Python3(2.0) -2. tivoli examples(1.7) -3. check_mk examples(1.6) -4. pymonitoringplugins/docs build with sphinx(1.5) -5. Thresholders need follow nagios rules(1.4) -6. snmp(1.3) +* vmware monitoring +* Compatible with Python3(2.0) +* tivoli examples(1.7) +* check_mk examples(1.6) +* pymonitoringplugins/docs build with sphinx(1.5) +* Thresholders need follow nagios rules(1.4) +* snmp(1.3) ============= Documentation diff --git a/examples/Nagios/check_wmi_sh.py b/examples/Nagios/check_wmi_sh.py index e57777e..e0157ce 100755 --- a/examples/Nagios/check_wmi_sh.py +++ b/examples/Nagios/check_wmi_sh.py @@ -239,25 +239,26 @@ def fileage_handle(self): for file_dict in self.__file_list: self.filename = file_dict.get('Name') - self.logger.debug("===== start to compare {} =====".format(self.filename)) - - self.file_datetime_string = file_dict.get('LastModified').split('.')[0] - self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') - self.logger.debug("file_datetime: {}".format(self.file_datetime)) - - self.current_datetime = self.__get_current_datetime() - self.logger.debug("current_datetime: {}".format(self.current_datetime)) - - self.__delta_datetime = self.current_datetime - self.file_datetime - self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) - self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) - self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) - if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): - self.crit_file.append(self.filename) - elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): - self.warn_file.append(self.filename) - else: - self.ok_file.append(self.filename) + if self.filename and self.filename != 'Name': + self.logger.debug("===== start to compare {} =====".format(self.filename)) + + self.file_datetime_string = file_dict.get('LastModified').split('.')[0] + self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') + self.logger.debug("file_datetime: {}".format(self.file_datetime)) + + self.current_datetime = self.__get_current_datetime() + self.logger.debug("current_datetime: {}".format(self.current_datetime)) + + self.__delta_datetime = self.current_datetime - self.file_datetime + self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) + self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) + self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) + if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): + self.crit_file.append(self.filename) + elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): + self.warn_file.append(self.filename) + else: + self.ok_file.append(self.filename) # Compare the vlaue. if self.crit_file: diff --git a/examples/Nagios/check_wmi_subprocess.py b/examples/Nagios/check_wmi_subprocess.py index 6643408..a468582 100755 --- a/examples/Nagios/check_wmi_subprocess.py +++ b/examples/Nagios/check_wmi_subprocess.py @@ -239,25 +239,26 @@ def fileage_handle(self): for file_dict in self.__file_list: self.filename = file_dict.get('Name') - self.logger.debug("===== start to compare {} =====".format(self.filename)) - - self.file_datetime_string = file_dict.get('LastModified').split('.')[0] - self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') - self.logger.debug("file_datetime: {}".format(self.file_datetime)) - - self.current_datetime = self.__get_current_datetime() - self.logger.debug("current_datetime: {}".format(self.current_datetime)) - - self.__delta_datetime = self.current_datetime - self.file_datetime - self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) - self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) - self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) - if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): - self.crit_file.append(self.filename) - elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): - self.warn_file.append(self.filename) - else: - self.ok_file.append(self.filename) + if self.filename and self.filename != 'Name': + self.logger.debug("===== start to compare {} =====".format(self.filename)) + + self.file_datetime_string = file_dict.get('LastModified').split('.')[0] + self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') + self.logger.debug("file_datetime: {}".format(self.file_datetime)) + + self.current_datetime = self.__get_current_datetime() + self.logger.debug("current_datetime: {}".format(self.current_datetime)) + + self.__delta_datetime = self.current_datetime - self.file_datetime + self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) + self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) + self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) + if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): + self.crit_file.append(self.filename) + elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): + self.warn_file.append(self.filename) + else: + self.ok_file.append(self.filename) # Compare the vlaue. if self.crit_file: diff --git a/pymonitoringplugins/__init__.pyc b/pymonitoringplugins/__init__.pyc deleted file mode 100644 index 9f4314222762d85c774d63506a0761e83328e8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmZuu%}N6?5KdcBiHJ9E!W`>mw_8+j6|pS!=U@>mMS2NwH{A_vc9tYt+9&amd>~)I z*;cRz6J|1h`7+<6_kGMizi!@B_PaWC-jldfQW;}&(j7MMu&m4GU6%FOTYs<3pHU@$ zEt_0d4i;!(B6E!{d`@+hOORCt=nG}RV5L1;ih@ThUBG#Q_1fyZ@X$}rVK|7cAdywG zg5+sDc?|fdEMb#(V3kvLsj`4iq){;lp$SfipkDJ);|sL$?p;V*oU~9?exDnu%OFL= zXUaN_RSdHz7_^&Dbqn@jH4H9c)a2VH2E+Iwilb|IeSzd{%K3ODO`{T>B;TOmY-sSv)c5MsIQlzhJN z<%XgVee&3!a!=%j1sWA@xTZ2R>jX0u{?p&Tv7I^kLjt=sm^G!kJ0aV(AH3h)@B9Fp Cl$r1ffG!cxRMqKnySC4q@2zDq4{)c|8M4y?vyZ}Z0Qfg->vv0GrGtWG0_s<1y{nv|+BT;``{J()_ zu0tpxb|D?18X|GTE)@K^B58<;D|TJssHV`a7+`cp{4B%^A->&h((>(2i>$0VLU^}A z6Gw7Trjd=aR1UI24s0&>$~aN-X>3O_pV|>-j15y27D^`ZUJ({kS_ZZ2dHpP(7V&Uo zWv9O)H#e?)D*IttK9l{gZ*P6o^=>AKd|)Vo>Yq@s6p zw~WYAG}7tt#&8nGNjJ(S-a}m&c-xZ?uXH!)>+Qs3Zf8`=&CliCGO66yxZ2yi+WX|1 zd~i?pw|6}6OKqYe&grT>PvY}kZQy&}u<;po$7yUi4tuYJrt8Ho@!9GiYQoM!+{>^s zD=ekuj?E9!LFhhS!oG>yE8+3m&ph_5GA28 z`-$mBWW9k#9`w=7?+_M$j(CnFH^jI>sdmsAyJCzp9Pz>t&h!^yXT-Qglb8!;Nsed5 zc#hm5y)DKbc~tAi$f;VN$1aymV#5Lfs-8G5RBK;9Ayj1)h87PtR6fkH50BE1MAM!W zPdrilCY+z(7TH-6sx6*7;tctjI^r?HwcYV>uPrkN`3+?R5w=ZqMwzj!Hb$VyX2kp>XW2UrZa$~3bFlQxrfqzRopdC7E6 zVF_Y~SeLmjd#?QfEuX~vh#rdV~D-39jQDlhQ_C) z`Ys8&CL4myIQ7Y-rStesS)qK&y=_C>eims)Gn*{aCu#OH?T{t5YjiRIE`Y)ggkWLr zLR%kY6TQx56@}}QX+KkXJ)cf0M91kcPf8qZ{&5U9I4oM9+&GVBEJL+zoqt8#mkUIx^gVm!lWzk7)G7T4QRw7ZA^<-EdT zk{K<*wNgI=>wA3=3N2Q+fHvNX$bp z+-}nbpO}XsXolPoK+b}*>?|FkWdWlc^FN^c3(JAVK!1Q#P|*{Z z2eC#*z=2>`=(9qBh=faPDyjk_g8$k=f%!mq^Fl39WvS!BVg&0!YKuahgyk9Ls%irm z>lANTeq+OF-f-r%4QGWq#~aQcv3-G;zK5kvhbixUTyo1$Qtkl!_qno-Ifs5$>HE*X ze)hYZHyhhTA8fnHFS)T~MjgI)%z)LLoS@wIO?4R(Bc0@ij^EC86c46ynw5nNU-?nc z<$_pyV2EGW)(-er=|NZ~HYT{RF+0sQ6IP)CwL&X%8B>S#ENSbitoO;-$V;8Nvtrl+ z{I<-6)sfZ^%dD-{Odp^B>*Y)HVQsS>e49OH)5=U(drl7mumse73_-p9U`S@%x0<3d z>Tu1>L8~5uC1`LyPIX|)y`WB1{RS2E9MOtUsUR$d&_>@BpgHOUzBx<5GYEtCGrs zRH*La5|BQuj1C2gE7W5%4x$5xaRrIR#pU@$DL9RUDL`@v*pV=CD+QRz zKwoV3;4x-mn-&07S`7`ba17#ND>fCK~AgN*ZmZ1>5X zqJ@l$CjS<_!Yj|o#xKLk41z%xlVc@PCp(JwF|L?=LA-%++2lZpUySR4>>5^UplNF- mpOyU0xDCv=1@gB{_LBa^xEIW~2l97MJ|?rDeWDmU2m%1;Xzwfl delta 303 zcmdmP*JI7j{F#^Q>N};4?2{O|Qj3#|G7CyF^Yb<@W-RAo+Q=|jhR0}g5U(y1BirT% z{s>0Kg3UJtR2i8LFiaBi&2~vmODxSPQOL>9OV2MYDJU&bD9*?)S4b^OEvhWZ$jnRE z<5GYEC!l0yeyKuoVxB^2aVl6(JVaA`PG)Xqi9$)f0+f*fk%k(XlbM%Vyg6RjjFG#H zfq|h|4oEPtO^n?x%ZCjwbElhego8K(eQI~b==UM7BpRf3a^Ut)5- z#BavAlRwDTuv!3h&Yt{7@)zS0Fy9);Uo^Qw`Zwch5P$Lq85YKslfTORV%!AeH!yCP NTqw7ny-kcA1OeeMYNh}H diff --git a/pymonitoringplugins/tests/test_wmi_sh.py b/pymonitoringplugins/tests/test_wmi_sh.py index 43292dc..6ddae2f 100755 --- a/pymonitoringplugins/tests/test_wmi_sh.py +++ b/pymonitoringplugins/tests/test_wmi_sh.py @@ -14,13 +14,13 @@ [1.0.0.0] 20160728 init for basic function. Example: - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\' -f '%%' -e '%%' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -r + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\' -f '%%' -e '%%' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -R Example: - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\' -f '%%' -e '%%' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -r + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\' -f '%%' -e '%%' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -R Example: check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug sqlserverlocks -m LockTimeoutsPersec -w 0 -c 0 check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug sqlserverlocks -m LockWaitsPersec -w 0 -c 0 @@ -254,25 +254,26 @@ def fileage_handle(self): for file_dict in self.__file_list: self.filename = file_dict.get('Name') - self.logger.debug("===== start to compare {} =====".format(self.filename)) - - self.file_datetime_string = file_dict.get('LastModified').split('.')[0] - self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') - self.logger.debug("file_datetime: {}".format(self.file_datetime)) - - self.current_datetime = self.__get_current_datetime() - self.logger.debug("current_datetime: {}".format(self.current_datetime)) - - self.__delta_datetime = self.current_datetime - self.file_datetime - self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) - self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) - self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) - if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): - self.crit_file.append(self.filename) - elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): - self.warn_file.append(self.filename) - else: - self.ok_file.append(self.filename) + if self.filename and self.filename != 'Name': + self.logger.debug("===== start to compare {} =====".format(self.filename)) + + self.file_datetime_string = file_dict.get('LastModified').split('.')[0] + self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') + self.logger.debug("file_datetime: {}".format(self.file_datetime)) + + self.current_datetime = self.__get_current_datetime() + self.logger.debug("current_datetime: {}".format(self.current_datetime)) + + self.__delta_datetime = self.current_datetime - self.file_datetime + self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) + self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) + self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) + if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): + self.crit_file.append(self.filename) + elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): + self.warn_file.append(self.filename) + else: + self.ok_file.append(self.filename) # Compare the vlaue. if self.crit_file: diff --git a/pymonitoringplugins/tests/test_wmi_subprocess.py b/pymonitoringplugins/tests/test_wmi_subprocess.py index 2b0574d..f104a3d 100755 --- a/pymonitoringplugins/tests/test_wmi_subprocess.py +++ b/pymonitoringplugins/tests/test_wmi_subprocess.py @@ -13,13 +13,13 @@ Description: [1.0.0.0] 20160728 init for basic function. Example: - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\' -f '%%' -e '%%' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -r + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\' -f '%%' -e '%%' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug filenumber -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -R Example: - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\' -f '%%' -e '%%' -r - check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -r + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\' -f '%%' -e '%%' -R + check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug fileage -d 'C:' -p '\\Windows\\' -f '%%' -e '%%' -R Example: check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug sqlserverlocks -m LockTimeoutsPersec -w 0 -c 0 check_wmi.py -H HOSTNAME -d [Domain] -u USER -p [password] --debug sqlserverlocks -m LockWaitsPersec -w 0 -c 0 @@ -253,25 +253,26 @@ def fileage_handle(self): for file_dict in self.__file_list: self.filename = file_dict.get('Name') - self.logger.debug("===== start to compare {} =====".format(self.filename)) - - self.file_datetime_string = file_dict.get('LastModified').split('.')[0] - self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') - self.logger.debug("file_datetime: {}".format(self.file_datetime)) - - self.current_datetime = self.__get_current_datetime() - self.logger.debug("current_datetime: {}".format(self.current_datetime)) - - self.__delta_datetime = self.current_datetime - self.file_datetime - self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) - self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) - self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) - if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): - self.crit_file.append(self.filename) - elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): - self.warn_file.append(self.filename) - else: - self.ok_file.append(self.filename) + if self.filename and self.filename != 'Name': + self.logger.debug("===== start to compare {} =====".format(self.filename)) + + self.file_datetime_string = file_dict.get('LastModified').split('.')[0] + self.file_datetime = datetime.datetime.strptime(self.file_datetime_string, '%Y%m%d%H%M%S') + self.logger.debug("file_datetime: {}".format(self.file_datetime)) + + self.current_datetime = self.__get_current_datetime() + self.logger.debug("current_datetime: {}".format(self.current_datetime)) + + self.__delta_datetime = self.current_datetime - self.file_datetime + self.logger.debug("delta_datetime: {}".format(self.__delta_datetime)) + self.logger.debug("warn_datetime: {}".format(datetime.timedelta(minutes=self.args.warning))) + self.logger.debug("crit_datetime: {}".format(datetime.timedelta(minutes=self.args.critical))) + if self.__delta_datetime > datetime.timedelta(minutes=self.args.critical): + self.crit_file.append(self.filename) + elif self.__delta_datetime > datetime.timedelta(minutes=self.args.warning): + self.warn_file.append(self.filename) + else: + self.ok_file.append(self.filename) # Compare the vlaue. if self.crit_file: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7067ef4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,21 @@ +appdirs==1.4.0 +cffi==1.9.1 +cryptography==1.7.2 +enum34==1.1.6 +idna==2.2 +ipaddress==1.0.18 +ntlm-auth==1.0.2 +ordereddict==1.1 +packaging==16.8 +paramiko==2.1.1 +pyasn1==0.2.2 +pycparser==2.17 +pymssql==2.1.3 +PyMySQL==0.7.9 +pyparsing==2.1.10 +pywinrm==0.2.2 +requests==2.13.0 +requests-ntlm==1.0.0 +sh==1.12.9 +six==1.10.0 +xmltodict==0.10.2