From 032953a63d501de22aaf0fbb005af352fe9b540e Mon Sep 17 00:00:00 2001 From: Ahmed Bilal Khalid Date: Wed, 11 Sep 2019 18:01:15 +0500 Subject: [PATCH] refactoring --- .gitignore | 0 Pipfile | 3 + Pipfile.lock | 354 +++++++++++++++++----- __init__.py | 0 docs/Makefile | 7 - docs/ucloud-general-working (current).dot | 56 ---- docs/ucloud-networking.dot | 36 --- docs/ucloud-vm-states.dot | 27 -- docs/vm_states.dot | 39 --- helpers.py | 5 +- host.py | 19 +- rbd.py | 15 - request.py | 20 +- vm.py | 26 +- 14 files changed, 318 insertions(+), 289 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 Pipfile mode change 100644 => 100755 __init__.py delete mode 100644 docs/Makefile delete mode 100644 docs/ucloud-general-working (current).dot delete mode 100644 docs/ucloud-networking.dot delete mode 100644 docs/ucloud-vm-states.dot delete mode 100644 docs/vm_states.dot mode change 100644 => 100755 helpers.py mode change 100644 => 100755 host.py delete mode 100644 rbd.py mode change 100644 => 100755 request.py mode change 100644 => 100755 vm.py diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/Pipfile b/Pipfile old mode 100644 new mode 100755 index 78ddc12..d4ce9f2 --- a/Pipfile +++ b/Pipfile @@ -4,10 +4,13 @@ url = "https://pypi.org/simple" verify_ssl = true [dev-packages] +prospector = "*" [packages] python-etcd3 = {editable = true,git = "https://github.com/kragniz/python-etcd3"} pylint = "*" +python-decouple = "*" +etcd3-wrapper = "*" [requires] python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index 20edd9a..2f04432 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "ffcb074068a4397c180d89ef54fa8dfe23f2a7625c422bb69e932fa2718da782" + "sha256": "604b7a6ab5b88d56f3da614c0eb9c38e74a13274e45d5a1bbb58a3415ad100e5" }, "pipfile-spec": 6, "requires": { @@ -23,42 +23,50 @@ ], "version": "==2.2.5" }, + "etcd3-wrapper": { + "hashes": [ + "sha256:849324d787336321ddb30c6f7149449cfb04b7c33b3945d191c82fbd789a082e", + "sha256:fd1a09e8c190a48cc5bf4854248528cb839331f262ee816a35497ac2c03c3bd1" + ], + "index": "pypi", + "version": "==0.5" + }, "grpcio": { "hashes": [ - "sha256:03b78b4e7dcdfe3e257bb528cc93923f9cbbab6d5babf15a60d21e9a4a70b1a2", - "sha256:1ce0ccfbdfe84387dbcbf44adb4ae16ec7ae70e166ffab478993eb1ea1cba3ce", - "sha256:22e167a9406d73dd19ffe8ed6a485f17e6eac82505be8c108897f15e68badcbb", - "sha256:31d0aeca8d8ee2301c62c5c340e0889d653b1280d68f9fa203982cb6337b050e", - "sha256:44c7f99ca17ebbcc96fc54ed00b454d8313f1eac28c563098d8b901025aff941", - "sha256:5471444f53f9db6a1f1f11f5dbc173228881df8446380b6b98f90afb8fd8348e", - "sha256:561bca3b1bde6d6564306eb05848fd155136e9c3a25d2961129b1e2edba22fce", - "sha256:5bf58e1d2c2f55365c06e8cb5abe067b88ca2e5550fb62009c41df4b54505acf", - "sha256:6b7163d1e85d76b0815df63fcc310daec02b44532bb433f743142d4febcb181f", - "sha256:766d79cddad95f5f6020037fe60ea8b98578afdf0c59d5a60c106c1bdd886303", - "sha256:770b7372d5ca68308ff66d7baee53369fa5ce985f84bcb6aa1948c1f2f7b02f2", - "sha256:7ab178da777fc0f55b6aef5a755f99726e8e4b75e3903954df07b27059b54fcf", - "sha256:8078305e77c2f6649d36b24d8778096413e474d9d7892c6f92cfb589c9d71b2e", - "sha256:85600b63a386d860eeaa955e9335e18dd0d7e5477e9214825abf2c2884488369", - "sha256:857d9b939ae128be1c0c792eb885c7ff6a386b9dea899ac4b06f4d90a31f9d87", - "sha256:87a41630c90c179fa5c593400f30a467c498972c702f348d41e19dafeb1d319e", - "sha256:8805d486c6128cc0fcc8ecf16c4095d99a8693a541ef851429ab334e028a4a97", - "sha256:8d71b7a89c306a41ccc7741fc9409b14f5b86727455c2a1c0c7cfcb0f784e1f2", - "sha256:9e1b80bd65f8f160880cb4dad7f55697f6d37b2d7f251fc0c2128e811928f369", - "sha256:9e290c84a145ae2411ee0ec9913c41cd7500e2e7485fe93632434d84ef4fda67", - "sha256:9ec9f88b5bc94bd99372f27cdd53af1c92ba06717380b127733b953cfb181174", - "sha256:a0a02a8b4ba6deadf706d5f849539b3685b72b186a3c9ef5d43e8972ed60fb6f", - "sha256:a4059c59519f5940e01a071f74ae2a60ea8f6185b03d22a09d40c7959a36b16b", - "sha256:a6e028c2a6da2ebfa2365a5b32531d311fbfec0e3600fc27e901b64f0ff7e54e", - "sha256:adcdebf9f8463df4120c427cf6c9aed39258bccd03ed37b6939e7a145d64d6e0", - "sha256:bdec982610259d07156a58f80b8c3e69be7751a9208bc577b059c5193d087fad", - "sha256:cefc4d4251ffb73feb303d4b7e9d6c367cb60f2db16d259ea28b114045f965aa", - "sha256:d4145c8aa6afbac10ad27e408f7ce15992fe89ba5d0b4abca31c0c2729864c03", - "sha256:da76dc5ad719ee99de5ea28a5629ff92172cbb4a70d8a6ae3a5b7a53c7382ce1", - "sha256:dde2452c08ef8b6426ccab6b5b6de9f06d836d9937d6870e68153cbf8cb49348", - "sha256:e3d88091d2539a4868750914a6fe7b9ec50e42b913851fc1b77423b5bd918530", - "sha256:f9c67cfe6278499d7f83559dc6322a8bbb108e307817a3d7acbfea807b3603cc" + "sha256:1303578092f1f6e4bfbc354c04ac422856c393723d3ffa032fff0f7cb5cfd693", + "sha256:229c6b313cd82bec8f979b059d87f03cc1a48939b543fe170b5a9c5cf6a6bc69", + "sha256:3cd3d99a8b5568d0d186f9520c16121a0f2a4bcad8e2b9884b76fb88a85a7774", + "sha256:41cfb222db358227521f9638a6fbc397f310042a4db5539a19dea01547c621cd", + "sha256:43330501660f636fd6547d1e196e395cd1e2c2ae57d62219d6184a668ffebda0", + "sha256:45d7a2bd8b4f25a013296683f4140d636cdbb507d94a382ea5029a21e76b1648", + "sha256:47dc935658a13b25108823dabd010194ddea9610357c5c1ef1ad7b3f5157ebee", + "sha256:480aa7e2b56238badce0b9413a96d5b4c90c3bfbd79eba5a0501e92328d9669e", + "sha256:4a0934c8b0f97e1d8c18e76c45afc0d02d33ab03125258179f2ac6c7a13f3626", + "sha256:5624dab19e950f99e560400c59d87b685809e4cfcb2c724103f1ab14c06071f7", + "sha256:60515b1405bb3dadc55e6ca99429072dad3e736afcf5048db5452df5572231ff", + "sha256:610f97ebae742a57d336a69b09a9c7d7de1f62aa54aaa8adc635b38f55ba4382", + "sha256:64ea189b2b0859d1f7b411a09185028744d494ef09029630200cc892e366f169", + "sha256:686090c6c1e09e4f49585b8508d0a31d58bc3895e4049ea55b197d1381e9f70f", + "sha256:7745c365195bb0605e3d47b480a2a4d1baa8a41a5fd0a20de5fa48900e2c886a", + "sha256:79491e0d2b77a1c438116bf9e5f9e2e04e78b78524615e2ce453eff62db59a09", + "sha256:825177dd4c601c487836b7d6b4ba268db59787157911c623ba59a7c03c8d3adc", + "sha256:8a060e1f72fb94eee8a035ed29f1201ce903ad14cbe27bda56b4a22a8abda045", + "sha256:90168cc6353e2766e47b650c963f21cfff294654b10b3a14c67e26a4e3683634", + "sha256:94b7742734bceeff6d8db5edb31ac844cb68fc7f13617eca859ff1b78bb20ba1", + "sha256:962aebf2dd01bbb2cdb64580e61760f1afc470781f9ecd5fe8f3d8dcd8cf4556", + "sha256:9c8d9eacdce840b72eee7924c752c31b675f8aec74790e08cff184a4ea8aa9c1", + "sha256:af5b929debc336f6bab9b0da6915f9ee5e41444012aed6a79a3c7e80d7662fdf", + "sha256:b9cdb87fc77e9a3eabdc42a512368538d648fa0760ad30cf97788076985c790a", + "sha256:c5e6380b90b389454669dc67d0a39fb4dc166416e01308fcddd694236b8329ef", + "sha256:d60c90fe2bfbee735397bf75a2f2c4e70c5deab51cd40c6e4fa98fae018c8db6", + "sha256:d8582c8b1b1063249da1588854251d8a91df1e210a328aeb0ece39da2b2b763b", + "sha256:ddbf86ba3aa0ad8fed2867910d2913ee237d55920b55f1d619049b3399f04efc", + "sha256:e46bc0664c5c8a0545857aa7a096289f8db148e7f9cca2d0b760113e8994bddc", + "sha256:f6437f70ec7fed0ca3a0eef1146591bb754b418bb6c6b21db74f0333d624e135", + "sha256:f71693c3396530c6b00773b029ea85e59272557e9bd6077195a6593e4229892a", + "sha256:f79f7455f8fbd43e8e9d61914ecf7f48ba1c8e271801996fef8d6a8f3cc9f39f" ], - "version": "==1.22.0" + "version": "==1.23.0" }, "isort": { "hashes": [ @@ -69,26 +77,26 @@ }, "lazy-object-proxy": { "hashes": [ - "sha256:159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661", - "sha256:23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f", - "sha256:3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13", - "sha256:3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821", - "sha256:4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71", - "sha256:4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e", - "sha256:64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea", - "sha256:6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229", - "sha256:7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4", - "sha256:7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e", - "sha256:8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20", - "sha256:a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16", - "sha256:acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b", - "sha256:be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7", - "sha256:bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c", - "sha256:c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a", - "sha256:dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e", - "sha256:e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1" + "sha256:02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf", + "sha256:18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3", + "sha256:1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce", + "sha256:2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f", + "sha256:616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f", + "sha256:63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0", + "sha256:77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e", + "sha256:83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905", + "sha256:84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8", + "sha256:874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2", + "sha256:9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009", + "sha256:a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a", + "sha256:a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512", + "sha256:ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5", + "sha256:ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e", + "sha256:b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4", + "sha256:c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f", + "sha256:fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1" ], - "version": "==1.4.1" + "version": "==1.4.2" }, "mccabe": { "hashes": [ @@ -99,26 +107,24 @@ }, "protobuf": { "hashes": [ - "sha256:05c36022fef3c7d3562ac22402965c0c2b9fe8421f459bb377323598996e407f", - "sha256:139b7eadcca0a861d60b523cb37d9475505e0dfb07972436b15407c2b968d87e", - "sha256:15f683006cb77fb849b1f561e509b03dd2b7dcc749086b8dd1831090d0ba4740", - "sha256:2ad566b7b7cdd8717c7af1825e19f09e8fef2787b77fcb979588944657679604", - "sha256:35cfcf97642ef62108e10a9431c77733ec7eaab8e32fe4653de20403429907cb", - "sha256:387822859ecdd012fdc25ec879f7f487da6e1d5b1ae6115e227e6be208836f71", - "sha256:4df14cbe1e7134afcfdbb9f058949e31c466de27d9b2f7fb4da9e0b67231b538", - "sha256:586c4ca37a7146d4822c700059f150ac3445ce0aef6f3ea258640838bb892dc2", - "sha256:58b11e530e954d29ab3180c48dc558a409f705bf16739fd4e0d3e07924ad7add", - "sha256:63c8c98ccb8c95f41c18fb829aeeab21c6249adee4ed75354125bdc44488f30e", - "sha256:72edcbacd0c73eef507d2ff1af99a6c27df18e66a3ff4351e401182e4de62b03", - "sha256:83dc8a561b3b954fd7002c690bb83278b8d1742a1e28abba9aaef28b0c8b437d", - "sha256:913171ecc84c2726b86574e40549a0ea619d569657c5a5ff782a3be7d81401a5", - "sha256:aabb7c741d3416671c3e6fe7c52970a226e6a8274417a97d7d795f953fadef36", - "sha256:b3452bbda12b1cbe2187d416779de07b2ab4c497d83a050e43c344778763721d", - "sha256:c5d5b8d4a9212338297fa1fa44589f69b470c0ba1d38168b432d577176b386a8", - "sha256:d86ee389c2c4fc3cebabb8ce83a8e97b6b3b5dc727b7419c1ccdc7b6e545a233", - "sha256:f2db8c754de788ab8be5e108e1e967c774c0942342b4f8aaaf14063889a6cfdc" + "sha256:00a1b0b352dc7c809749526d1688a64b62ea400c5b05416f93cfb1b11a036295", + "sha256:01acbca2d2c8c3f7f235f1842440adbe01bbc379fa1cbdd80753801432b3fae9", + "sha256:0a795bca65987b62d6b8a2d934aa317fd1a4d06a6dd4df36312f5b0ade44a8d9", + "sha256:0ec035114213b6d6e7713987a759d762dd94e9f82284515b3b7331f34bfaec7f", + "sha256:31b18e1434b4907cb0113e7a372cd4d92c047ce7ba0fa7ea66a404d6388ed2c1", + "sha256:32a3abf79b0bef073c70656e86d5bd68a28a1fbb138429912c4fc07b9d426b07", + "sha256:55f85b7808766e5e3f526818f5e2aeb5ba2edcc45bcccede46a3ccc19b569cb0", + "sha256:64ab9bc971989cbdd648c102a96253fdf0202b0c38f15bd34759a8707bdd5f64", + "sha256:64cf847e843a465b6c1ba90fb6c7f7844d54dbe9eb731e86a60981d03f5b2e6e", + "sha256:917c8662b585470e8fd42f052661fc66d59fccaae450a60044307dcbf82a3335", + "sha256:afed9003d7f2be2c3df20f64220c30faec441073731511728a2cb4cab4cd46a6", + "sha256:bf8e05d638b585d1752c5a84247134a0350d3a8b73d3632489a014a9f6f1e758", + "sha256:d831b047bd69becaf64019a47179eb22118a50dd008340655266a906c69c6417", + "sha256:de2760583ed28749ff885789c1cbc6c9c06d6de92fc825740ab99deb2f25ea4d", + "sha256:eabc4cf1bc19689af8022ba52fd668564a8d96e0d08f3b4732d26a64255216a4", + "sha256:fcff6086c86fb1628d94ea455c7b9de898afc50378042927a59df8065a79a549" ], - "version": "==3.9.0" + "version": "==3.9.1" }, "pylint": { "hashes": [ @@ -128,6 +134,13 @@ "index": "pypi", "version": "==2.3.1" }, + "python-decouple": { + "hashes": [ + "sha256:1317df14b43efee4337a4aa02914bf004f010cd56d6c4bd894e6474ec8c4fe2d" + ], + "index": "pypi", + "version": "==3.1" + }, "python-etcd3": { "editable": true, "git": "https://github.com/kragniz/python-etcd3", @@ -142,10 +155,10 @@ }, "tenacity": { "hashes": [ - "sha256:a0c3c5f7ae0c33f5556c775ca059c12d6fd8ab7121613a713e8b7d649908571b", - "sha256:b87c1934daa0b2ccc7db153c37b8bf91d12f165936ade8628e7b962b92dc7705" + "sha256:6a7511a59145c2e319b7d04ddd93c12d48cc3d3c8fa42c2846d33a620ee91f57", + "sha256:a4eb168dbf55ed2cae27e7c6b2bd48ab54dabaf294177d998330cf59f294c112" ], - "version": "==5.0.4" + "version": "==5.1.1" }, "typed-ast": { "hashes": [ @@ -175,5 +188,194 @@ "version": "==1.11.2" } }, - "develop": {} + "develop": { + "astroid": { + "hashes": [ + "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", + "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" + ], + "version": "==2.2.5" + }, + "dodgy": { + "hashes": [ + "sha256:65e13cf878d7aff129f1461c13cb5fd1bb6dfe66bb5327e09379c3877763280c" + ], + "version": "==0.1.9" + }, + "isort": { + "hashes": [ + "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", + "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" + ], + "version": "==4.3.21" + }, + "lazy-object-proxy": { + "hashes": [ + "sha256:02b260c8deb80db09325b99edf62ae344ce9bc64d68b7a634410b8e9a568edbf", + "sha256:18f9c401083a4ba6e162355873f906315332ea7035803d0fd8166051e3d402e3", + "sha256:1f2c6209a8917c525c1e2b55a716135ca4658a3042b5122d4e3413a4030c26ce", + "sha256:2f06d97f0ca0f414f6b707c974aaf8829c2292c1c497642f63824119d770226f", + "sha256:616c94f8176808f4018b39f9638080ed86f96b55370b5a9463b2ee5c926f6c5f", + "sha256:63b91e30ef47ef68a30f0c3c278fbfe9822319c15f34b7538a829515b84ca2a0", + "sha256:77b454f03860b844f758c5d5c6e5f18d27de899a3db367f4af06bec2e6013a8e", + "sha256:83fe27ba321e4cfac466178606147d3c0aa18e8087507caec78ed5a966a64905", + "sha256:84742532d39f72df959d237912344d8a1764c2d03fe58beba96a87bfa11a76d8", + "sha256:874ebf3caaf55a020aeb08acead813baf5a305927a71ce88c9377970fe7ad3c2", + "sha256:9f5caf2c7436d44f3cec97c2fa7791f8a675170badbfa86e1992ca1b84c37009", + "sha256:a0c8758d01fcdfe7ae8e4b4017b13552efa7f1197dd7358dc9da0576f9d0328a", + "sha256:a4def978d9d28cda2d960c279318d46b327632686d82b4917516c36d4c274512", + "sha256:ad4f4be843dace866af5fc142509e9b9817ca0c59342fdb176ab6ad552c927f5", + "sha256:ae33dd198f772f714420c5ab698ff05ff900150486c648d29951e9c70694338e", + "sha256:b4a2b782b8a8c5522ad35c93e04d60e2ba7f7dcb9271ec8e8c3e08239be6c7b4", + "sha256:c462eb33f6abca3b34cdedbe84d761f31a60b814e173b98ede3c81bb48967c4f", + "sha256:fd135b8d35dfdcdb984828c84d695937e58cc5f49e1c854eb311c4d6aa03f4f1" + ], + "version": "==1.4.2" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "pep8-naming": { + "hashes": [ + "sha256:1b419fa45b68b61cd8c5daf4e0c96d28915ad14d3d5f35fcc1e7e95324a33a2e", + "sha256:4eedfd4c4b05e48796f74f5d8628c068ff788b9c2b08471ad408007fc6450e5a" + ], + "version": "==0.4.1" + }, + "prospector": { + "hashes": [ + "sha256:aba551e53dc1a5a432afa67385eaa81d7b4cf4c162dc1a4d0ee00b3a0712ad90" + ], + "index": "pypi", + "version": "==1.1.7" + }, + "pycodestyle": { + "hashes": [ + "sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83", + "sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a" + ], + "version": "==2.4.0" + }, + "pydocstyle": { + "hashes": [ + "sha256:04c84e034ebb56eb6396c820442b8c4499ac5eb94a3bda88951ac3dc519b6058", + "sha256:66aff87ffe34b1e49bff2dd03a88ce6843be2f3346b0c9814410d34987fbab59" + ], + "version": "==4.0.1" + }, + "pyflakes": { + "hashes": [ + "sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f", + "sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805" + ], + "version": "==1.6.0" + }, + "pylint": { + "hashes": [ + "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", + "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" + ], + "index": "pypi", + "version": "==2.3.1" + }, + "pylint-celery": { + "hashes": [ + "sha256:41e32094e7408d15c044178ea828dd524beedbdbe6f83f712c5e35bde1de4beb" + ], + "version": "==0.3" + }, + "pylint-django": { + "hashes": [ + "sha256:75c69d1ec2275918c37f175976da20e2f1e1e62e067098a685cd263ffa833dfd", + "sha256:c7cb6384ea7b33ea77052a5ae07358c10d377807390ef27b2e6ff997303fadb7" + ], + "version": "==2.0.10" + }, + "pylint-flask": { + "hashes": [ + "sha256:f4d97de2216bf7bfce07c9c08b166e978fe9f2725de2a50a9845a97de7e31517" + ], + "version": "==0.6" + }, + "pylint-plugin-utils": { + "hashes": [ + "sha256:8d9e31d5ea8b7b0003e1f0f136b44a5235896a32e47c5bc2ef1143e9f6ba0b74" + ], + "version": "==0.5" + }, + "pyyaml": { + "hashes": [ + "sha256:0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9", + "sha256:01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4", + "sha256:5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8", + "sha256:5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696", + "sha256:7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34", + "sha256:7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9", + "sha256:87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73", + "sha256:9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299", + "sha256:a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b", + "sha256:b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae", + "sha256:b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681", + "sha256:bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41", + "sha256:f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8" + ], + "version": "==5.1.2" + }, + "requirements-detector": { + "hashes": [ + "sha256:9fbc4b24e8b7c3663aff32e3eba34596848c6b91bd425079b386973bd8d08931" + ], + "version": "==0.6" + }, + "setoptconf": { + "hashes": [ + "sha256:5b0b5d8e0077713f5d5152d4f63be6f048d9a1bb66be15d089a11c898c3cf49c" + ], + "version": "==0.2.0" + }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, + "snowballstemmer": { + "hashes": [ + "sha256:713e53b79cbcf97bc5245a06080a33d54a77e7cce2f789c835a143bcdb5c033e" + ], + "version": "==1.9.1" + }, + "typed-ast": { + "hashes": [ + "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", + "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", + "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", + "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", + "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", + "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", + "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", + "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", + "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", + "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", + "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", + "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", + "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", + "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", + "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" + ], + "markers": "implementation_name == 'cpython'", + "version": "==1.4.0" + }, + "wrapt": { + "hashes": [ + "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" + ], + "version": "==1.11.2" + } + } } diff --git a/__init__.py b/__init__.py old mode 100644 new mode 100755 diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index e860ce7..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -all: ucloud-networking.png ucloud-vm-states.png - -clean: - rm -f *.png - -%.png: %.dot - dot -Tpng < $< > $@ diff --git a/docs/ucloud-general-working (current).dot b/docs/ucloud-general-working (current).dot deleted file mode 100644 index e826ea9..0000000 --- a/docs/ucloud-general-working (current).dot +++ /dev/null @@ -1,56 +0,0 @@ -digraph G{ - - rankdir=TB; - start [shape=point]; - ucloud_api [style=filled,color=white]; - start -> ucloud_api [label="User Requests to Start VM 'vm1'"]; - - subgraph cluster_common { - style=filled; - color=lightgrey; - RequestQueue [shape=rect, style=filled, color=plum1]; - - } - - - subgraph cluster_api { - style=filled; - color=lightgrey; - node [style=filled,color=white]; - - ucloud_api -> RequestQueue [label="RequestQueue.append(Request) "] - } - - - subgraph cluster_scheduler { - rankdir=RL; - style=filled; - color=lightgrey; - node [style=filled,color=white]; - label="ucloud-scheduler"; - - PENDING_REQUESTS [shape=rect, color=peachpuff] - - RequestQueue -> FindHost [label="Get StartVM Requests Only"]; - FindHost -> PENDING_REQUESTS [constraint=false, color=red, label="append this requests to pending requests"]; - FindHost -> RequestQueue [label="RequestQueue.append(RunVmRequest(vm='vm1'))", color=darkgreen]; - PENDING_REQUESTS -> FindHost [label="On Timeout Event.\n Try to fulfil the request again"] - - } - - subgraph cluster_vm { - rankdir=RL; - style=filled; - color=lightgrey; - node [style=filled,color=white]; - label="ucloud-vm"; - - VmTrash [shape=point, color=red] - - RequestQueue -> HandleRequest [label="Get Requests for VM Operations"] - HandleRequest -> Running [label="RunVMRequest", color=darkgreen] - HandleRequest -> Stopped [label="ShutdownVMRequest", color=darkgreen] - HandleRequest -> VmTrash [constraint=false, color=red, label="Put error message into VM's log"] - } - -} \ No newline at end of file diff --git a/docs/ucloud-networking.dot b/docs/ucloud-networking.dot deleted file mode 100644 index f29582c..0000000 --- a/docs/ucloud-networking.dot +++ /dev/null @@ -1,36 +0,0 @@ -digraph G { - ucloud_api [shape=box]; - ucloud_router [shape=box]; - ucloud_nat64 [shape=box]; - - { - rank = same; - ucloud_api; - ucloud_router; - ucloud_nat64; - } - - ucloud_api -> REQUEST_IPV6_SLASH_64 [label="Requested by user" style="dotted"]; - ucloud_api -> REQUEST_IPV4_ADDRESS [label="Requested by user" style="dotted"]; - ucloud_router -> HAS_IPV6_SLASH_64 [label="Adding route" style="dotted"]; - ucloud_nat64 -> HAS_IPV4_ADDRESS [label="Adding NAT64" style="dotted"]; - ucloud_router -> DELETE_IPV6_SLASH_64 [label="Deleting route" style="dotted"]; - ucloud_nat64 -> DELETE_IPV4_ADDRESS [label="Removing NAT64" style="dotted"]; - - ERROR; - ERROR -> DEFAULT; - - DEFAULT -> REQUEST_IPV6_SLASH_64; - - REQUEST_IPV6_SLASH_64 -> HAS_IPV6_SLASH_64 [label="If another /64 can be routed"]; - REQUEST_IPV6_SLASH_64 -> ERROR [label="If no /64 can be routed"]; - - DEFAULT -> REQUEST_IPV4_ADDRESS; - REQUEST_IPV4_ADDRESS -> HAS_IPV4_ADDRESS; - REQUEST_IPV4_ADDRESS -> ERROR [label="If IPv4 address can be added"]; - - - HAS_IPV6_SLASH_64 -> DELETE_IPV6_SLASH_64 -> DEFAULT; - HAS_IPV4_ADDRESS -> DELETE_IPV4_ADDRESS -> DEFAULT; - -} diff --git a/docs/ucloud-vm-states.dot b/docs/ucloud-vm-states.dot deleted file mode 100644 index 8c3c2f8..0000000 --- a/docs/ucloud-vm-states.dot +++ /dev/null @@ -1,27 +0,0 @@ -digraph G { - ucloud_scheduler [shape=box]; - ucloud_api [shape=box]; - ucloud_vm [shape=box]; - - ucloud_scheduler -> SCHEDULED_FOR_DEPLOY [style="dotted"]; - ucloud_api -> NEW [label="Requested by user" style="dotted"]; - ucloud_api -> SUSPENDED [label="Requested by user" style="dotted"]; - ucloud_api -> DELETED [label="Requested by user" style="dotted"]; - ucloud_vm -> RUNNING [style="dotted"]; - - { - rank = same; - ucloud_scheduler; - ucloud_api; - ucloud_vm; - } - - NEW -> SCHEDULED_FOR_DEPLOY [label="ucloud_scheduler selects hosts"]; - SCHEDULED_FOR_DEPLOY -> RUNNING [label="ucloud_vm starts VM"]; - RUNNING -> SUSPENDED; - SUSPENDED -> SCHEDULED_FOR_DEPLOY; - RUNNING -> DELETED; - - - -} diff --git a/docs/vm_states.dot b/docs/vm_states.dot deleted file mode 100644 index a7a87d0..0000000 --- a/docs/vm_states.dot +++ /dev/null @@ -1,39 +0,0 @@ -digraph G{ - - subgraph cluster_1 { - style=filled; - color=lightgrey; - node [style=filled,color=white]; - REQUESTED_NEW -> SCHEDULED_DEPLOY [label="assign_host()"]; - SCHEDULED_DEPLOY -> REQUESTED_START [label="create_vm()"]; - label="ucloud-scheduler"; - } - - subgraph cluster_2 { - style=filled; - color=lightgrey; - node [style=filled,color=white]; - - REQUESTED_START -> RUNNING [label="start_vm()"] - RUNNING -> SUSPENDED [label="REQUESTED_SUSPEND"] - RUNNING -> RUNNING [label="REQUESTED_RESUME"] - RUNNING -> SHUTDOWN [label="REQUESTED_SHUTDOWN"] - SUSPENDED -> RUNNING [label="REQUESTED_RESUME"] - - } - - subgraph cluster_3 { - style=filled; - color=lightgrey; - - SCHEDULED_DEPLOY -> REQUESTED_NEW [label="Host Died"] - REQUESTED_START -> KILLED [label="Host Died"] - RUNNING -> KILLED [label="Host Died OR VM Died"] - SUSPENDED -> KILLED [label="VM Died"] - SHUTDOWN -> SHUTDOWN [label="VM Died"] - - label="ucloud-vm & ucloud-scheduler"; - - } - -} \ No newline at end of file diff --git a/helpers.py b/helpers.py old mode 100644 new mode 100755 index ec5726d..9bbcaec --- a/helpers.py +++ b/helpers.py @@ -4,7 +4,7 @@ import logging from etcd3_wrapper import EtcdEntry -class SpecificEtcdEntryBase(object): +class SpecificEtcdEntryBase: def __init__(self, e: EtcdEntry): self.key = e.key @@ -24,6 +24,9 @@ class SpecificEtcdEntryBase(object): return str(dict(self.__dict__)) + +# TODO: Should be removed as soon as migration +# mechanism is finalized inside ucloud def get_ipv4_address(): # If host is connected to internet # Return IPv4 address of machine diff --git a/host.py b/host.py old mode 100644 new mode 100755 index 5d23397..b32ea3a --- a/host.py +++ b/host.py @@ -1,25 +1,21 @@ from typing import List -from .helpers import SpecificEtcdEntryBase -from .etcd3_wrapper import EtcdEntry +from helpers import SpecificEtcdEntryBase from datetime import datetime from os.path import join -class HostStatus(object): +class HostStatus: alive = "ALIVE" dead = "DEAD" class HostEntry(SpecificEtcdEntryBase): - def __init__(self, e: EtcdEntry): - self.specs = dict() - self.hostname = "" - self.status = "" - self.last_heartbeat = "" + specs: dict + hostname: str + status: str + last_heartbeat: str - super().__init__(e) - def update_heartbeat(self): self.status = HostStatus.alive self.last_heartbeat = datetime.utcnow().isoformat() @@ -36,7 +32,7 @@ class HostEntry(SpecificEtcdEntryBase): self.last_heartbeat = datetime.utcnow().isoformat() -class HostPool(object): +class HostPool: def __init__(self, etcd_client, host_prefix): self.client = etcd_client self.prefix = host_prefix @@ -52,6 +48,7 @@ class HostPool(object): v = self.client.get(key, value_in_json=True) if v: return HostEntry(v) + return None def put(self, obj: HostEntry): self.client.put(obj.key, obj.value, value_in_json=True) diff --git a/rbd.py b/rbd.py deleted file mode 100644 index b87a54c..0000000 --- a/rbd.py +++ /dev/null @@ -1,15 +0,0 @@ -import subprocess - - -class RBD(object): - @staticmethod - def ls(pool): - output = "" - try: - output = subprocess.check_output( - ["rbd", "ls", pool], stderr=subprocess.PIPE - ).decode("utf-8").strip() - except subprocess.CalledProcessError as e: - raise Exception(e.stderr) - return output.split("\n") - diff --git a/request.py b/request.py old mode 100644 new mode 100755 index c30406f..99c2dad --- a/request.py +++ b/request.py @@ -1,11 +1,13 @@ import json -from etcd3_wrapper import Etcd3Wrapper, EtcdEntry, PsuedoEtcdEntry + +from decouple import config +from etcd3_wrapper import PsuedoEtcdEntry from uuid import uuid4 -from .helpers import SpecificEtcdEntryBase +from helpers import SpecificEtcdEntryBase from os.path import join -class RequestType(object): +class RequestType: CreateVM = "CreateVM" ScheduleVM = "ScheduleVM" StartVM = "StartVM" @@ -16,18 +18,20 @@ class RequestType(object): class RequestEntry(SpecificEtcdEntryBase): - def __init__(self, e: EtcdEntry): - self.type = "" - super().__init__(e) + type: str + migration: bool + destination: str + uuid: str + hostname: str @classmethod def from_scratch(cls, **kwargs): - e = PsuedoEtcdEntry(join("/v1/request/", uuid4().hex), value=json.dumps(kwargs).encode("utf-8"), + e = PsuedoEtcdEntry(join(config("REQUEST_PREFIX"), uuid4().hex), value=json.dumps(kwargs).encode("utf-8"), value_in_json=True) return cls(e) -class RequestPool(object): +class RequestPool: def __init__(self, etcd_client, request_prefix): self.client = etcd_client self.prefix = request_prefix diff --git a/vm.py b/vm.py old mode 100644 new mode 100755 index 25f94fd..4d57c61 --- a/vm.py +++ b/vm.py @@ -1,11 +1,10 @@ from contextlib import contextmanager from datetime import datetime -from etcd3_wrapper import EtcdEntry -from .helpers import SpecificEtcdEntryBase +from helpers import SpecificEtcdEntryBase from os.path import join -class VMStatus(object): +class VMStatus: # Must be only assigned to brand new VM requested_new = "REQUESTED_NEW" @@ -25,17 +24,17 @@ class VMStatus(object): running = "RUNNING" + error = "ERROR" # An error occurred that cannot be resolved automatically + class VMEntry(SpecificEtcdEntryBase): - def __init__(self, e: EtcdEntry): - self.owner = "" - self.specs = dict() - self.hostname = "" - self.status = "" - self.image_uuid = "" - self.log = [] - self.in_migration = False - super().__init__(e) + owner: str + specs: dict + hostname: str + status: str + image_uuid: str + log: list + in_migration: bool @property def uuid(self): @@ -61,7 +60,7 @@ class VMEntry(SpecificEtcdEntryBase): return f"rbd:uservms/{self.uuid}" -class VmPool(object): +class VmPool: def __init__(self, etcd_client, vm_prefix): self.client = etcd_client self.prefix = vm_prefix @@ -92,6 +91,7 @@ class VmPool(object): v = self.client.get(key, value_in_json=True) if v: return VMEntry(v) + return None def put(self, obj: VMEntry): self.client.put(obj.key, obj.value, value_in_json=True)