kanrisuru 0.12.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (475) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -1
  3. data/README.md +5 -5
  4. data/lib/kanrisuru/command.rb +10 -0
  5. data/lib/kanrisuru/core/apt/commands/autoclean.rb +13 -0
  6. data/lib/kanrisuru/core/apt/commands/autoremove.rb +15 -0
  7. data/lib/kanrisuru/core/apt/commands/clean.rb +13 -0
  8. data/lib/kanrisuru/core/apt/commands/full_upgrade.rb +14 -0
  9. data/lib/kanrisuru/core/apt/commands/install.rb +22 -0
  10. data/lib/kanrisuru/core/apt/commands/list.rb +21 -0
  11. data/lib/kanrisuru/core/apt/commands/purge.rb +18 -0
  12. data/lib/kanrisuru/core/apt/commands/remove.rb +18 -0
  13. data/lib/kanrisuru/core/apt/commands/search.rb +18 -0
  14. data/lib/kanrisuru/core/apt/commands/show.rb +21 -0
  15. data/lib/kanrisuru/core/apt/commands/update.rb +14 -0
  16. data/lib/kanrisuru/core/apt/commands/upgrade.rb +14 -0
  17. data/lib/kanrisuru/core/apt/commands.rb +14 -0
  18. data/lib/kanrisuru/core/apt/parser.rb +6 -0
  19. data/lib/kanrisuru/core/apt/parsers/base.rb +51 -0
  20. data/lib/kanrisuru/core/apt/parsers/list.rb +28 -0
  21. data/lib/kanrisuru/core/apt/parsers/search.rb +32 -0
  22. data/lib/kanrisuru/core/apt/parsers/show.rb +90 -0
  23. data/lib/kanrisuru/core/apt/types.rb +36 -0
  24. data/lib/kanrisuru/core/apt.rb +4 -284
  25. data/lib/kanrisuru/core/archive/commands/tar.rb +126 -0
  26. data/lib/kanrisuru/core/archive/commands.rb +3 -0
  27. data/lib/kanrisuru/core/archive/types.rb +9 -0
  28. data/lib/kanrisuru/core/archive.rb +3 -121
  29. data/lib/kanrisuru/core/disk/commands/blkid.rb +35 -0
  30. data/lib/kanrisuru/core/disk/commands/df.rb +26 -0
  31. data/lib/kanrisuru/core/disk/commands/du.rb +24 -0
  32. data/lib/kanrisuru/core/disk/commands/lsblk.rb +54 -0
  33. data/lib/kanrisuru/core/disk/commands.rb +6 -0
  34. data/lib/kanrisuru/core/disk/parser.rb +6 -0
  35. data/lib/kanrisuru/core/disk/parsers/blkid.rb +72 -0
  36. data/lib/kanrisuru/core/disk/parsers/df.rb +33 -0
  37. data/lib/kanrisuru/core/disk/parsers/du.rb +25 -0
  38. data/lib/kanrisuru/core/disk/parsers/lsblk.rb +96 -0
  39. data/lib/kanrisuru/core/disk/types.rb +21 -0
  40. data/lib/kanrisuru/core/disk.rb +5 -290
  41. data/lib/kanrisuru/core/dmi/commands/dmi.rb +42 -0
  42. data/lib/kanrisuru/core/dmi/commands.rb +3 -0
  43. data/lib/kanrisuru/core/dmi/parser.rb +3 -0
  44. data/lib/kanrisuru/core/dmi/parsers/dmi.rb +149 -0
  45. data/lib/kanrisuru/core/dmi/types.rb +361 -0
  46. data/lib/kanrisuru/core/dmi.rb +4 -522
  47. data/lib/kanrisuru/core/file/commands/chmod.rb +29 -0
  48. data/lib/kanrisuru/core/file/commands/chown.rb +35 -0
  49. data/lib/kanrisuru/core/file/commands/copy.rb +56 -0
  50. data/lib/kanrisuru/core/file/commands/link.rb +25 -0
  51. data/lib/kanrisuru/core/file/commands/mkdir.rb +37 -0
  52. data/lib/kanrisuru/core/file/commands/move.rb +48 -0
  53. data/lib/kanrisuru/core/file/commands/rm.rb +38 -0
  54. data/lib/kanrisuru/core/file/commands/symlink.rb +46 -0
  55. data/lib/kanrisuru/core/file/commands/touch.rb +33 -0
  56. data/lib/kanrisuru/core/file/commands/unlink.rb +13 -0
  57. data/lib/kanrisuru/core/file/commands/wc.rb +16 -0
  58. data/lib/kanrisuru/core/file/commands.rb +29 -0
  59. data/lib/kanrisuru/core/file/parser.rb +3 -0
  60. data/lib/kanrisuru/core/file/parsers/wc.rb +16 -0
  61. data/lib/kanrisuru/core/file/types.rb +9 -0
  62. data/lib/kanrisuru/core/file.rb +4 -312
  63. data/lib/kanrisuru/core/find/commands/find.rb +97 -0
  64. data/lib/kanrisuru/core/find/commands.rb +3 -0
  65. data/lib/kanrisuru/core/find/constants.rb +9 -0
  66. data/lib/kanrisuru/core/find/parser.rb +3 -0
  67. data/lib/kanrisuru/core/find/parsers/find.rb +18 -0
  68. data/lib/kanrisuru/core/find/types.rb +9 -0
  69. data/lib/kanrisuru/core/find.rb +5 -97
  70. data/lib/kanrisuru/core/group/commands/create_group.rb +21 -0
  71. data/lib/kanrisuru/core/group/commands/delete_group.rb +16 -0
  72. data/lib/kanrisuru/core/group/commands/get_gid.rb +17 -0
  73. data/lib/kanrisuru/core/group/commands/get_group.rb +29 -0
  74. data/lib/kanrisuru/core/group/commands/is_group.rb +14 -0
  75. data/lib/kanrisuru/core/group/commands/update_group.rb +23 -0
  76. data/lib/kanrisuru/core/group/commands.rb +8 -0
  77. data/lib/kanrisuru/core/group/parser.rb +4 -0
  78. data/lib/kanrisuru/core/group/parsers/gid.rb +15 -0
  79. data/lib/kanrisuru/core/group/parsers/group.rb +15 -0
  80. data/lib/kanrisuru/core/group/types.rb +10 -0
  81. data/lib/kanrisuru/core/group.rb +4 -81
  82. data/lib/kanrisuru/core/ip/commands/address.rb +86 -0
  83. data/lib/kanrisuru/core/ip/commands/address_label.rb +54 -0
  84. data/lib/kanrisuru/core/ip/commands/link.rb +116 -0
  85. data/lib/kanrisuru/core/ip/commands/link_set_opts.rb +61 -0
  86. data/lib/kanrisuru/core/ip/commands/link_type_opts.rb +313 -0
  87. data/lib/kanrisuru/core/ip/commands/maddress.rb +42 -0
  88. data/lib/kanrisuru/core/ip/commands/neighbour.rb +72 -0
  89. data/lib/kanrisuru/core/ip/commands/route.rb +152 -0
  90. data/lib/kanrisuru/core/ip/commands/rule.rb +57 -0
  91. data/lib/kanrisuru/core/ip/commands.rb +26 -0
  92. data/lib/kanrisuru/core/ip/constants.rb +25 -0
  93. data/lib/kanrisuru/core/ip/parser.rb +11 -0
  94. data/lib/kanrisuru/core/ip/parsers/address.rb +104 -0
  95. data/lib/kanrisuru/core/ip/parsers/address_label.rb +27 -0
  96. data/lib/kanrisuru/core/ip/parsers/base.rb +166 -0
  97. data/lib/kanrisuru/core/ip/parsers/link.rb +86 -0
  98. data/lib/kanrisuru/core/ip/parsers/maddress.rb +85 -0
  99. data/lib/kanrisuru/core/ip/parsers/neighbour.rb +89 -0
  100. data/lib/kanrisuru/core/ip/parsers/route.rb +76 -0
  101. data/lib/kanrisuru/core/ip/parsers/rule.rb +60 -0
  102. data/lib/kanrisuru/core/ip/parsers/version.rb +15 -0
  103. data/lib/kanrisuru/core/ip/types.rb +46 -0
  104. data/lib/kanrisuru/core/ip.rb +15 -1002
  105. data/lib/kanrisuru/core/mount/commands/mount.rb +65 -0
  106. data/lib/kanrisuru/core/mount/commands/umount.rb +35 -0
  107. data/lib/kanrisuru/core/mount/commands.rb +49 -0
  108. data/lib/kanrisuru/core/mount.rb +2 -125
  109. data/lib/kanrisuru/core/path/commands/ls.rb +26 -0
  110. data/lib/kanrisuru/core/path/commands/pwd.rb +16 -0
  111. data/lib/kanrisuru/core/path/commands/readlink.rb +22 -0
  112. data/lib/kanrisuru/core/path/commands/realpath.rb +18 -0
  113. data/lib/kanrisuru/core/path/commands/which.rb +19 -0
  114. data/lib/kanrisuru/core/path/commands/whoami.rb +16 -0
  115. data/lib/kanrisuru/core/path/commands.rb +8 -0
  116. data/lib/kanrisuru/core/path/parser.rb +4 -0
  117. data/lib/kanrisuru/core/path/parsers/ls.rb +53 -0
  118. data/lib/kanrisuru/core/path/parsers/which.rb +18 -0
  119. data/lib/kanrisuru/core/path/types.rb +12 -0
  120. data/lib/kanrisuru/core/path.rb +4 -121
  121. data/lib/kanrisuru/core/socket/commands/ss.rb +44 -0
  122. data/lib/kanrisuru/core/socket/commands.rb +3 -0
  123. data/lib/kanrisuru/core/socket/constants.rb +29 -0
  124. data/lib/kanrisuru/core/socket/parser.rb +3 -0
  125. data/lib/kanrisuru/core/socket/parsers/ss.rb +109 -0
  126. data/lib/kanrisuru/core/socket/types.rb +18 -0
  127. data/lib/kanrisuru/core/socket.rb +5 -164
  128. data/lib/kanrisuru/core/stat/commands/stat.rb +62 -0
  129. data/lib/kanrisuru/core/stat/commands.rb +3 -0
  130. data/lib/kanrisuru/core/stat/parser.rb +3 -0
  131. data/lib/kanrisuru/core/stat/parsers/stat.rb +34 -0
  132. data/lib/kanrisuru/core/stat/types.rb +14 -0
  133. data/lib/kanrisuru/core/stat.rb +4 -81
  134. data/lib/kanrisuru/core/stream/commands/cat.rb +25 -0
  135. data/lib/kanrisuru/core/stream/commands/echo.rb +20 -0
  136. data/lib/kanrisuru/core/stream/commands/head.rb +18 -0
  137. data/lib/kanrisuru/core/stream/commands/read_file_chunk.rb +21 -0
  138. data/lib/kanrisuru/core/stream/commands/sed.rb +23 -0
  139. data/lib/kanrisuru/core/stream/commands/tail.rb +18 -0
  140. data/lib/kanrisuru/core/stream/commands.rb +27 -0
  141. data/lib/kanrisuru/core/stream/parser.rb +4 -0
  142. data/lib/kanrisuru/core/stream/parsers/echo.rb +17 -0
  143. data/lib/kanrisuru/core/stream/parsers/sed.rb +17 -0
  144. data/lib/kanrisuru/core/stream.rb +3 -104
  145. data/lib/kanrisuru/core/system/commands/cpu_info.rb +32 -0
  146. data/lib/kanrisuru/core/system/commands/free.rb +25 -0
  147. data/lib/kanrisuru/core/system/commands/kernel_statistics.rb +21 -0
  148. data/lib/kanrisuru/core/system/commands/kill.rb +22 -0
  149. data/lib/kanrisuru/core/system/commands/last.rb +31 -0
  150. data/lib/kanrisuru/core/system/commands/load_average.rb +16 -0
  151. data/lib/kanrisuru/core/system/commands/load_env.rb +16 -0
  152. data/lib/kanrisuru/core/system/commands/lscpu.rb +17 -0
  153. data/lib/kanrisuru/core/system/commands/lsof.rb +16 -0
  154. data/lib/kanrisuru/core/system/commands/poweroff.rb +42 -0
  155. data/lib/kanrisuru/core/system/commands/ps.rb +35 -0
  156. data/lib/kanrisuru/core/system/commands/reboot.rb +42 -0
  157. data/lib/kanrisuru/core/system/commands/uptime.rb +18 -0
  158. data/lib/kanrisuru/core/system/commands/w.rb +24 -0
  159. data/lib/kanrisuru/core/system/commands.rb +34 -0
  160. data/lib/kanrisuru/core/system/parser.rb +11 -0
  161. data/lib/kanrisuru/core/system/parsers/kernel_statistics.rb +56 -0
  162. data/lib/kanrisuru/core/system/parsers/last.rb +64 -0
  163. data/lib/kanrisuru/core/system/parsers/load_average.rb +15 -0
  164. data/lib/kanrisuru/core/system/parsers/load_env.rb +24 -0
  165. data/lib/kanrisuru/core/system/parsers/lscpu.rb +90 -0
  166. data/lib/kanrisuru/core/system/parsers/lsof.rb +62 -0
  167. data/lib/kanrisuru/core/system/parsers/ps.rb +71 -0
  168. data/lib/kanrisuru/core/system/parsers/uptime.rb +38 -0
  169. data/lib/kanrisuru/core/system/parsers/w.rb +30 -0
  170. data/lib/kanrisuru/core/system/types.rb +108 -0
  171. data/lib/kanrisuru/core/system.rb +4 -687
  172. data/lib/kanrisuru/core/transfer/commands/download.rb +26 -0
  173. data/lib/kanrisuru/core/transfer/commands/upload.rb +23 -0
  174. data/lib/kanrisuru/core/transfer/commands/wget.rb +168 -0
  175. data/lib/kanrisuru/core/transfer/commands.rb +5 -0
  176. data/lib/kanrisuru/core/transfer/constants.rb +10 -0
  177. data/lib/kanrisuru/core/transfer.rb +3 -199
  178. data/lib/kanrisuru/core/user/commands/create_user.rb +57 -0
  179. data/lib/kanrisuru/core/user/commands/delete_user.rb +20 -0
  180. data/lib/kanrisuru/core/user/commands/get_uid.rb +15 -0
  181. data/lib/kanrisuru/core/user/commands/get_user.rb +48 -0
  182. data/lib/kanrisuru/core/user/commands/is_user.rb +14 -0
  183. data/lib/kanrisuru/core/user/commands/update_user.rb +63 -0
  184. data/lib/kanrisuru/core/user/commands.rb +8 -0
  185. data/lib/kanrisuru/core/user/parser.rb +4 -0
  186. data/lib/kanrisuru/core/user/parsers/getent.rb +17 -0
  187. data/lib/kanrisuru/core/user/parsers/groups.rb +17 -0
  188. data/lib/kanrisuru/core/user/types.rb +11 -0
  189. data/lib/kanrisuru/core/user.rb +4 -182
  190. data/lib/kanrisuru/core/yum/commands/autoremove.rb +14 -0
  191. data/lib/kanrisuru/core/yum/commands/clean.rb +23 -0
  192. data/lib/kanrisuru/core/yum/commands/erase.rb +20 -0
  193. data/lib/kanrisuru/core/yum/commands/info.rb +21 -0
  194. data/lib/kanrisuru/core/yum/commands/install.rb +18 -0
  195. data/lib/kanrisuru/core/yum/commands/list.rb +30 -0
  196. data/lib/kanrisuru/core/yum/commands/localinstall.rb +22 -0
  197. data/lib/kanrisuru/core/yum/commands/remove.rb +20 -0
  198. data/lib/kanrisuru/core/yum/commands/repolist.rb +20 -0
  199. data/lib/kanrisuru/core/yum/commands/search.rb +21 -0
  200. data/lib/kanrisuru/core/yum/commands/update.rb +14 -0
  201. data/lib/kanrisuru/core/yum/commands/upgrade.rb +14 -0
  202. data/lib/kanrisuru/core/yum/commands.rb +39 -0
  203. data/lib/kanrisuru/core/yum/parser.rb +7 -0
  204. data/lib/kanrisuru/core/yum/parsers/base.rb +31 -0
  205. data/lib/kanrisuru/core/yum/parsers/info.rb +69 -0
  206. data/lib/kanrisuru/core/yum/parsers/list.rb +24 -0
  207. data/lib/kanrisuru/core/yum/parsers/repolist.rb +60 -0
  208. data/lib/kanrisuru/core/yum/parsers/search.rb +30 -0
  209. data/lib/kanrisuru/core/yum/types.rb +41 -0
  210. data/lib/kanrisuru/core/yum.rb +4 -347
  211. data/lib/kanrisuru/core/zypper/commands/add_lock.rb +22 -0
  212. data/lib/kanrisuru/core/zypper/commands/add_repo.rb +38 -0
  213. data/lib/kanrisuru/core/zypper/commands/add_service.rb +26 -0
  214. data/lib/kanrisuru/core/zypper/commands/clean_cache.rb +22 -0
  215. data/lib/kanrisuru/core/zypper/commands/clean_locks.rb +17 -0
  216. data/lib/kanrisuru/core/zypper/commands/dist_upgrade.rb +25 -0
  217. data/lib/kanrisuru/core/zypper/commands/info.rb +25 -0
  218. data/lib/kanrisuru/core/zypper/commands/install.rb +39 -0
  219. data/lib/kanrisuru/core/zypper/commands/install_new_recommends.rb +23 -0
  220. data/lib/kanrisuru/core/zypper/commands/list_locks.rb +22 -0
  221. data/lib/kanrisuru/core/zypper/commands/list_patches.rb +34 -0
  222. data/lib/kanrisuru/core/zypper/commands/list_repos.rb +21 -0
  223. data/lib/kanrisuru/core/zypper/commands/list_services.rb +21 -0
  224. data/lib/kanrisuru/core/zypper/commands/list_updates.rb +30 -0
  225. data/lib/kanrisuru/core/zypper/commands/modify_repo.rb +48 -0
  226. data/lib/kanrisuru/core/zypper/commands/modify_service.rb +40 -0
  227. data/lib/kanrisuru/core/zypper/commands/patch.rb +40 -0
  228. data/lib/kanrisuru/core/zypper/commands/patch_check.rb +29 -0
  229. data/lib/kanrisuru/core/zypper/commands/purge_kernels.rb +18 -0
  230. data/lib/kanrisuru/core/zypper/commands/refresh_repos.rb +24 -0
  231. data/lib/kanrisuru/core/zypper/commands/refresh_services.rb +21 -0
  232. data/lib/kanrisuru/core/zypper/commands/remove.rb +26 -0
  233. data/lib/kanrisuru/core/zypper/commands/remove_lock.rb +22 -0
  234. data/lib/kanrisuru/core/zypper/commands/remove_repo.rb +32 -0
  235. data/lib/kanrisuru/core/zypper/commands/remove_service.rb +21 -0
  236. data/lib/kanrisuru/core/zypper/commands/rename_repo.rb +20 -0
  237. data/lib/kanrisuru/core/zypper/commands/search.rb +52 -0
  238. data/lib/kanrisuru/core/zypper/commands/source_install.rb +22 -0
  239. data/lib/kanrisuru/core/zypper/commands/update.rb +27 -0
  240. data/lib/kanrisuru/core/zypper/commands/verify.rb +23 -0
  241. data/lib/kanrisuru/core/zypper/commands.rb +109 -0
  242. data/lib/kanrisuru/core/zypper/constants.rb +19 -0
  243. data/lib/kanrisuru/core/zypper/parser.rb +11 -0
  244. data/lib/kanrisuru/core/zypper/parsers/base.rb +18 -0
  245. data/lib/kanrisuru/core/zypper/parsers/info.rb +77 -0
  246. data/lib/kanrisuru/core/zypper/parsers/list_locks.rb +36 -0
  247. data/lib/kanrisuru/core/zypper/parsers/list_patches.rb +40 -0
  248. data/lib/kanrisuru/core/zypper/parsers/list_repos.rb +37 -0
  249. data/lib/kanrisuru/core/zypper/parsers/list_services.rb +36 -0
  250. data/lib/kanrisuru/core/zypper/parsers/list_updates.rb +32 -0
  251. data/lib/kanrisuru/core/zypper/parsers/patch_check.rb +34 -0
  252. data/lib/kanrisuru/core/zypper/parsers/search.rb +37 -0
  253. data/lib/kanrisuru/core/zypper/types.rb +88 -0
  254. data/lib/kanrisuru/core/zypper.rb +5 -998
  255. data/lib/kanrisuru/version.rb +1 -1
  256. data/spec/functional/core/ip/ip_address_label_spec.rb +81 -0
  257. data/spec/functional/core/ip/ip_address_spec.rb +95 -0
  258. data/spec/functional/core/ip/ip_link_spec.rb +814 -0
  259. data/spec/functional/core/ip/ip_maddress_spec.rb +78 -0
  260. data/spec/functional/core/ip/ip_neighbour_spec.rb +119 -0
  261. data/spec/functional/core/ip/ip_route_spec.rb +174 -0
  262. data/spec/functional/core/ip/ip_rule_spec.rb +75 -0
  263. data/spec/functional/core/ip/ip_spec.rb +27 -0
  264. data/spec/functional/result_spec.rb +150 -0
  265. data/spec/{hosts.json → helper/hosts.json} +0 -0
  266. data/spec/helper/simplecov.rb +21 -0
  267. data/spec/helper/test_hosts.rb +3 -3
  268. data/spec/integration/core/apt/debian_spec.rb +9 -0
  269. data/spec/integration/core/apt/ubuntu_spec.rb +9 -0
  270. data/spec/integration/core/archive/centos_spec.rb +9 -0
  271. data/spec/integration/core/archive/debian_spec.rb +9 -0
  272. data/spec/integration/core/archive/fedora_spec.rb +9 -0
  273. data/spec/integration/core/archive/opensuse_spec.rb +9 -0
  274. data/spec/integration/core/archive/rhel_spec.rb +9 -0
  275. data/spec/integration/core/archive/sles_spec.rb +9 -0
  276. data/spec/integration/core/archive/ubuntu_spec.rb +9 -0
  277. data/spec/integration/core/disk/centos_spec.rb +9 -0
  278. data/spec/integration/core/disk/debian_spec.rb +9 -0
  279. data/spec/integration/core/disk/fedora_spec.rb +9 -0
  280. data/spec/integration/core/disk/opensuse_spec.rb +9 -0
  281. data/spec/integration/core/disk/rhel_spec.rb +9 -0
  282. data/spec/integration/core/disk/sles_spec.rb +9 -0
  283. data/spec/integration/core/disk/ubuntu_spec.rb +9 -0
  284. data/spec/integration/core/dmi/centos_spec.rb +9 -0
  285. data/spec/integration/core/dmi/debian_spec.rb +9 -0
  286. data/spec/integration/core/dmi/fedora_spec.rb +9 -0
  287. data/spec/integration/core/dmi/opensuse_spec.rb +9 -0
  288. data/spec/integration/core/dmi/rhel_spec.rb +9 -0
  289. data/spec/integration/core/dmi/sles_spec.rb +9 -0
  290. data/spec/integration/core/dmi/ubuntu_spec.rb +9 -0
  291. data/spec/integration/core/file/centos_spec.rb +9 -0
  292. data/spec/integration/core/file/debian_spec.rb +9 -0
  293. data/spec/integration/core/file/fedora_spec.rb +9 -0
  294. data/spec/integration/core/file/opensuse_spec.rb +9 -0
  295. data/spec/integration/core/file/rhel_spec.rb +9 -0
  296. data/spec/integration/core/file/sles_spec.rb +9 -0
  297. data/spec/integration/core/file/ubuntu_spec.rb +9 -0
  298. data/spec/integration/core/find/centos_spec.rb +9 -0
  299. data/spec/integration/core/find/debian_spec.rb +9 -0
  300. data/spec/integration/core/find/fedora_spec.rb +9 -0
  301. data/spec/integration/core/find/opensuse_spec.rb +9 -0
  302. data/spec/integration/core/find/rhel_spec.rb +9 -0
  303. data/spec/integration/core/find/sles_spec.rb +9 -0
  304. data/spec/integration/core/find/ubuntu_spec.rb +9 -0
  305. data/spec/integration/core/group/centos_spec.rb +9 -0
  306. data/spec/integration/core/group/debian_spec.rb +9 -0
  307. data/spec/integration/core/group/fedora_spec.rb +9 -0
  308. data/spec/integration/core/group/opensuse_spec.rb +9 -0
  309. data/spec/integration/core/group/rhel_spec.rb +9 -0
  310. data/spec/integration/core/group/sles_spec.rb +9 -0
  311. data/spec/integration/core/group/ubuntu_spec.rb +9 -0
  312. data/spec/integration/core/ip/centos_spec.rb +9 -0
  313. data/spec/integration/core/ip/debian_spec.rb +9 -0
  314. data/spec/integration/core/ip/fedora_spec.rb +9 -0
  315. data/spec/integration/core/ip/opensuse_spec.rb +9 -0
  316. data/spec/integration/core/ip/rhel_spec.rb +9 -0
  317. data/spec/integration/core/ip/sles_spec.rb +9 -0
  318. data/spec/integration/core/ip/ubuntu_spec.rb +9 -0
  319. data/spec/integration/core/path/centos_spec.rb +9 -0
  320. data/spec/integration/core/path/debian_spec.rb +9 -0
  321. data/spec/integration/core/path/fedora_spec.rb +9 -0
  322. data/spec/integration/core/path/opensuse_spec.rb +9 -0
  323. data/spec/integration/core/path/rhel_spec.rb +9 -0
  324. data/spec/integration/core/path/sles_spec.rb +9 -0
  325. data/spec/integration/core/path/ubuntu_spec.rb +9 -0
  326. data/spec/integration/core/socket/centos_spec.rb +9 -0
  327. data/spec/integration/core/socket/debian_spec.rb +9 -0
  328. data/spec/integration/core/socket/fedora_spec.rb +9 -0
  329. data/spec/integration/core/socket/opensuse_spec.rb +9 -0
  330. data/spec/integration/core/socket/rhel_spec.rb +9 -0
  331. data/spec/integration/core/socket/sles_spec.rb +9 -0
  332. data/spec/integration/core/socket/ubuntu_spec.rb +9 -0
  333. data/spec/integration/core/stat/centos_spec.rb +9 -0
  334. data/spec/integration/core/stat/debian_spec.rb +9 -0
  335. data/spec/integration/core/stat/fedora_spec.rb +9 -0
  336. data/spec/integration/core/stat/opensuse_spec.rb +9 -0
  337. data/spec/integration/core/stat/rhel_spec.rb +9 -0
  338. data/spec/integration/core/stat/sles_spec.rb +9 -0
  339. data/spec/integration/core/stat/ubuntu_spec.rb +9 -0
  340. data/spec/integration/core/stream/centos_spec.rb +9 -0
  341. data/spec/integration/core/stream/debian_spec.rb +9 -0
  342. data/spec/integration/core/stream/fedora_spec.rb +9 -0
  343. data/spec/integration/core/stream/opensuse_spec.rb +9 -0
  344. data/spec/integration/core/stream/rhel_spec.rb +9 -0
  345. data/spec/integration/core/stream/sles_spec.rb +9 -0
  346. data/spec/integration/core/stream/ubuntu_spec.rb +9 -0
  347. data/spec/integration/core/system/centos_spec.rb +9 -0
  348. data/spec/integration/core/system/debian_spec.rb +9 -0
  349. data/spec/integration/core/system/fedora_spec.rb +9 -0
  350. data/spec/integration/core/system/opensuse_spec.rb +9 -0
  351. data/spec/integration/core/system/rhel_spec.rb +9 -0
  352. data/spec/integration/core/system/sles_spec.rb +9 -0
  353. data/spec/integration/core/system/ubuntu_spec.rb +9 -0
  354. data/spec/integration/core/transfer/centos_spec.rb +9 -0
  355. data/spec/integration/core/transfer/debian_spec.rb +9 -0
  356. data/spec/integration/core/transfer/fedora_spec.rb +9 -0
  357. data/spec/integration/core/transfer/opensuse_spec.rb +9 -0
  358. data/spec/integration/core/transfer/rhel_spec.rb +9 -0
  359. data/spec/integration/core/transfer/sles_spec.rb +9 -0
  360. data/spec/integration/core/transfer/ubuntu_spec.rb +9 -0
  361. data/spec/integration/core/user/centos_spec.rb +9 -0
  362. data/spec/integration/core/user/debian_spec.rb +9 -0
  363. data/spec/integration/core/user/fedora_spec.rb +9 -0
  364. data/spec/integration/core/user/opensuse_spec.rb +9 -0
  365. data/spec/integration/core/user/rhel_spec.rb +9 -0
  366. data/spec/integration/core/user/sles_spec.rb +9 -0
  367. data/spec/integration/core/user/ubuntu_spec.rb +9 -0
  368. data/spec/integration/core/yum/centos_spec.rb +9 -0
  369. data/spec/integration/core/yum/fedora_spec.rb +9 -0
  370. data/spec/integration/core/yum/rhel_spec.rb +9 -0
  371. data/spec/integration/core/zypper/opensuse_spec.rb +9 -0
  372. data/spec/integration/core/zypper/sles_spec.rb +9 -0
  373. data/spec/integration/remote/cluster/ubuntu_spec.rb +9 -0
  374. data/spec/integration/remote/cpu/centos_spec.rb +9 -0
  375. data/spec/integration/remote/cpu/debian_spec.rb +9 -0
  376. data/spec/integration/remote/cpu/fedora_spec.rb +9 -0
  377. data/spec/integration/remote/cpu/opensuse_spec.rb +9 -0
  378. data/spec/integration/remote/cpu/rhel_spec.rb +9 -0
  379. data/spec/integration/remote/cpu/sles_spec.rb +9 -0
  380. data/spec/integration/remote/cpu/ubuntu_spec.rb +9 -0
  381. data/spec/integration/remote/env/centos_spec.rb +9 -0
  382. data/spec/integration/remote/env/debian_spec.rb +9 -0
  383. data/spec/integration/remote/env/fedora_spec.rb +9 -0
  384. data/spec/integration/remote/env/opensuse_spec.rb +9 -0
  385. data/spec/integration/remote/env/rhel_spec.rb +9 -0
  386. data/spec/integration/remote/env/sles_spec.rb +9 -0
  387. data/spec/integration/remote/env/ubuntu_spec.rb +9 -0
  388. data/spec/integration/remote/fstab/centos_spec.rb +9 -0
  389. data/spec/integration/remote/fstab/debian_spec.rb +9 -0
  390. data/spec/integration/remote/fstab/fedora_spec.rb +9 -0
  391. data/spec/integration/remote/fstab/opensuse_spec.rb +9 -0
  392. data/spec/integration/remote/fstab/rhel_spec.rb +9 -0
  393. data/spec/integration/remote/fstab/sles_spec.rb +9 -0
  394. data/spec/integration/remote/fstab/ubuntu_spec.rb +9 -0
  395. data/spec/integration/remote/host/centos_spec.rb +9 -0
  396. data/spec/integration/remote/host/debian_spec.rb +9 -0
  397. data/spec/integration/remote/host/fedora_spec.rb +9 -0
  398. data/spec/integration/remote/host/opensuse_spec.rb +9 -0
  399. data/spec/integration/remote/host/rhel_spec.rb +9 -0
  400. data/spec/integration/remote/host/sles_spec.rb +9 -0
  401. data/spec/integration/remote/host/ubuntu_spec.rb +9 -0
  402. data/spec/integration/remote/memory/centos_spec.rb +9 -0
  403. data/spec/integration/remote/memory/debian_spec.rb +9 -0
  404. data/spec/integration/remote/memory/fedora_spec.rb +9 -0
  405. data/spec/integration/remote/memory/opensuse_spec.rb +9 -0
  406. data/spec/integration/remote/memory/rhel_spec.rb +9 -0
  407. data/spec/integration/remote/memory/sles_spec.rb +9 -0
  408. data/spec/integration/remote/memory/ubuntu_spec.rb +9 -0
  409. data/spec/integration/remote/os/centos_spec.rb +9 -0
  410. data/spec/integration/remote/os/debian_spec.rb +9 -0
  411. data/spec/integration/remote/os/fedora_spec.rb +9 -0
  412. data/spec/integration/remote/os/opensuse_spec.rb +9 -0
  413. data/spec/integration/remote/os/rhel_spec.rb +9 -0
  414. data/spec/integration/remote/os/sles_spec.rb +9 -0
  415. data/spec/integration/remote/os/ubuntu_spec.rb +9 -0
  416. data/spec/integration/remote/remote_file/centos_spec.rb +9 -0
  417. data/spec/integration/remote/remote_file/debian_spec.rb +9 -0
  418. data/spec/integration/remote/remote_file/fedora_spec.rb +9 -0
  419. data/spec/integration/remote/remote_file/opensuse_spec.rb +9 -0
  420. data/spec/integration/remote/remote_file/rhel_spec.rb +9 -0
  421. data/spec/integration/remote/remote_file/sles_spec.rb +9 -0
  422. data/spec/integration/remote/remote_file/ubuntu_spec.rb +9 -0
  423. data/spec/spec_helper.rb +2 -11
  424. data/spec/support/shared_examples/integration/core/apt.rb +117 -0
  425. data/spec/support/shared_examples/integration/core/archive.rb +221 -0
  426. data/spec/support/shared_examples/integration/core/disk.rb +91 -0
  427. data/spec/support/shared_examples/integration/core/dmi.rb +34 -0
  428. data/spec/support/shared_examples/integration/core/file.rb +357 -0
  429. data/spec/support/shared_examples/integration/core/find.rb +50 -0
  430. data/spec/support/shared_examples/integration/core/group.rb +62 -0
  431. data/spec/support/shared_examples/integration/core/ip.rb +68 -0
  432. data/spec/support/shared_examples/integration/core/path.rb +90 -0
  433. data/spec/support/shared_examples/integration/core/socket.rb +27 -0
  434. data/spec/support/shared_examples/integration/core/stat.rb +95 -0
  435. data/spec/support/shared_examples/integration/core/stream.rb +112 -0
  436. data/spec/support/shared_examples/integration/core/system.rb +155 -0
  437. data/spec/support/shared_examples/integration/core/transfer.rb +101 -0
  438. data/spec/support/shared_examples/integration/core/user.rb +72 -0
  439. data/spec/support/shared_examples/integration/core/yum.rb +115 -0
  440. data/spec/support/shared_examples/integration/core/zypper.rb +196 -0
  441. data/spec/{integration/remote/cluster_spec.rb → support/shared_examples/integration/remote/cluster.rb} +2 -2
  442. data/spec/support/shared_examples/integration/remote/cpu.rb +38 -0
  443. data/spec/support/shared_examples/integration/remote/env_spec.rb +33 -0
  444. data/spec/support/shared_examples/integration/remote/fstab.rb +89 -0
  445. data/spec/support/shared_examples/integration/remote/host.rb +65 -0
  446. data/spec/support/shared_examples/integration/remote/memory.rb +27 -0
  447. data/spec/support/shared_examples/integration/remote/os.rb +60 -0
  448. data/spec/support/shared_examples/integration/remote/remote_file.rb +172 -0
  449. data/spec/unit/util_spec.rb +16 -0
  450. metadata +425 -29
  451. data/spec/integration/core/apt_spec.rb +0 -119
  452. data/spec/integration/core/archive_spec.rb +0 -223
  453. data/spec/integration/core/disk_spec.rb +0 -93
  454. data/spec/integration/core/dmi_spec.rb +0 -36
  455. data/spec/integration/core/file_spec.rb +0 -359
  456. data/spec/integration/core/find_spec.rb +0 -52
  457. data/spec/integration/core/group_spec.rb +0 -64
  458. data/spec/integration/core/ip_spec.rb +0 -70
  459. data/spec/integration/core/path_spec.rb +0 -92
  460. data/spec/integration/core/socket_spec.rb +0 -29
  461. data/spec/integration/core/stat_spec.rb +0 -97
  462. data/spec/integration/core/stream_spec.rb +0 -114
  463. data/spec/integration/core/system_spec.rb +0 -142
  464. data/spec/integration/core/transfer_spec.rb +0 -103
  465. data/spec/integration/core/user_spec.rb +0 -74
  466. data/spec/integration/core/yum_spec.rb +0 -117
  467. data/spec/integration/core/zypper_spec.rb +0 -198
  468. data/spec/integration/remote/cpu_spec.rb +0 -40
  469. data/spec/integration/remote/env_spec.rb +0 -35
  470. data/spec/integration/remote/fstab_spec.rb +0 -91
  471. data/spec/integration/remote/host_spec.rb +0 -67
  472. data/spec/integration/remote/memory_spec.rb +0 -29
  473. data/spec/integration/remote/os_spec.rb +0 -62
  474. data/spec/integration/remote/remote_file_spec.rb +0 -174
  475. data/spec/zz_reboot_spec.rb +0 -46
