netkiller-devops 0.7.1__tar.gz → 0.7.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {netkiller-devops-0.7.1/netkiller_devops.egg-info → netkiller_devops-0.7.2}/PKG-INFO +13 -1
  2. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/README.md +6 -0
  3. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/docker.py +93 -62
  4. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2/netkiller_devops.egg-info}/PKG-INFO +13 -1
  5. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller_devops.egg-info/SOURCES.txt +0 -2
  6. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/setup.py +2 -2
  7. netkiller-devops-0.7.1/MANIFEST.in +0 -1
  8. netkiller-devops-0.7.1/etc/dump.ini +0 -31
  9. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/LICENSE +0 -0
  10. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/backup +0 -0
  11. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/chpasswd.sh +0 -0
  12. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/cicd +0 -0
  13. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/deployment +0 -0
  14. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/dingtalk +0 -0
  15. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/exceldiff +0 -0
  16. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/gitsync +0 -0
  17. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/logviewer +0 -0
  18. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/logviewer.docker +0 -0
  19. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/logviewer.kubectl +0 -0
  20. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/lrsync +0 -0
  21. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/matrixpasswd +0 -0
  22. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/mdump +0 -0
  23. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/merge +0 -0
  24. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/mysqlshell +0 -0
  25. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/nacos +0 -0
  26. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/osconf +0 -0
  27. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/randpasswd +0 -0
  28. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/randtext +0 -0
  29. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/sqldump +0 -0
  30. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/voice +0 -0
  31. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/bin/wechat +0 -0
  32. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/doc/voice.md +0 -0
  33. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/doc/wechat.md +0 -0
  34. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/deployment.cfg +0 -0
  35. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/dump.ini.sample +0 -0
  36. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/logviewer.ini +0 -0
  37. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/mongo.ini.sample +0 -0
  38. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/notification.ini +0 -0
  39. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/os.ini +0 -0
  40. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/schedule.cfg +0 -0
  41. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/etc/task.cfg +0 -0
  42. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/__init__.py +0 -0
  43. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/cicd.py +0 -0
  44. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/git.py +0 -0
  45. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/gitlab.py +0 -0
  46. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/kubernetes.py +0 -0
  47. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/mongo.py +0 -0
  48. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/mysql.py +0 -0
  49. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/nacos.py +0 -0
  50. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/nagios.py +0 -0
  51. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/pipeline.py +0 -0
  52. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/podman.py +0 -0
  53. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/rsync.py +0 -0
  54. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/svg.py +0 -0
  55. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/wework.py +0 -0
  56. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller/whiptail.py +0 -0
  57. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller_devops.egg-info/dependency_links.txt +0 -0
  58. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller_devops.egg-info/requires.txt +0 -0
  59. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/netkiller_devops.egg-info/top_level.txt +0 -0
  60. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/setup.cfg +0 -0
  61. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/share/example/testing/example.com.ini +0 -0
  62. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/share/profile.d/devops.sh +0 -0
  63. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/shell/backup/backup.mysql.gpg.sh +0 -0
  64. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/shell/backup/backup.mysql.sh +0 -0
  65. {netkiller-devops-0.7.1 → netkiller_devops-0.7.2}/shell/backup/backup.mysql.struct.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: netkiller-devops
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: DevOps of useful deployment and automation
5
5
  Home-page: https://github.com/oscm/devops
6
6
  Author: Neo Chen
@@ -13,6 +13,12 @@ Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: OS Independent
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
+ Requires-Dist: ruamel.yaml
17
+ Requires-Dist: requests
18
+ Requires-Dist: redis
19
+ Requires-Dist: pyttsx3
20
+ Requires-Dist: simple_term_menu
21
+ Requires-Dist: prompt_toolkit
16
22
 
17
23
  DevOps Tools
18
24
  ====
@@ -64,6 +70,12 @@ Deployment
64
70
  python36 setup.py sdist
65
71
  python36 setup.py install --prefix=/srv/devops
66
72
 
73
+ ### Deploy Pypi
74
+
75
+ $ pip install setuptools wheel
76
+ $ python3 setup.py sdist bdist_wheel
77
+ $ twine upload dist/netkiller-devops-x.x.x.tar.gz
78
+
67
79
  Backup
68
80
  ------