@@ -2,1030 +2,43 @@
2
2
 
3
3
  require 'ipaddr'
4
4
 
5
+ require_relative 'ip/constants'
6
+ require_relative 'ip/types'
7
+ require_relative 'ip/parser'
8
+ require_relative 'ip/commands'
9
+
5
10
  module Kanrisuru
6
11
  module Core
7
12
  module IP
8
13
  extend OsPackage::Define
9
14
 
10
- IPROUTE2_JSON_VERSION = 180_129
11
-
12
- IPLinkProperty = Struct.new(
13
- :index, :name, :flags, :mtu,
14
- :qdisc, :state, :group, :qlen,
15
- :link_mode, :link_type, :mac_address, :alias,
16
- :stats
17
- )
18
-
19
- IPAddressProperty = Struct.new(
20
- :index, :name, :flags, :mtu,
21
- :qdisc, :state, :group, :qlen,
22
- :link_type, :mac_address,
23
- :address_info, :stats
24
- )
25
-
26
- IPAddressInfo = Struct.new(
27
- :family, :ip, :broadcast, :scope,
28
- :dynamic, :valid_life_time, :preferred_life_time
29
- )
30
-
31
- IPAddressLabel = Struct.new(
32
- :address, :prefix_length, :label
33
- )
34
-
35
- IPRoute = Struct.new(
36
- :destination, :gateway, :device, :protocol, :scope, :preferred_source, :metric, :flags
37
- )
38
-
39
- IPRule = Struct.new(:priority, :source, :table)
40
-
41
- IPNeighbour = Struct.new(:destination, :device, :lladdr, :state, :stats)
42
- IPNeighbourStats = Struct.new(:used, :confirmed, :updated, :probes, :ref_count)
43
-
44
- IPMAddress = Struct.new(:index, :name, :maddr)
45
- IPMAddressEntry = Struct.new(:family, :link, :address, :users)
46
-
47
- IP_ROUTE_TYPES = %w[
48
- unicast unreachable blackhole prohibit local
49
- broadcast throw nat via anycast multicast
50
- ].freeze
51
-
52
- IPStats = Struct.new(:rx, :tx)
53
- IPStatRX = Struct.new(:bytes, :packets, :errors, :dropped, :over_errors, :multicast)
54
- IPStatTX = Struct.new(:bytes, :packets, :errors, :dropped, :carrier_errors, :collisions)
55
-
56
15
  os_define :linux, :ip
57
16
 
58
17
  def ip(object, action = nil, opts = {})
59
18
  if action.instance_of?(Hash)
60
- opts = action
19
+ opts = action || {}
61
20
  action = 'show'
21
+ elsif action.nil?
22
+ action = 'show'
23
+ opts = {}
62
24
  end
63
25
 
64
26
  case object
65
- when 'link', 'l'
66
- ip_link(action, opts)
67
27
  when 'address', 'addr', 'a'
68
28
  ip_address(action, opts)
69
29
  when 'addrlabel', 'addrl'
70
30
  ip_address_label(action, opts)
31
+ when 'link', 'l'
32
+ ip_link(action, opts)
33
+ when 'maddress', 'maddr', 'm'
34
+ ip_maddress(action, opts)
35
+ when 'neighbour', 'neigh', 'n'
36
+ ip_neighbour(action, opts)
71
37
  when 'route', 'r', 'ro', 'rou', 'rout'
72
38
  ip_route(action, opts)
73
39
  when 'rule', 'ru'
74
40
  ip_rule(action, opts)
75
- when 'neighbour', 'neigh', 'n'
76
- ip_neighbour(action, opts)
77
- when 'maddress', 'maddr', 'm'
78
- ip_maddress(action, opts)
79
- end
80
- end
81
-
82
- private
83
-
84
- def ip_version
85
- command = Kanrisuru::Command.new('ip -V')
86
- execute_shell(command)
87
-
88
- raise 'ip command not found' if command.failure?
89
-
90
- command.to_s.split('ip utility, iproute2-ss')[1].to_i
91
- end
92
-
93
- def ip_link(action, opts)
94
- command = nil
95
-
96
- case action
97
- when 'show', 'list'
98
- version = ip_version
99
-
100
- command = Kanrisuru::Command.new('ip')
101
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
102
- command.append_flag('-s', opts[:stats])
103
- command.append_arg('-family', opts[:family])
104
- command << 'link show'
105
-
106
- command.append_arg('dev', opts[:dev])
107
- command.append_arg('group', opts[:group])
108
- command.append_arg('master', opts[:master])
109
- command.append_arg('type', opts[:type])
110
- command.append_arg('vrf', opts[:vrf])
111
-
112
- command.append_flag('up', opts[:up])
113
- when 'set'
114
- command = Kanrisuru::Command.new('ip link set')
115
-
116
- raise ArgumentError, 'no device defined' unless opts[:dev]
117
-
118
- command.append_arg('dev', opts[:dev])
119
-
120
- case opts[:direction]
121
- when 'up'
122
- command.append_flag('up')
123
- when 'down'
124
- command.append_flag('down')
125
- end
126
-
127
- command.append_arg('arp', opts[:arp])
128
- command.append_arg('multicast', opts[:multicast])
129
- command.append_arg('dynamic', opts[:dynamic])
130
- command.append_arg('name', opts[:name])
131
- command.append_arg('txqueuelen', opts[:txqueuelen])
132
- command.append_arg('txqlen', opts[:txqlen])
133
- command.append_arg('mtu', opts[:mtu])
134
- command.append_arg('address', opts[:address])
135
- command.append_arg('broadcast', opts[:broadcast])
136
- command.append_arg('brd', opts[:brd])
137
- command.append_arg('peer', opts[:peer])
138
- command.append_arg('netns', opts[:netns])
139
-
140
- if Kanrisuru::Util.present?(opts[:vf])
141
- command.append_arg('vf', opts[:vf])
142
- command.append_arg('mac', opts[:mac])
143
-
144
- if Kanrisuru::Util.present?(opts[:vlan])
145
- command.append_arg('vlan', opts[:vlan])
146
- command.append_arg('qos', opts[:qos])
147
- end
148
-
149
- command.append_arg('rate', opts[:rate])
150
- end
151
- end
152
-
153
- execute_shell(command)
154
-
155
- Kanrisuru::Result.new(command) do |cmd|
156
- if %w[show list].include?(action)
157
- if version >= IPROUTE2_JSON_VERSION
158
- begin
159
- ip_link_result_json(cmd.to_json)
160
- rescue JSON::ParserError
161
- ip_link_result_parse(cmd.to_a)
162
- end
163
- else
164
- ip_link_result_parse(cmd.to_a)
165
- end
166
- end
167
- end
168
- end
169
-
170
- def ip_address(action, opts)
171
- command = nil
172
-
173
- case action
174
- when 'show', 'list'
175
- version = ip_version
176
-
177
- command = Kanrisuru::Command.new('ip')
178
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
179
- command.append_flag('-s', opts[:stats])
180
- command.append_arg('-family', opts[:family])
181
- command << 'address show'
182
-
183
- command.append_arg('dev', opts[:dev])
184
- command.append_arg('scope', opts[:scope])
185
- command.append_arg('to', opts[:prefix])
186
- command.append_arg('label', opts[:label])
187
-
188
- command.append_flag('dynamic', opts[:dynamic])
189
- command.append_flag('permanent', opts[:permanent])
190
- command.append_flag('tenative', opts[:tenative])
191
- command.append_flag('deprecated', opts[:deprecated])
192
- command.append_flag('primary', opts[:primary])
193
- command.append_flag('secondary', opts[:secondary])
194
- command.append_flag('up', opts[:up])
195
- when 'add'
196
- command = Kanrisuru::Command.new('ip address add')
197
- command << opts[:address]
198
-
199
- command.append_arg('dev', opts[:dev])
200
- command.append_arg('label', opts[:label])
201
- command.append_arg('scope', opts[:scope])
202
- when 'del', 'delete'
203
- command = Kanrisuru::Command.new('ip address del')
204
- command << opts[:address]
205
-
206
- command.append_arg('dev', opts[:dev])
207
- command.append_arg('label', opts[:label])
208
- command.append_arg('scope', opts[:scope])
209
- when 'flush'
210
- command = Kanrisuru::Command.new('ip address flush')
211
-
212
- command.append_arg('dev', opts[:dev])
213
- command.append_arg('scope', opts[:scope])
214
- command.append_arg('to', opts[:prefix])
215
- command.append_arg('label', opts[:label])
216
-
217
- command.append_flag('dynamic', opts[:dynamic])
218
- command.append_flag('permanent', opts[:permanent])
219
- command.append_flag('tenative', opts[:tenative])
220
- command.append_flag('deprecated', opts[:deprecated])
221
- command.append_flag('primary', opts[:primary])
222
- command.append_flag('secondary', opts[:secondary])
223
- end
224
-
225
- execute_shell(command)
226
-
227
- Kanrisuru::Result.new(command) do |cmd|
228
- if %w[show list].include?(action)
229
- if version >= IPROUTE2_JSON_VERSION
230
- begin
231
- ip_address_result_json(cmd.to_json)
232
- rescue JSON::ParserError
233
- ip_address_result_parse(cmd.to_a)
234
- end
235
- else
236
- ip_address_result_parse(cmd.to_a)
237
- end
238
- end
239
- end
240
- end
241
-
242
- def ip_address_label(action, opts)
243
- command = nil
244
-
245
- case action
246
- when 'show', 'list'
247
- version = ip_version
248
-
249
- command = Kanrisuru::Command.new('ip')
250
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
251
- command << 'addrlabel list'
252
- when 'flush'
253
- command = Kanrisuru::Command.new('ip addrlabel flush')
254
- when 'add'
255
- command = Kanrisuru::Command.new('ip addrlabel add')
256
- command.append_arg('prefix', opts[:prefix])
257
- command.append_arg('dev', opts[:dev])
258
- command.append_arg('label', opts[:label])
259
- when 'del'
260
- command = Kanrisuru::Command.new('ip addrlabel del')
261
- command.append_arg('prefix', opts[:prefix])
262
- command.append_arg('dev', opts[:dev])
263
- command.append_arg('label', opts[:label])
264
- end
265
-
266
- execute_shell(command)
267
-
268
- Kanrisuru::Result.new(command) do |cmd|
269
- if %w[show list].include?(action)
270
- if version >= IPROUTE2_JSON_VERSION
271
- begin
272
- ip_address_label_result_json(cmd.to_json)
273
- rescue JSON::ParserError
274
- ip_address_label_result_parse(cmd.to_a)
275
- end
276
- else
277
- ip_address_label_result_parse(cmd.to_a)
278
- end
279
- end
280
- end
281
- end
282
-
283
- def ip_route(action, opts)
284
- case action
285
- when 'show', 'list'
286
- version = ip_version
287
-
288
- command = Kanrisuru::Command.new('ip')
289
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
290
- command.append_arg('-family', opts[:family])
291
- command << 'route show'
292
-
293
- command.append_arg('to', opts[:to])
294
- command.append_arg('dev', opts[:dev])
295
- command.append_arg('proto', opts[:proto])
296
- command.append_arg('type', opts[:type])
297
- command.append_arg('via', opts[:via])
298
- command.append_arg('src', opts[:src])
299
- command.append_arg('realms', opts[:realms])
300
- when 'flush'
301
- command = Kanrisuru::Command.new('ip')
302
- command.append_arg('-family', opts[:family])
303
- command << 'route flush'
304
-
305
- command.append_arg('to', opts[:to])
306
- command.append_arg('dev', opts[:dev])
307
- command.append_arg('proto', opts[:proto])
308
- command.append_arg('type', opts[:type])
309
- command.append_arg('via', opts[:via])
310
- command.append_arg('src', opts[:src])
311
- command.append_arg('realm', opts[:realm])
312
- command.append_arg('realms', opts[:realm])
313
- when 'add', 'change', 'append', 'del', 'delete'
314
- command = Kanrisuru::Command.new('ip route')
315
- command << action
316
-
317
- command.append_arg('to', opts[:to])
318
- command.append_arg('tos', opts[:tos])
319
- command.append_arg('dsfield', opts[:dsfield])
320
- command.append_arg('metric', opts[:metric])
321
- command.append_arg('preference', opts[:preference])
322
- command.append_arg('table', opts[:table])
323
- command.append_arg('vrf', opts[:vrf])
324
- command.append_arg('dev', opts[:dev])
325
- command.append_arg('via', opts[:via])
326
- command.append_arg('src', opts[:src])
327
- command.append_arg('realm', opts[:realm])
328
-
329
- command.append_arg('mtu', opts[:mtu])
330
- command.append_arg('window', opts[:window])
331
- command.append_arg('rtt', opts[:rtt])
332
- command.append_arg('rttvar', opts[:rttvar])
333
- command.append_arg('rto_min', opts[:rto_min])
334
- command.append_arg('ssthresh', opts[:ssthresh])
335
- command.append_arg('cwnd', opts[:cwnd])
336
- command.append_arg('initcwnd', opts[:initcwnd])
337
- command.append_arg('initrwnd', opts[:initrwnd])
338
- command.append_arg('features', opts[:features])
339
- command.append_arg('quickack', opts[:quickack])
340
- command.append_arg('fastopen_no_cookie', opts[:fastopen_no_cookie])
341
-
342
- if Kanrisuru::Util.present?(opts[:congctl])
343
- if Kanrisuru::Util.present?(opts[:congctl_lock])
344
- command.append_arg('congctl', opts[:congctl])
345
- else
346
- command.append_arg('congctl lock', opts[:congctl])
347
- end
348
- end
349
-
350
- command.append_arg('advmss', opts[:advmss])
351
- command.append_arg('reordering', opts[:reordering])
352
-
353
- if Kanrisuru::Util.present?(opts[:next_hop])
354
- next_hop = opts[:next_hop]
355
-
356
- command << 'next_hop'
357
- command.append_arg('via', next_hop[:via])
358
- command.append_arg('dev', next_hop[:dev])
359
- command.append_arg('weight', next_hop[:weight])
360
- end
361
-
362
- command.append_arg('scope', opts[:scope])
363
- command.append_arg('protocol', opts[:protocol])
364
- command.append_flag('onlink', opts[:onlink])
365
- command.append_arg('pref', opts[:pref])
366
- when 'get'
367
- command = Kanrisuru::Command.new('ip route get')
368
-
369
- command.append_arg('to', opts[:to])
370
- command.append_arg('from', opts[:from])
371
- command.append_arg('tos', opts[:tos])
372
- command.append_arg('dsfield', opts[:dsfield])
373
- command.append_arg('iif', opts[:iif])
374
- command.append_arg('oif', opts[:oif])
375
- command.append_arg('mark', opts[:mark])
376
- command.append_arg('vrf', opts[:vrf])
377
- command.append_arg('ipproto', opts[:ipproto])
378
- command.append_arg('sport', opts[:sport])
379
- command.append_arg('dport', opts[:dport])
380
-
381
- command.append_flag('connected', opts[:connected])
382
- end
383
-
384
- execute_shell(command)
385
-
386
- Kanrisuru::Result.new(command) do |cmd|
387
- if %w[show list].include?(action)
388
- if version >= IPROUTE2_JSON_VERSION
389
- begin
390
- ip_route_result_json(cmd.to_json)
391
- rescue JSON::ParserError
392
- ip_route_result_parse(cmd.to_a)
393
- end
394
- else
395
- ip_route_result_parse(cmd.to_a)
396
- end
397
- end
398
- end
399
- end
400
-
401
- def ip_rule(action, opts)
402
- case action
403
- when 'show', 'list'
404
- version = ip_version
405
-
406
- command = Kanrisuru::Command.new('ip')
407
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
408
-
409
- command << 'rule show'
410
- when 'flush'
411
- command = Kanrisuru::Command.new('ip rule flush')
412
- when 'add', 'delete'
413
- command = Kanrisuru::Command.new('ip rule')
414
- command << action
415
-
416
- command.append_arg('type', opts[:type])
417
- command.append_arg('from', opts[:from])
418
- command.append_arg('to', opts[:to])
419
- command.append_arg('iif', opts[:iif])
420
- command.append_arg('tos', opts[:tos])
421
- command.append_arg('dsfield', opts[:dsfield])
422
- command.append_arg('fwmark', opts[:fwmark])
423
- command.append_arg('priority', opts[:priority])
424
- command.append_arg('table', opts[:table])
425
- command.append_arg('realms', opts[:realms])
426
- command.append_arg('nat', opts[:nat])
427
- end
428
-
429
- execute_shell(command)
430
-
431
- Kanrisuru::Result.new(command) do |cmd|
432
- if %w[show list].include?(action)
433
- if version >= IPROUTE2_JSON_VERSION
434
- begin
435
- ip_rule_result_json(cmd.to_json)
436
- rescue JSON::ParserError
437
- ip_rule_result_parse(cmd.to_a)
438
- end
439
- else
440
- ip_rule_result_parse(cmd.to_a)
441
- end
442
- end
443
- end
444
- end
445
-
446
- def ip_neighbour(action, opts)
447
- case action
448
- when 'add', 'change', 'replace', 'del', 'delete'
449
- command = Kanrisuru::Command.new('ip neighbour')
450
- command << action
451
-
452
- command.append_arg('to', opts[:to])
453
- command.append_arg('dev', opts[:dev])
454
-
455
- if action != 'del' && action != 'delete'
456
- command.append_arg('lladdr', opts[:lladdr])
457
- command.append_arg('nud', opts[:nud])
458
- end
459
-
460
- command.append_flag('permanent', opts[:permanent])
461
- command.append_flag('noarp', opts[:noarp])
462
- command.append_flag('reachable', opts[:reachable])
463
- command.append_flag('stale', opts[:stale])
464
- when 'show', 'list'
465
- version = ip_version
466
-
467
- command = Kanrisuru::Command.new('ip')
468
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
469
- command.append_flag('-s', opts[:stats])
470
-
471
- command << 'neighbour show'
472
-
473
- command.append_arg('to', opts[:to])
474
- command.append_arg('dev', opts[:dev])
475
- command.append_arg('nud', opts[:nud])
476
-
477
- command.append_flag('unused', opts[:unused])
478
- when 'flush'
479
- command = Kanrisuru::Command.new('ip neighbour flush')
480
- command.append_arg('to', opts[:to])
481
- command.append_arg('dev', opts[:dev])
482
- command.append_arg('nud', opts[:nud])
483
-
484
- command.append_flag('unused', opts[:unused])
485
- end
486
-
487
- execute_shell(command)
488
-
489
- Kanrisuru::Result.new(command) do |cmd|
490
- if %w[show list].include?(action)
491
- if version >= IPROUTE2_JSON_VERSION
492
- begin
493
- ip_neighbour_result_json(cmd.to_json)
494
- rescue JSON::ParserError
495
- ip_neighbour_result_parse(cmd.to_a)
496
- end
497
- else
498
- ip_neighbour_result_parse(cmd.to_a)
499
- end
500
- end
501
- end
502
- end
503
-
504
- def ip_maddress(action, opts)
505
- case action
506
- when 'show', 'list'
507
- command = Kanrisuru::Command.new('ip')
508
-
509
- version = ip_version
510
- command.append_flag('-json') if version >= IPROUTE2_JSON_VERSION
511
- command.append_arg('-family', opts[:family])
512
- command << 'maddress show'
513
-
514
- command.append_arg('dev', opts[:dev])
515
- when 'add', 'delete', 'del'
516
- command = Kanrisuru::Command.new('ip maddress')
517
- command << action
518
-
519
- command.append_arg('address', opts[:lladdress])
520
- command.append_arg('dev', opts[:dev])
521
- end
522
-
523
- execute_shell(command)
524
-
525
- Kanrisuru::Result.new(command) do |cmd|
526
- if %w[show list].include?(action)
527
- if version >= IPROUTE2_JSON_VERSION
528
- begin
529
- ip_maddress_result_json(cmd.to_json)
530
- rescue JSON::ParserError
531
- ip_maddress_result_parse(cmd.to_a)
532
- end
533
- else
534
- ip_maddress_result_parse(cmd.to_a)
535
- end
536
- end
537
- end
538
- end
539
-
540
- def ip_maddress_result_json(rows)
541
- rows.map do |row|
542
- maddress = IPMAddress.new(row['ifindex'], row['ifname'], [])
543
-
544
- entries = row['maddr'] || []
545
- entries.each do |entry|
546
- ipmaddress_entry = IPMAddressEntry.new
547
- entry.each do |key, value|
548
- ipmaddress_entry[key] = value
549
- end
550
-
551
- maddress.maddr << ipmaddress_entry
552
- end
553
-
554
- maddress
555
- end
556
- end
557
-
558
- def ip_maddress_result_parse(lines)
559
- rows = []
560
- current_row = nil
561
-
562
- lines.each.with_index do |line, _index|
563
- case line
564
- when /^\d+:\s/
565
- rows << current_row unless current_row.nil?
566
-
567
- current_row = IPMAddress.new
568
- parse_ip_maddr_name(current_row, line)
569
- when /^link/
570
- _, link = line.split
571
-
572
- entry = IPMAddressEntry.new
573
- entry.link = link
574
-
575
- current_row.maddr << entry
576
- when /^inet/
577
- values = line.split
578
-
579
- entry = IPMAddressEntry.new
580
- values.each.with_index do |value, index|
581
- case value
582
- when 'inet', 'inet6'
583
- entry.family = value
584
- entry.address = values[index + 1]
585
- when 'users'
586
- entry.users = values[index + 1].to_i
587
- end
588
- end
589
-
590
- current_row.maddr << entry
591
- end
592
- end
593
-
594
- rows << current_row
595
- rows
596
- end
597
-
598
- def ip_link_result_json(rows)
599
- result = []
600
- rows.each do |row|
601
- next if row['ifindex'].instance_of?(NilClass)
602
-
603
- new_row = IPLinkProperty.new(
604
- row['ifindex'], row['ifname'], row['flags'], row['mtu'], row['qdisc'],
605
- row['operstate'], row['group'], row['txqlen'], row['linkmode'],
606
- row['link_type'], row['address'], row['ifalias'], nil
607
- )
608
-
609
- if row.key?('stats64')
610
- rx = row['stats64']['rx']
611
- tx = row['stats64']['tx']
612
-
613
- new_row[:stats] = IPStats.new(
614
- IPStatRX.new(
615
- rx['bytes'], rx['packets'], rx['errors'],
616
- rx['dropped'], rx['over_errors'], rx['multicast']
617
- ),
618
- IPStatTX.new(
619
- tx['bytes'], tx['packets'], tx['errors'],
620
- tx['dropped'], tx['carrier_errors'], tx['collisions']
621
- )
622
- )
623
- end
624
-
625
- result << new_row
626
- end
627
-
628
- result
629
- end
630
-
631
- def ip_address_result_json(rows)
632
- result = []
633
- rows.each do |row|
634
- next if row['ifindex'].instance_of?(NilClass)
635
-
636
- new_row = IPAddressProperty.new(
637
- row['ifindex'], row['ifname'], row['flags'], row['mtu'], row['qdisc'],
638
- row['operstate'], row['group'], row['txqlen'], row['link_type'], row['address'], []
639
- )
640
-
641
- if row.key?('stats64')
642
- rx = row['stats64']['rx']
643
- tx = row['stats64']['tx']
644
-
645
- new_row[:stats] = IPStats.new(
646
- IPStatRX.new(
647
- rx['bytes'], rx['packets'], rx['errors'],
648
- rx['dropped'], rx['over_errors'], rx['multicast']
649
- ),
650
- IPStatTX.new(
651
- tx['bytes'], tx['packets'], tx['errors'],
652
- tx['dropped'], tx['carrier_errors'], tx['collisions']
653
- )
654
- )
655
- end
656
-
657
- addr_info = row['addr_info'] || []
658
-
659
- new_row[:address_info] = addr_info.map do |address|
660
- dynamic = address['dynamic'] == true || address['dynamic'] == 'true'
661
-
662
- IPAddressInfo.new(
663
- address['family'],
664
- IPAddr.new(address['local']),
665
- address['broadcast'],
666
- address['scope'],
667
- dynamic,
668
- address['valid_life_time'], address['preferred_life_time']
669
- )
670
- end
671
-
672
- result << new_row
673
- end
674
-
675
- result
676
- end
677
-
678
- def ip_neighbour_result_json(rows)
679
- rows.map do |row|
680
- neighbour = IPNeighbour.new(
681
- IPAddr.new(row['dst']),
682
- row['dev'],
683
- row['lladdr'],
684
- row['state']
685
- )
686
-
687
- if row.key?('used') || row.key?('confirmed') ||
688
- row.key?('refcnt') || row.key?('updated') ||
689
- row.key?('probes')
690
- neighbour.stats = IPNeighbourStats.new
691
-
692
- neighbour.stats.ref_count = row['refcnt']
693
- neighbour.stats.used = row['used']
694
- neighbour.stats.confirmed = row['confirmed']
695
- neighbour.stats.probes = row['probes']
696
- neighbour.stats.updated = row['updated']
697
- end
698
-
699
- neighbour
700
- end
701
- end
702
-
703
- def ip_neighbour_result_parse(lines)
704
- rows = []
705
- lines.each do |line|
706
- values = line.split
707
-
708
- neighbour = IPNeighbour.new(IPAddr.new(values[0]))
709
- neighbour.state = [values[values.length - 1]]
710
-
711
- if line.include?('probes') || line.include?('used') || line.include?('ref')
712
- neighbour.stats = IPNeighbourStats.new
713
- end
714
-
715
- values.each.with_index do |value, index|
716
- case value
717
- when 'dev'
718
- neighbour.device = values[index + 1]
719
- when 'lladdr'
720
- neighbour.lladdr = values[index + 1]
721
- when 'ref'
722
- neighbour.stats.ref_count = values[index + 1] ? values[index + 1].to_i : nil
723
- when 'used'
724
- used, confirmed, updated = values[index + 1].split('/')
725
-
726
- neighbour.stats.used = used ? used.to_i : nil
727
- neighbour.stats.updated = updated ? updated.to_i : nil
728
- neighbour.stats.confirmed = confirmed ? confirmed.to_i : nil
729
- when 'probes'
730
- neighbour.stats.probes = values[index + 1] ? values[index + 1].to_i : nil
731
- end
732
- end
733
-
734
- rows << neighbour
735
- end
736
-
737
- rows
738
- end
739
-
740
- def ip_address_label_result_json(rows)
741
- result = []
742
-
743
- rows.each do |row|
744
- new_row = IPAddressLabel.new(
745
- row['address'], row['prefixlen'], row['label']
746
- )
747
-
748
- result << new_row
749
- end
750
-
751
- result
752
- end
753
-
754
- def ip_route_result_json(rows)
755
- rows.map do |row|
756
- IPRoute.new(
757
- row['dst'],
758
- row['gateway'],
759
- row['dev'],
760
- row['protocol'],
761
- row['scope'],
762
- row['prefsrc'],
763
- row['metric'],
764
- row['flags']
765
- )
766
- end
767
- end
768
-
769
- def ip_route_result_parse(lines)
770
- rows = []
771
-
772
- lines.map do |line|
773
- values = line.split(/\s/)
774
-
775
- ip_route = IPRoute.new(values[0])
776
- ip_route.flags = []
777
-
778
- values.each.with_index do |value, index|
779
- case value
780
- when 'via'
781
- ip_route.gateway = values[index + 1]
782
- when 'dev'
783
- ip_route.device = values[index + 1]
784
- when 'proto'
785
- ip_route.protocol = values[index + 1]
786
- when 'src'
787
- ip_route.preferred_source = values[index + 1]
788
- when 'scope'
789
- ip_route.scope = values[index + 1]
790
- when 'flags'
791
- ip_route.flags = values[index + 1]
792
- when 'metric'
793
- ip_route.metric = values[index + 1]
794
- end
795
- end
796
-
797
- rows << ip_route
798
- end
799
-
800
- rows
801
- end
802
-
803
- def ip_rule_result_json(rows)
804
- rows.map do |row|
805
- IPRule.new(
806
- row['priority'],
807
- row['src'],
808
- row['table']
809
- )
810
- end
811
- end
812
-
813
- def ip_rule_result_parse(lines)
814
- rows = []
815
- lines.each do |line|
816
- _, priority, string = line.split(/(\d+):\s/)
817
- values = string.split(/\s/)
818
-
819
- rule = IPRule.new(priority)
820
-
821
- values.each.with_index do |value, index|
822
- case value
823
- when 'from'
824
- rule.source = values[index + 1]
825
- when 'lookup'
826
- rule.table = values[index + 1]
827
- end
828
- end
829
-
830
- rows << rule
831
41
  end