69
81
  [Data backup tools](https://github.com/netkiller/devops/blob/master/doc/backup.md).
@@ -48,6 +48,12 @@ Deployment
48
48
  python36 setup.py sdist
49
49
  python36 setup.py install --prefix=/srv/devops
50
50
 
51
+ ### Deploy Pypi
52
+
53
+ $ pip install setuptools wheel
54
+ $ python3 setup.py sdist bdist_wheel
55
+ $ twine upload dist/netkiller-devops-x.x.x.tar.gz
56
+
51
57
  Backup
52
58
  ------
53
59
  [Data backup tools](https://github.com/netkiller/devops/blob/master/doc/backup.md).
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import os, sys
3
+ import copy
3
4
  import json
4
5
  from ruamel.yaml import YAML
5
6
  from ruamel.yaml.scalarstring import PreservedScalarString as pss
@@ -388,7 +389,7 @@ class Services(Common):
388
389
  return None
389
390
 
390
391
  def dump(self):
391
- yaml = self.yaml.dump(self.service)
392
+ yaml = self.yaml.dump(self.service[self.name], sys.stdout)
392
393
  # self.logger.debug(yaml)
393
394
  return yaml
394
395
 
@@ -435,19 +436,26 @@ class Composes(Common):
435
436
  if isinstance(obj, Services):
436
437
  if obj.dockerfile:
437
438
  self.dockerfile[obj.name] = obj.dockerfile
438
- self.compose["services"].update(obj.service)
439
+ # service = obj.service.copy()
440
+ # service = dict(obj.service)
441
+ service = copy.deepcopy(obj.service)
442
+ # obj.dump()
443
+ self.compose["services"].update(service)
444
+ # print(self.compose["services"])
439
445
  return self
440
446
 
441
447
  def networks(self, obj):
442
- self.compose["networks"] = obj.networks
448
+ self.compose["networks"] = copy.deepcopy(obj.networks)
443
449
  return self
444
450
 
445
451
  def volumes(self, obj):
446
- self.compose["volumes"] = obj.volumes
452
+ self.compose["volumes"] = copy.deepcopy(obj.volumes)
447
453
  return self
448
454
 
449
455
  def debug(self):
450
- jsonformat = json.dumps(self.compose, sort_keys=True, indent=4, separators=(",", ":"))
456
+ jsonformat = json.dumps(
457
+ self.compose, sort_keys=True, indent=4, separators=(",", ":")
458
+ )
451
459
  return jsonformat
452
460
 
453
461
  def dump(self):
@@ -499,7 +507,9 @@ class Composes(Common):
499
507
  d = ""
500
508
  if self.daemon:
501
509
  d = "-d"
502
- command = self.__command("up {daemon} {service}".format(daemon=d, service=service))
510
+ command = self.__command(
511
+ "up {daemon} {service}".format(daemon=d, service=service)
512
+ )
503
513
  self.execute(command)
504
514
  return self
505
515
 
@@ -552,12 +562,16 @@ class Composes(Common):
552
562
  tail = ""
553
563
  if follow:
554
564
  tail = "-f --tail=50"
555
- command = self.__command("logs {follow} {service}".format(follow=tail, service=service))
565
+ command = self.__command(
566
+ "logs {follow} {service}".format(follow=tail, service=service)
567
+ )
556
568
  self.execute(command)
557
569
  return self
558
570
 
559
571
  def exec(self, service, cmd):
560
- command = self.__command("exec {service} {cmd}".format(service=service, cmd=cmd))
572
+ command = self.__command(
573
+ "exec {service} {cmd}".format(service=service, cmd=cmd)
574
+ )
561
575
  self.execute(command)
562
576
  return self
563
577
 
@@ -624,7 +638,9 @@ class Docker(Common):
624
638
 
625
639
  usage = "usage: %prog [options] up|rm|start|stop|restart|logs|top|images|exec <service>"
626
640
  self.parser = OptionParser(usage)
627
- self.parser.add_option("", "--debug", action="store_true", dest="debug", help="debug mode")
641
+ self.parser.add_option(
642
+ "", "--debug", action="store_true", dest="debug", help="debug mode"
643
+ )
628
644
  self.parser.add_option(
629
645
  "-e",
630
646
  "--environment",
@@ -632,8 +648,12 @@ class Docker(Common):
632
648
  help="environment",
633
649
  metavar="development|testing|production",
634
650
  )
635
- self.parser.add_option("-d", "--daemon", dest="daemon", action="store_true", help="run as daemon")
636
- self.parser.add_option("", "--logfile", dest="logfile", help="logs file.", default="debug.log")
651
+ self.parser.add_option(
652
+ "-d", "--daemon", dest="daemon", action="store_true", help="run as daemon"
653
+ )
654
+ self.parser.add_option(
655
+ "", "--logfile", dest="logfile", help="logs file.", default="debug.log"
656
+ )
637
657
  self.parser.add_option(
638
658
  "-l",
639
659
  "--list",
@@ -669,7 +689,9 @@ class Docker(Common):
669
689
  action="store_true",
670
690
  help="build docker image",
671
691
  )
672
- self.parser.add_option("", "--local", dest="local", action="store_true", help="local docker")
692
+ self.parser.add_option(
693
+ "", "--local", dest="local", action="store_true", help="local docker"
694
+ )
673
695
  (self.options, self.args) = self.parser.parse_args()
674
696
  if self.options.daemon:
675
697
  self.daemon = True
@@ -705,7 +727,9 @@ class Docker(Common):
705
727
  def env(self, default):
706
728
  # if not self.environ :
707
729
  self.environ = default
708
- self.logger.info("%s %s %s" % ("-" * 10, "default environment variable", "-" * 10))
730
+ self.logger.info(
731
+ "%s %s %s" % ("-" * 10, "default environment variable", "-" * 10)
732
+ )
709
733
  self.logger.info(self.environ)
710
734
  self.logger.info("-" * 50)
711
735
  return self
@@ -720,6 +744,7 @@ class Docker(Common):
720
744
  compose.env(self.environ)
721
745
  self.logger.info("Override [%s] environ: %s" % (compose.name, self.environ))
722
746
  compose.workdir(self.workdir)
747
+ # print(compose.dump())
723
748
  self.composes[compose.name] = compose
724
749
  self.logger.info("Add environment: %s" % (compose.name))
725
750
  return self
@@ -872,12 +897,11 @@ class Docker(Common):
872
897
  compose = self.composes[self.options.environment]
873
898
  compose.dump()
874
899
  # if compose:
875
- # print(compose)
876
900
  else:
877
- for env, value in self.composes.items():
878
- compose = value.dump()
901
+ for env, compose in self.composes.items():
902
+ print(f"---------- {env} ----------")
879
903
  if compose:
880
- print(compose)
904
+ print(compose.dump())
881
905
 
882
906
  def save_all(self):
883
907
  if self.options.environment and self.options.environment in self.composes:
@@ -899,20 +923,24 @@ class Docker(Common):
899
923
  def usage(self):
900
924
  print("Python controls the docker manager.")
901
925
  self.parser.print_help()
902
- print("\nHomepage: http://www.netkiller.cn\tAuthor: Neo <netkiller@msn.com>\nHelp: https://github.com/netkiller/devops/blob/master/doc/docker.md")
926
+ print(
927
+ "\nHomepage: http://www.netkiller.cn\tAuthor: Neo <netkiller@msn.com>\nHelp: https://github.com/netkiller/devops/blob/master/doc/docker.md"
928
+ )
903
929
  exit()
904
930
 
905
931
  def main(self):
906
- if self.options.export:
907
- self.save_all()
908
- exit()
909
932
  if self.options.compose:
910
933
  self.dump()
911
934
  exit()
912
- if self.options.list:
913
- self.list()
914
935
 
915
- if not self.options.environment and len(self.composes) > 1:
936
+ # if not self.options.environment and len(self.composes) > 1:
937
+ # self.list()
938
+
939
+ if self.options.export:
940
+ self.save_all()
941
+ exit()
942
+
943
+ if self.options.list:
916
944
  self.list()
917
945
 
918
946
  if self.options.build:
@@ -920,43 +948,46 @@ class Docker(Common):
920
948
  self.build(self.service)
921
949
  exit()
922
950
 
923
- if not self.args:
924
- self.usage()
951
+ if self.options.environment:
952
+ if not self.args:
953
+ self.list()
925
954
 
926
- if len(self.args) > 1:
927
- self.service = " ".join(self.args[1:2])
928
- else:
929
- self.service = ""
930
- self.logger.debug("service: " + self.service)
931
-
932
- if self.args[0] == "ls":
933
- self.ls()
934
- elif self.args[0] == "up":
935
- self.up(self.service)
936
- elif self.args[0] == "down":
937
- self.down(self.service)
938
- self.logger.info("down " + self.service)
939
- elif self.args[0] == "rm":
940
- self.rm(self.service)
941
- self.logger.info("rm " + self.service)
942
- elif self.args[0] == "start":
943
- self.start(self.service)
944
- self.logger.info("start " + self.service)
945
- elif self.args[0] == "stop":
946
- self.stop(self.service)
947
- self.logger.info("stop " + self.service)
948
- elif self.args[0] == "restart":
949
- self.restart(self.service)
950
- self.logger.info("restart" + self.service)
951
- elif self.args[0] == "ps":
952
- self.ps(self.service)
953
- elif self.args[0] == "top":
954
- self.top(self.service)
955
- elif self.args[0] == "images":
956
- self.images(self.service)
957
- elif self.args[0] == "logs":
958
- self.logs(self.service, self.options.follow)
959
- elif self.args[0] == "exec":
960
- self.exec(self.service, self.args[2:])
955
+ if len(self.args) > 1:
956
+ self.service = " ".join(self.args[1:2])
957
+ else:
958
+ self.service = ""
959
+ self.logger.debug("service: " + self.service)
960
+
961
+ if self.args[0] == "ls":
962
+ self.ls()
963
+ elif self.args[0] == "up":
964
+ self.up(self.service)
965
+ elif self.args[0] == "down":
966
+ self.down(self.service)
967
+ self.logger.info("down " + self.service)
968
+ elif self.args[0] == "rm":
969
+ self.rm(self.service)
970
+ self.logger.info("rm " + self.service)
971
+ elif self.args[0] == "start":
972
+ self.start(self.service)
973
+ self.logger.info("start " + self.service)
974
+ elif self.args[0] == "stop":
975
+ self.stop(self.service)
976
+ self.logger.info("stop " + self.service)
977
+ elif self.args[0] == "restart":
978
+ self.restart(self.service)
979
+ self.logger.info("restart" + self.service)
980
+ elif self.args[0] == "ps":
981
+ self.ps(self.service)
982
+ elif self.args[0] == "top":
983
+ self.top(self.service)
984
+ elif self.args[0] == "images":
985
+ self.images(self.service)
986
+ elif self.args[0] == "logs":
987
+ self.logs(self.service, self.options.follow)
988
+ elif self.args[0] == "exec":
989
+ self.exec(self.service, self.args[2:])
990
+ else:
991
+ self.usage()
961
992
  else:
962
- self.usage()
993
+ self.list()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: netkiller-devops
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: DevOps of useful deployment and automation
5
5
  Home-page: https://github.com/oscm/devops
6
6
  Author: Neo Chen
@@ -13,6 +13,12 @@ Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: OS Independent
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
+ Requires-Dist: ruamel.yaml
17
+ Requires-Dist: requests
18
+ Requires-Dist: redis
19
+ Requires-Dist: pyttsx3
20
+ Requires-Dist: simple_term_menu
21
+ Requires-Dist: prompt_toolkit
16
22
 
17
23
  DevOps Tools
18
24
  ====
@@ -64,6 +70,12 @@ Deployment
64
70
  python36 setup.py sdist
65
71
  python36 setup.py install --prefix=/srv/devops
66
72
 
73
+ ### Deploy Pypi
74
+
75
+ $ pip install setuptools wheel
76
+ $ python3 setup.py sdist bdist_wheel
77
+ $ twine upload dist/netkiller-devops-x.x.x.tar.gz
78
+
67
79
  Backup
68
80
  ------
69
81
  [Data backup tools](https://github.com/netkiller/devops/blob/master/doc/backup.md).
@@ -1,5 +1,4 @@
1
1
  LICENSE
2
- MANIFEST.in
3
2
  README.md
4
3
  setup.py
5
4
  bin/backup
@@ -27,7 +26,6 @@ bin/wechat
27
26
  doc/voice.md
28
27
  doc/wechat.md
29
28
  etc/deployment.cfg
30
- etc/dump.ini
31
29
  etc/dump.ini.sample
32
30
  etc/logviewer.ini
33
31
  etc/mongo.ini.sample
@@ -9,7 +9,7 @@ with open("README.md", "r") as fh:
9
9
 
10
10
  setup(
11
11
  name="netkiller-devops",
12
- version="0.7.1",
12
+ version="0.7.2",
13
13
  author="Neo Chen",
14
14
  author_email="netkiller@msn.com",
15
15
  description="DevOps of useful deployment and automation",
@@ -86,7 +86,7 @@ setup(
86
86
  "share",
87
87
  ["share/example/testing/example.com.ini", "share/profile.d/devops.sh"],
88
88
  ),
89
- ("share/devops", ["doc/wechat.md", "doc/voice.md"])
89
+ ("share/devops", ["doc/wechat.md", "doc/voice.md"]),
90
90
  # ('example/testing', ['example/testing/example.com.ini']),
91
91
  # ('example/config/testing', ['example/config/testing/www.example.com.ini']),
92
92
  # ('example/exclude/testing', ['example/exclude/testing/www.example.com.lst'])
@@ -1 +0,0 @@
1
- include shell
@@ -1,31 +0,0 @@
1
- [DEFAULT]
2
- ;directory=/opt/backup
3
- ;设置备份目录
4
- directory=/tmp/backup
5
- ;设置日志文件
6
- logfile=/tmp/dump.log
7
-
8
- [dev]
9
- host=192.168.30.11
10
- user=root
11
- pass=test
12
- dbname=test
13
- description=这是测试环境的数据库
14
-
15
- [test]
16
- host=192.168.10.10
17
- user=test
18
- pass=test
19
- dbname=test test1 test2 test3 test4
20
-
21
- [stage]
22
- user=root
23
- dbname=stage
24
- pass=
25
- dbname=test
26
-
27
- [prod]
28
- user=root
29
- dbname=prod
30
- pass=
31
- dbname=test