832
-
833
- rows
834
- end
835
-
836
- def ip_link_result_parse(lines)
837
- rows = []
838
- current_row = nil
839
-
840
- lines.each.with_index do |line, index|
841
- case line
842
- when /^\d+:\s/
843
- rows << current_row unless current_row.nil?
844
-
845
- current_row = IPLinkProperty.new
846
- parse_ip_row(current_row, line)
847
- when /^link/
848
- parse_link(current_row, line)
849
- when /^alias/
850
- parse_alias(current_row, line)
851
- when /^RX:/
852
- parse_rx(current_row, lines[index + 1])
853
- when /^TX:/
854
- parse_tx(current_row, lines[index + 1])
855
- end
856
- end
857
-
858
- rows << current_row
859
- rows
860
- end
861
-
862
- def ip_address_result_parse(lines)
863
- rows = []
864
- current_row = nil
865
-
866
- lines.each.with_index do |line, index|
867
- case line
868
- when /^\d+:\s/
869
- rows << current_row unless current_row.nil?
870
-
871
- current_row = IPAddressProperty.new
872
- current_row.address_info = []
873
-
874
- parse_ip_row(current_row, line)
875
- when /^link/
876
- parse_link(current_row, line)
877
- when /^inet/
878
- parse_address_info(current_row, line)
879
- when /^valid_lft/
880
- parse_valid(current_row, line)
881
- when /^RX:/
882
- parse_rx(current_row, lines[index + 1])
883
- when /^TX:/
884
- parse_tx(current_row, lines[index + 1])
885
- end
886
- end
887
-
888
- rows << current_row
889
- rows
890
- end
891
-
892
- def ip_address_label_result_parse(lines)
893
- lines.map do |line|
894
- _, addr, _, label = line.split(/\s/)
895
- address, prefix_length = addr.split(%r{/})
896
-
897
- IPAddressLabel.new(address, prefix_length.to_i, label)
898
- end
899
- end
900
-
901
- def parse_alias(row, line)
902
- _, alias_string = line.split('alias')
903
- row.alias = alias_string
904
- end
905
-
906
- def parse_ip_maddr_name(row, line)
907
- index = line.match(/^\d+/).to_s.to_i
908
- _, name = line.split(/^\d+:\s/)
909
-
910
- row.index = index
911
- row.name = name
912
- row.maddr = []
913
- end
914
-
915
- def parse_ip_row(row, line)
916
- index = line.match(/^\d+/).to_s.to_i
917
- _, string = line.split(/^\d+:\s/)
918
- name = string.match(/^\w+/).to_s
919
- _, string = string.split(/^\w+:\s/)
920
- _, flags, string = string.split(/(<.+>)\s/)
921
-
922
- flags = flags.gsub(/<?>?/, '')
923
- flags = flags.split(',')
924
-
925
- row.index = index
926
- row.name = name
927
- row.flags = flags
928
-
929
- values = string.split(/\s/)
930
- values.each.with_index do |_, i|
931
- case values[i]
932
- when 'mtu'
933
- row.mtu = values[i + 1].to_i
934
- when 'qdisc'
935
- row.qdisc = values[i + 1]
936
- when 'state'
937
- row.state = values[i + 1]
938
- when 'group'
939
- row.group = values[i + 1]
940
- when 'qlen'
941
- row.qlen = values[i + 1].to_i
942
- when 'mode'
943
- row.link_mode = values[i + 1]
944
- end
945
- end
946
- end
947
-
948
- def parse_link(row, line)
949
- _, string = line.split(%r{^link/})
950
- link_type, mac_address = string.split
951
-
952
- row.link_type = link_type
953
- row.mac_address = mac_address
954
- end
955
-
956
- def parse_address_info(row, line)
957
- values = line.split
958
- address_info = IPAddressInfo.new
959
-
960
- values.each.with_index do |_, index|
961
- case values[index]
962
- when 'inet', 'inet6'
963
- address_info.family = values[index]
964
- address_info.ip = IPAddr.new(values[index + 1].split('/')[0])
965
- when 'brd'
966
- address_info.broadcast = values[index + 1]
967
- when 'scope'
968
- address_info.scope = values[index + 1]
969
- when 'dynamic'
970
- address_info.dynamic = true
971
- end
972
- end
973
-
974
- row.address_info << address_info
975
- end
976
-
977
- def parse_valid(row, line)
978
- values = line.split
979
-
980
- values.each.with_index do |_, index|
981
- case values[index]
982
- when 'valid_lft'
983
- row.address_info.last.valid_life_time = values[index + 1]
984
- when 'preferred_lft'
985
- row.address_info.last.preferred_life_time = values[index + 1]
986
- end
987
- end
988
- end
989
-
990
- def parse_rx(row, line)
991
- values = line.split
992
-
993
- bytes = values[0].to_i
994
- packets = values[1].to_i
995
- errors = values[2].to_i
996
- dropped = values[3].to_i
997
- over_errors = values[4].to_i
998
- multicast = values[5].to_i
999
-
1000
- row.stats = IPStats.new
1001
- row.stats.rx = IPStatRX.new(
1002
- bytes,
1003
- packets,
1004
- errors,
1005
- dropped,
1006
- over_errors,
1007
- multicast
1008
- )
1009
- end
1010
-
1011
- def parse_tx(row, line)
1012
- values = line.split
1013
-
1014
- bytes = values[0].to_i
1015
- packets = values[1].to_i
1016
- errors = values[2].to_i
1017
- dropped = values[3].to_i
1018
- carrier_errors = values[4].to_i
1019
- collisions = values[5].to_i
1020
-
1021
- row.stats.tx = IPStatTX.new(
1022
- bytes,
1023
- packets,
1024
- errors,
1025
- dropped,
1026
- carrier_errors,
1027
- collisions
1028
- )
1029
42
  end
1030
43
  end
1031
44
  end