MuranoCLI 3.2.1.pre.beta.6 → 3.2.1.pre.beta.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (228) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.md +10 -0
  3. data/MuranoCLI.gemspec +37 -6
  4. data/Rakefile +38 -11
  5. data/lib/MrMurano/commands/business.rb +0 -4
  6. data/lib/MrMurano/version.rb +1 -1
  7. metadata +2 -251
  8. data/dockers/Dockerfile.2.2.9 +0 -40
  9. data/dockers/Dockerfile.2.3.6 +0 -40
  10. data/dockers/Dockerfile.2.4.3 +0 -40
  11. data/dockers/Dockerfile.2.5.0 +0 -40
  12. data/dockers/Dockerfile.GemRelease +0 -49
  13. data/dockers/Dockerfile.m4 +0 -122
  14. data/dockers/README.rst +0 -362
  15. data/dockers/RELEASE.rst +0 -135
  16. data/dockers/docker-test.sh +0 -163
  17. data/dockers/gem-release.sh +0 -4
  18. data/docs/basic_example.rst +0 -436
  19. data/docs/ci/.trustme.plugin +0 -140
  20. data/docs/ci/.trustme.sh +0 -516
  21. data/docs/ci/.trustme.vim +0 -55
  22. data/docs/completions/murano_completion-bash +0 -4484
  23. data/docs/demo.md +0 -109
  24. data/docs/develop.rst +0 -392
  25. data/docs/release.rst +0 -295
  26. data/spec/Account-Passwords_spec.rb +0 -245
  27. data/spec/Account_spec.rb +0 -256
  28. data/spec/Business_spec.rb +0 -307
  29. data/spec/ConfigFile_spec.rb +0 -55
  30. data/spec/ConfigMigrate_spec.rb +0 -108
  31. data/spec/Config_spec.rb +0 -440
  32. data/spec/Content_spec.rb +0 -422
  33. data/spec/GatewayBase_spec.rb +0 -65
  34. data/spec/GatewayDevice_spec.rb +0 -403
  35. data/spec/GatewayResource_spec.rb +0 -283
  36. data/spec/GatewaySettings_spec.rb +0 -130
  37. data/spec/HttpAuthed_spec.rb +0 -87
  38. data/spec/Http_spec.rb +0 -220
  39. data/spec/MakePretties_spec.rb +0 -127
  40. data/spec/Mock_spec.rb +0 -62
  41. data/spec/ProjectFile_spec.rb +0 -381
  42. data/spec/Setting_spec.rb +0 -120
  43. data/spec/Solution-ServiceConfig_spec.rb +0 -272
  44. data/spec/Solution-ServiceEventHandler_spec.rb +0 -442
  45. data/spec/Solution-ServiceModules_spec.rb +0 -562
  46. data/spec/Solution-UsersRoles_spec.rb +0 -269
  47. data/spec/Solution_spec.rb +0 -140
  48. data/spec/SyncRoot_spec.rb +0 -111
  49. data/spec/SyncUpDown_spec.rb +0 -868
  50. data/spec/Verbosing_spec.rb +0 -332
  51. data/spec/Webservice-Cors_spec.rb +0 -225
  52. data/spec/Webservice-Endpoint_spec.rb +0 -650
  53. data/spec/Webservice-File_spec.rb +0 -282
  54. data/spec/Webservice-Setting_spec.rb +0 -105
  55. data/spec/_workspace.rb +0 -43
  56. data/spec/cmd_business_spec.rb +0 -64
  57. data/spec/cmd_common.rb +0 -507
  58. data/spec/cmd_config_spec.rb +0 -73
  59. data/spec/cmd_content_spec.rb +0 -109
  60. data/spec/cmd_cors_spec.rb +0 -54
  61. data/spec/cmd_device_spec.rb +0 -130
  62. data/spec/cmd_domain_spec.rb +0 -62
  63. data/spec/cmd_element_spec.rb +0 -401
  64. data/spec/cmd_exchange_spec.rb +0 -114
  65. data/spec/cmd_help_spec.rb +0 -72
  66. data/spec/cmd_init_spec.rb +0 -475
  67. data/spec/cmd_keystore_spec.rb +0 -97
  68. data/spec/cmd_link_spec.rb +0 -105
  69. data/spec/cmd_logs_spec.rb +0 -162
  70. data/spec/cmd_password_spec.rb +0 -64
  71. data/spec/cmd_setting_application_spec.rb +0 -300
  72. data/spec/cmd_setting_product_spec.rb +0 -246
  73. data/spec/cmd_status_spec.rb +0 -300
  74. data/spec/cmd_syncdown_application_spec.rb +0 -128
  75. data/spec/cmd_syncdown_both_spec.rb +0 -178
  76. data/spec/cmd_syncdown_unit_spec.rb +0 -861
  77. data/spec/cmd_syncup_spec.rb +0 -148
  78. data/spec/cmd_token_spec.rb +0 -53
  79. data/spec/cmd_usage_spec.rb +0 -79
  80. data/spec/dry_run_formatter.rb +0 -28
  81. data/spec/fixtures/.mrmuranorc +0 -9
  82. data/spec/fixtures/ProjectFiles/invalid.yaml +0 -9
  83. data/spec/fixtures/ProjectFiles/only_meta.yaml +0 -24
  84. data/spec/fixtures/ProjectFiles/with_routes.yaml +0 -27
  85. data/spec/fixtures/SolutionFiles/0.2.0.json +0 -20
  86. data/spec/fixtures/SolutionFiles/0.2.0_invalid.json +0 -18
  87. data/spec/fixtures/SolutionFiles/0.2.json +0 -21
  88. data/spec/fixtures/SolutionFiles/0.3.0.json +0 -20
  89. data/spec/fixtures/SolutionFiles/0.3.0_invalid.json +0 -19
  90. data/spec/fixtures/SolutionFiles/0.3.json +0 -20
  91. data/spec/fixtures/SolutionFiles/basic.json +0 -20
  92. data/spec/fixtures/SolutionFiles/secret.json +0 -6
  93. data/spec/fixtures/configfile +0 -9
  94. data/spec/fixtures/dumped_config +0 -57
  95. data/spec/fixtures/exchange_element/element-show.json +0 -1
  96. data/spec/fixtures/exchange_element/swagger-mur-6407__10k.yaml +0 -282
  97. data/spec/fixtures/exchange_element/swagger-mur-6407__20k.yaml +0 -588
  98. data/spec/fixtures/gateway_resource_files/resources.notyaml +0 -12
  99. data/spec/fixtures/gateway_resource_files/resources.yaml +0 -13
  100. data/spec/fixtures/gateway_resource_files/resources_invalid.yaml +0 -13
  101. data/spec/fixtures/mrmuranorc_deleted_bob +0 -6
  102. data/spec/fixtures/mrmuranorc_tool_bob +0 -3
  103. data/spec/fixtures/product_spec_files/example.exoline.spec.yaml +0 -116
  104. data/spec/fixtures/product_spec_files/example.murano.spec.yaml +0 -14
  105. data/spec/fixtures/product_spec_files/gwe.exoline.spec.yaml +0 -21
  106. data/spec/fixtures/product_spec_files/gwe.murano.spec.yaml +0 -16
  107. data/spec/fixtures/product_spec_files/lightbulb-no-state.yaml +0 -11
  108. data/spec/fixtures/product_spec_files/lightbulb.yaml +0 -21
  109. data/spec/fixtures/roles-three.yaml +0 -11
  110. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value 0.webmock +0 -98
  111. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value 1.webmock +0 -98
  112. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value No.webmock +0 -98
  113. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value Yes.webmock +0 -98
  114. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value bob.webmock +0 -72
  115. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value false.webmock +0 -98
  116. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value off.webmock +0 -98
  117. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value on STDIN.webmock +0 -98
  118. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value on.webmock +0 -98
  119. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a bool value true.webmock +0 -98
  120. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a json array blob with STDIN.webmock +0 -98
  121. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) a json array blob.webmock +0 -98
  122. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) an array.webmock +0 -98
  123. data/spec/fixtures/snapshots/murano application setting Writes (using Webservice.cors) appends an array.webmock +0 -98
  124. data/spec/fixtures/snapshots/murano application setting reads Webservice.cors to a file.webmock +0 -72
  125. data/spec/fixtures/snapshots/murano application setting reads Webservice.cors.webmock +0 -72
  126. data/spec/fixtures/snapshots/murano business list as json.webmock +0 -27
  127. data/spec/fixtures/snapshots/murano business list as table.webmock +0 -27
  128. data/spec/fixtures/snapshots/murano business list fewer fields.webmock +0 -27
  129. data/spec/fixtures/snapshots/murano business list only ids.webmock +0 -27
  130. data/spec/fixtures/snapshots/murano business list output to file.webmock +0 -27
  131. data/spec/fixtures/snapshots/murano business without project help.webmock +0 -9
  132. data/spec/fixtures/snapshots/murano config Needs a key.webmock +0 -9
  133. data/spec/fixtures/snapshots/murano config Reads a key.webmock +0 -9
  134. data/spec/fixtures/snapshots/murano config Removes a key.webmock +0 -9
  135. data/spec/fixtures/snapshots/murano config Sets a key.webmock +0 -9
  136. data/spec/fixtures/snapshots/murano config Sets a user key.webmock +0 -9
  137. data/spec/fixtures/snapshots/murano content life cycle.webmock +0 -144
  138. data/spec/fixtures/snapshots/murano cors sets CORS.webmock +0 -78
  139. data/spec/fixtures/snapshots/murano cors show CORS.webmock +0 -64
  140. data/spec/fixtures/snapshots/murano device activates.webmock +0 -86
  141. data/spec/fixtures/snapshots/murano device enables a batch.webmock +0 -76
  142. data/spec/fixtures/snapshots/murano device enables and lists.webmock +0 -78
  143. data/spec/fixtures/snapshots/murano device writes and reads.webmock +0 -136
  144. data/spec/fixtures/snapshots/murano domain show domain.webmock +0 -101
  145. data/spec/fixtures/snapshots/murano element edit unknown as unknown element.webmock +0 -43
  146. data/spec/fixtures/snapshots/murano element show --help.webmock +0 -9
  147. data/spec/fixtures/snapshots/murano element show as csv.webmock +0 -43
  148. data/spec/fixtures/snapshots/murano element show as default-table.webmock +0 -43
  149. data/spec/fixtures/snapshots/murano element show as json.webmock +0 -43
  150. data/spec/fixtures/snapshots/murano element show as table truncate.webmock +0 -43
  151. data/spec/fixtures/snapshots/murano element show as table wrap.webmock +0 -43
  152. data/spec/fixtures/snapshots/murano element show as yaml.webmock +0 -43
  153. data/spec/fixtures/snapshots/murano element show using ambiguous name.webmock +0 -43
  154. data/spec/fixtures/snapshots/murano element without project usage.webmock +0 -9
  155. data/spec/fixtures/snapshots/murano exchange with project list as json.webmock +0 -59
  156. data/spec/fixtures/snapshots/murano exchange with project list as table.webmock +0 -59
  157. data/spec/fixtures/snapshots/murano exchange with project list fewer fields.webmock +0 -59
  158. data/spec/fixtures/snapshots/murano exchange with project list only ids.webmock +0 -59
  159. data/spec/fixtures/snapshots/murano exchange with project list output to file.webmock +0 -59
  160. data/spec/fixtures/snapshots/murano exchange with project list purchase is already added ID.webmock +0 -83
  161. data/spec/fixtures/snapshots/murano exchange with project list purchase is ambiguous name.webmock +0 -59
  162. data/spec/fixtures/snapshots/murano exchange without project help.webmock +0 -9
  163. data/spec/fixtures/snapshots/murano help using commander as --help.webmock +0 -9
  164. data/spec/fixtures/snapshots/murano help using commander no args.webmock +0 -9
  165. data/spec/fixtures/snapshots/murano help using subshell no args.webmock +0 -9
  166. data/spec/fixtures/snapshots/murano help using subshell with --help.webmock +0 -9
  167. data/spec/fixtures/snapshots/murano init Won't init in HOME (gracefully).webmock +0 -9
  168. data/spec/fixtures/snapshots/murano init in empty directory with existing project.webmock +0 -201
  169. data/spec/fixtures/snapshots/murano init in empty directory without existing project.webmock +0 -193
  170. data/spec/fixtures/snapshots/murano init in existing project directory with ProjectFile.webmock +0 -213
  171. data/spec/fixtures/snapshots/murano init in existing project directory with SolutionFile 0.2.0.webmock +0 -213
  172. data/spec/fixtures/snapshots/murano init in existing project directory with SolutionFile 0.3.0.webmock +0 -213
  173. data/spec/fixtures/snapshots/murano init in existing project directory without ProjectFile.webmock +0 -213
  174. data/spec/fixtures/snapshots/murano keystore can call other commands.webmock +0 -108
  175. data/spec/fixtures/snapshots/murano keystore clearAll.webmock +0 -124
  176. data/spec/fixtures/snapshots/murano keystore deletes.webmock +0 -112
  177. data/spec/fixtures/snapshots/murano keystore gets.webmock +0 -96
  178. data/spec/fixtures/snapshots/murano keystore infos.webmock +0 -96
  179. data/spec/fixtures/snapshots/murano keystore lists.webmock +0 -96
  180. data/spec/fixtures/snapshots/murano link with project links and lists.webmock +0 -149
  181. data/spec/fixtures/snapshots/murano link with project unlinks.webmock +0 -165
  182. data/spec/fixtures/snapshots/murano link without project help.webmock +0 -9
  183. data/spec/fixtures/snapshots/murano link without project subshell vs inline using commander will not list.webmock +0 -27
  184. data/spec/fixtures/snapshots/murano link without project subshell vs inline using subshell will not list.webmock +0 -27
  185. data/spec/fixtures/snapshots/murano logs when project is setup tail log.webmock +0 -9
  186. data/spec/fixtures/snapshots/murano password Lists when no file.webmock +0 -9
  187. data/spec/fixtures/snapshots/murano password deletes a password.webmock +0 -9
  188. data/spec/fixtures/snapshots/murano password sets a password.webmock +0 -9
  189. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a forced string value on STDIN.webmock +0 -90
  190. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a forced string value.webmock +0 -90
  191. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a number value fiftyHalf.webmock +0 -64
  192. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a number value float 12.67.webmock +0 -90
  193. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a number value integer 12.webmock +0 -90
  194. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a number value on STDIN.webmock +0 -90
  195. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) a string value.webmock +0 -90
  196. data/spec/fixtures/snapshots/murano product setting Writes (using Device2.identity_format) merges into a dictionary.webmock +0 -90
  197. data/spec/fixtures/snapshots/murano single sync without ProjectFile syncdown.webmock +0 -322
  198. data/spec/fixtures/snapshots/murano status with ProjectFile status.webmock +0 -153
  199. data/spec/fixtures/snapshots/murano status with Solutionfile 0.2.0 status.webmock +0 -153
  200. data/spec/fixtures/snapshots/murano status with Solutionfile 0.3.0 status.webmock +0 -153
  201. data/spec/fixtures/snapshots/murano status without ProjectFile matches file path.webmock +0 -153
  202. data/spec/fixtures/snapshots/murano status without ProjectFile matches route.webmock +0 -153
  203. data/spec/fixtures/snapshots/murano status without ProjectFile status.webmock +0 -153
  204. data/spec/fixtures/snapshots/murano syncdown stubbed without ProjectFile syncdown.webmock +0 -151
  205. data/spec/fixtures/snapshots/murano syncdown without ProjectFile syncdown.webmock +0 -479
  206. data/spec/fixtures/snapshots/murano syncup without ProjectFile syncup.webmock +0 -357
  207. data/spec/fixtures/snapshots/murano token with project list as table.webmock +0 -9
  208. data/spec/fixtures/snapshots/murano token without project help.webmock +0 -9
  209. data/spec/fixtures/snapshots/murano usage show usage.webmock +0 -93
  210. data/spec/fixtures/syncable_conflict/services/devdata.lua +0 -18
  211. data/spec/fixtures/syncable_conflict/services/timers.lua +0 -4
  212. data/spec/fixtures/syncable_content/assets/icon.png +0 -0
  213. data/spec/fixtures/syncable_content/assets/index.html +0 -0
  214. data/spec/fixtures/syncable_content/assets/js/script.js +0 -0
  215. data/spec/fixtures/syncable_content/modules/table_util.lua +0 -58
  216. data/spec/fixtures/syncable_content/routes/manyRoutes.lua +0 -11
  217. data/spec/fixtures/syncable_content/routes/singleRoute.lua +0 -5
  218. data/spec/fixtures/websocket/README.rst +0 -110
  219. data/spec/fixtures/websocket/logs_blather.rb +0 -27
  220. data/spec/fixtures/websocket/logs_faker.rb +0 -153
  221. data/spec/fixtures/websocket/simple_connection.rb +0 -45
  222. data/spec/fixtures/websocket/simple_options.rb +0 -77
  223. data/spec/fixtures/websocket/simple_server.rb +0 -69
  224. data/spec/fixtures/websocket/wss-echo.rb +0 -48
  225. data/spec/fixtures/websocket/wss-fake-logs.rb +0 -20
  226. data/spec/spec_helper.rb +0 -131
  227. data/spec/variegated_TruthyFalsey_spec.rb +0 -29
  228. data/spec/webmock_snapshot.rb +0 -296
data/dockers/RELEASE.rst DELETED
@@ -1,135 +0,0 @@
1
- ###################################
2
- MURANO CLI GEM RELEASE INSTRUCTIONS
3
- ###################################
4
-
5
- (lb): It'd be nice to script this. But for now, copy-paste!
6
-
7
- ###########################
8
- One-time Setup Instructions
9
- ###########################
10
-
11
- Sign Up for RubyGems Account
12
- ----------------------------
13
-
14
- - Sign up for account and request access to Murano CLI gem.
15
-
16
- https://rubygems.org/
17
-
18
- - Murano CLI RubyGems.org Repo
19
-
20
- https://rubygems.org/gems/MuranoCLI
21
-
22
- Checkout Murano CLI locally
23
- ---------------------------
24
-
25
- E.g., this is how (lb) does it::
26
-
27
- MURCLI_BASE=/exo/clients/exosite/MuranoCLIs
28
- mkdir -p ${MURCLI_BASE}
29
- cd ${MURCLI_BASE}
30
- git clone git@github.com:exosite/MuranoCLI.git exosite+MuranoCLI
31
-
32
- ###################################
33
- Copy-paste Gem Release Instructions
34
- ###################################
35
-
36
- Set that latest version
37
- -----------------------
38
-
39
- Set the release version, e.g.,::
40
-
41
- MURCLI_VER="3.2.0.beta.8"
42
- MURCLI_REL="v${MURCLI_VER}"
43
-
44
- Choose a release: pre or official
45
- ---------------------------------
46
-
47
- Official Gem Release::
48
-
49
- MURCLI_REF="master"
50
-
51
- Beta/Pre-release Gem Release::
52
-
53
- MURCLI_REF="develop"
54
-
55
- Trigger the Gem release build
56
- -----------------------------
57
-
58
- Set the variables above, and then tag the appropriate branch::
59
-
60
- cd ${MURCLI_BASE}/exosite+MuranoCLI
61
- git checkout ${MURCLI_REF}
62
- git pull --ff-only
63
-
64
- git tag -a "${MURCLI_REL}" -m "Release tag: ${MURCLI_REL}" ${MURCLI_REF}
65
- git push origin "${MURCLI_REL}"
66
-
67
- Wait for the build to start
68
- ---------------------------
69
-
70
- The Jenkins build server is on a five minute poll. You can either
71
- start the build yourself, or you can wait for it to start.
72
-
73
- - Jenkins server URL
74
-
75
- https://jenkins.exosite.com/job/MuranoCLI/job/Murano%20CLI%20Gem%20Release/
76
-
77
- Download the built Gem and publish it
78
- -------------------------------------
79
-
80
- Create a GitHub token and store in an environ::
81
-
82
- GITHUB_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
83
-
84
- Download the built Gem from GitHub::
85
-
86
- mkdir -p /tmp/gem_push
87
- pushd /tmp/gem_push
88
-
89
- OWNER="exosite"
90
- REPO="MuranoCLI"
91
- #
92
- curl --header "Authorization: token ${GITHUB_TOKEN}" \
93
- --header "Accept: application/json" \
94
- --remote-name \
95
- --location https://api.github.com/repos/${OWNER}/${REPO}/releases
96
- cat releases
97
- #
98
- curl --header "Authorization: token ${GITHUB_TOKEN}" \
99
- --header "Accept: application/json" \
100
- --remote-name \
101
- --location \
102
- https://api.github.com/repos/${OWNER}/${REPO}/releases/tags/v${MURCLI_VER}
103
- cat v${MURCLI_VER}
104
- #
105
- ASSET_ID=$(cat v${MURCLI_VER} | jq '.assets[0].id')
106
- echo ${ASSET_ID}
107
- #
108
- wget \
109
- -q \
110
- --auth-no-challenge \
111
- --header='Accept:application/octet-stream' \
112
- https://${GITHUB_TOKEN}:@api.github.com/repos/${OWNER}/${REPO}/releases/assets/${ASSET_ID} \
113
- -O MuranoCLI-${MURCLI_VER}.gem
114
- ls -la MuranoCLI-${MURCLI_VER}.gem
115
-
116
- Publish the gem::
117
-
118
- gem push MuranoCLI-${MURCLI_VER}.gem
119
- popd
120
- rm /tmp/gem_push/MuranoCLI-${MURCLI_VER}.gem
121
- rm /tmp/gem_push/v${MURCLI_VER}
122
- rm /tmp/gem_push/releases
123
- rmdir /tmp/gem_push
124
-
125
- Test!::
126
-
127
- gem uninstall MuranoCLI
128
- murano -v
129
-
130
- gem install MuranoCLI
131
- murano -v
132
-
133
- gem install MuranoCLI --pre
134
- murano -v
135
-
@@ -1,163 +0,0 @@
1
- #!/bin/bash
2
-
3
- # This script is called by the Jenkins Build step Execute Shell command,
4
- # via `docker exec`.
5
- #
6
- # This script is run in a Docker container as user 'jenkins'. If Dockerfile
7
- # did not set up the user first, you'd permissions issues, and you'd see
8
- # weird behavior, such as:
9
- #
10
- # $ whoami
11
- # sudo: unknown uid 1001: who are you?
12
- # $ sudo whoami
13
- # whoami: cannot find name for user ID 1001
14
- # whoami:
15
- # $ echo ${USER}
16
- # jenkins
17
- # $ users
18
- # $ groups
19
- # cannot find name for group ID 1001
20
- # 1001
21
- #
22
- # To work around this, the Dockerfile calls `useradd ... jenkins`,
23
- # and the Jenkins Build Environment "User group" is set to 'root'.
24
- # (This
25
-
26
- # Jenkins runs the Build step Execute Shell command from the
27
- # ${WORKSPACE} directory, e.g.,
28
- #
29
- # /tmp/jenkins-ff750fb5/workspace/MuranoCLI/MrMurano Tests
30
- #
31
- # which is actually outside the Docker container (on the host).
32
- #
33
- # We use the advanced Docker option, Volumes, to wire our container to
34
- # the host. Specifically, Dockerfile wires /app/report and /app/coverage
35
- # to ${WORKSPACE}/report and ${WORKSPACE}/coverage, respectively.
36
-
37
- # The Dockerfile uses ENV to change the encoding from ASCII, which
38
- # we cannot do from within the container. You should see UTF-8.
39
- #
40
- # $ echo ${LANG}
41
- # en_US.UTF-8
42
-
43
- # Jenkins sets a few environs, like ${WORKSPACE}, and we pull in a few
44
- # more from the Jenkins Environment Injector Plugin.
45
-
46
- must_verify_environs () {
47
- [[ -z ${WORKSPACE} ]] && echo "ERROR: Expected WORKSPACE to be set" && exit 1
48
- [[ -z ${MURANO_USERNAME} ]] && echo "ERROR: Please set MURANO_USERNAME" && exit 1
49
- [[ -z ${MURANO_PASSWORD} ]] && echo "ERROR: Please set MURANO_PASSWORD" && exit 1
50
- [[ -z ${MURANO_BUSINESS} ]] && echo "ERROR: Please set MURANO_BUSINESS" && exit 1
51
-
52
- # TEST_ME: (lb): I bet WORKSPACE is set to /app on Docker.
53
- if [[ -d /app && "${WORKSPACE}" != "/app" ]]; then
54
- echo "WARNING: WORKSPACE not /app?: ${WORKSPACE}"
55
- fi
56
- }
57
-
58
- # Create a basic Murano CLI config indicating the Murano account credentials.
59
-
60
- # Default to host "bizapi-staging.hosted.exosite.io".
61
- export MURANO_BIZAPIIO=${MURANO_BIZAPIIO:-bizapi-staging.hosted.exosite.io}
62
-
63
- export MURANO_CONFIGFILE="${MURANO_CONFIGFILE:-${WORKSPACE}/test.run.muranocfg}"
64
-
65
- create_basic_config () {
66
- cat > "${MURANO_CONFIGFILE}" <<-EOCFB
67
- [user]
68
- name = ${MURANO_USERNAME}
69
- [business]
70
- id = ${MURANO_BUSINESS}
71
- [net]
72
- host = ${MURANO_BIZAPIIO}
73
- EOCFB
74
- }
75
-
76
- remove_basic_config () {
77
- rm "${MURANO_CONFIGFILE}"
78
- }
79
-
80
- # Switch to the project directory and run tests.
81
-
82
- prepare_to_test () {
83
- cd ${WORKSPACE}
84
-
85
- # Instead of `rake test_clean_up -t`, call CLI directly with --no-color.
86
-
87
- echo "Removing existing solutions from Murano account."
88
-
89
- # We're not installing Murano CLI using gem, so we have to tell ruby
90
- # where the library is.
91
- export murano="ruby -I${WORKSPACE}/lib ${WORKSPACE}/bin/murano"
92
-
93
- ${murano} solutions expunge -y --no-progress --no-color --ascii
94
-
95
- # Fix the PATH to avoid the error (on new Jenkins, dockerized test server):
96
- #
97
- # /tmp/jenkins8459777890102160498.sh: line 81: rspec: command not found
98
- PATH=${PATH}:/usr/local/bundle/bin
99
-
100
- # (lb): Sometimes the host drive directories mount as root:root with 2755
101
- # permissions. But sometimes not. If it starts happening again, you'll see
102
- # Errno::EACCES: Permission denied. Uncomment the sudoers code in Dockerfile.
103
- if [[ -d /app ]]; then
104
- sudo chmod 2777 /app/report
105
- sudo chmod 2777 /app/coverage
106
- else
107
- mkdir ${WORKSPACE}/report
108
- mkdir ${WORKSPACE}/coverage
109
- fi
110
- }
111
-
112
- execute_tests () {
113
- cd ${WORKSPACE}
114
-
115
- echo "############################################################################################"
116
- echo "Testing \"$(${murano} -v)\" on \"$(ruby -v)\""
117
- echo "############################################################################################"
118
-
119
- # Hint: Add `--example "<...>"` to limit the test suite.
120
-
121
- set +e
122
-
123
- local rspec_rsp
124
-
125
- rspec \
126
- --format html \
127
- --out ${WORKSPACE}/report/index-${RVERS}.html \
128
- --format documentation \
129
- "${@}"
130
-
131
- rspec_rsp=$?
132
-
133
- local retries=3
134
-
135
- # BizAPI oftentimes timesout on a few tests, so try again.
136
- while [[ ${rspec_rsp} -ne 0 && ${retries} -gt 0 ]]; do
137
- echo -e "\n\nRetrying! ${retries} remain!!\n\n"
138
-
139
- rspec \
140
- --format html \
141
- --out ${WORKSPACE}/report/index-${RVERS}.html \
142
- --format documentation \
143
- --only-failures \
144
- "${@}"
145
-
146
- rspec_rsp=$?
147
- retries=$((${retries} - 1))
148
- done
149
-
150
- #exit ${rspec_rsp}
151
- echo -e "Thanks for flying the Murano CLIs!\n"
152
- }
153
-
154
- main () {
155
- must_verify_environs
156
- create_basic_config
157
- prepare_to_test
158
- execute_tests "${@}"
159
- remove_basic_config
160
- }
161
-
162
- main "${@}"
163
-
@@ -1,4 +0,0 @@
1
- #!/bin/bash
2
- ruby -v
3
- rake build push:github:gem push:github:copyReleaseNotes
4
-
@@ -1,436 +0,0 @@
1
- #######################
2
- Basic MuranoCLI Example
3
- #######################
4
-
5
- Learn Murano the Easy Way
6
- =========================
7
-
8
- This document illustrates how to setup a very basic Murano project.
9
-
10
- It shows how to use the Murano CLI tool (also called "MuranoCLI", or
11
- just "MurCLI") to create an Application and Product, and how to send
12
- data to the Product that gets processed by the Application.
13
-
14
- Prerequisites
15
- =============
16
-
17
- It is assumed that you have already created a Murano business account,
18
- and that you have installed MurCLI on your local machine.
19
-
20
- - To sign up for a free Murano business account, visit:
21
-
22
- https://exosite.com/signup/
23
-
24
- - To install MurCLI, run:
25
-
26
- ``gem install MuranoCLI``
27
-
28
- If you need installation help, look at the `README
29
- <https://github.com/exosite/MuranoCLI#install>`__.
30
-
31
- Start Fresh
32
- ===========
33
-
34
- You can skip this section if you've never setup a business before.
35
-
36
- But if you've already created a business, and if you've already
37
- created an Application and/or Product for it, you can clean up
38
- that business so we can start over.
39
-
40
- First, list your businesses and find the one you want to reset. E.g.,
41
-
42
- .. code-block:: text
43
-
44
- $ murano business list
45
-
46
- +------------------+-------+-------------------+
47
- | bizid | role | name |
48
- +------------------+-------+-------------------+
49
- | 4o54fc55olth85mi | owner | My First Business |
50
- | fu5rse4xdww2ke29 | admin | Collaborative Biz |
51
- | ct7rmoz3hu34ygb9 | owner | Another of My Biz |
52
- +------------------+-------+-------------------+
53
-
54
- NOTE: If you have never used MurCLI before, or if you've logged out
55
- of Murano, MurCLI will tell you to logon first. E.g.,
56
-
57
- .. code-block:: text
58
-
59
- $ murano business list
60
-
61
- No Murano user account found.
62
- Please login using `murano login` or `murano init`.
63
- Or set your password with `murano password set <username>`.
64
-
65
- Next, remove all solutions (Applications and Products) from that project.
66
-
67
- .. code-block:: text
68
-
69
- $ murano solutions expunge -y -c business.id=ct7rmoz3hu34ygb9
70
-
71
- Deleted 2 solutions
72
-
73
- Logout of Murano. This removes your username and password so
74
- that MurCLI will ask you to reenter your username and password.
75
-
76
- .. code-block:: text
77
-
78
- $ murano logout
79
-
80
- You might also have environment variables set. Clear those for
81
- the sake of this walk-through.
82
-
83
- .. code-block:: text
84
-
85
- $ export MURANO_CONFIGFILE=
86
- $ export MURANO_PASSWORD=
87
-
88
- Create a New Project
89
- ====================
90
-
91
- Create a new directory for your project.
92
-
93
- .. code-block:: text
94
-
95
- $ mkdir ~/murano/projects/basic_test
96
-
97
- $ cd ~/murano/projects/basic_test
98
-
99
- You can run MurCLI commands now, but they won't be useful until you ``init``. E.g.,
100
-
101
- .. code-block:: text
102
-
103
- $ murano show
104
-
105
- No Murano user account found.
106
- Please login using `murano login` or `murano init`.
107
- Or set your password with `murano password set <username>`.
108
-
109
- Run the init command to easily wire the new project to your existing business,
110
- to create an Application and Product, and to setup local directories and files.
111
-
112
- The init command will link the Product to the Application so that data sent
113
- to the Product is passed along to the Application.
114
-
115
- Here's an example use of the init command.
116
-
117
- .. code-block:: text
118
-
119
- $ murano init
120
-
121
- Creating project at /user/home/murano/projects/basic_test
122
-
123
- No Murano user account found. Please login.
124
- User name: exositement@exosite.com
125
- Password: *************
126
- 1. My First Business 2. Collaborative Biz 3. Another of My Biz
127
- Please select the Business to use:
128
- 3
129
-
130
- This business does not have any applications. Let's create one
131
-
132
- Please enter the Application name: basicexample
133
-
134
- Created new Application: basicexample <v3sl941hifticggc0>
135
-
136
- This business does not have any products. Let's create one
137
-
138
- Please enter the Product name: exampleprod
139
-
140
- Created new Product: exampleprod <n51cq3fea5zc40cs4>
141
-
142
- Linked ‘exampleprod’ to ‘basicexample’
143
-
144
- Created default event handler
145
-
146
- Writing Project file to basictest.murano
147
-
148
- Created default directories
149
-
150
- Synced 4 items
151
-
152
- Success!
153
-
154
- Business ID: ct7rmoz3hu34ygb9
155
- Application ID: v3sl941hifticggc0
156
- Product ID: n51cq3fea5zc40cs4
157
-
158
- You'll notice that ``init`` downloaded a few files from Murano that are
159
- automatically created when you create solutions and link them.
160
-
161
- For instance, you should see a handful of Lua scripts in the ``services``
162
- directory.
163
-
164
- .. code-block:: text
165
-
166
- $ ls services
167
-
168
- n51cq3fea5zc40cs4_event.lua timer_timer.lua tsdb_exportJob.lua user_account.lua
169
-
170
- Update the Data Event Handler
171
- =============================
172
-
173
- Let's edit the Product data event handler so that it spits out a log message
174
- when it gets data from the Product. The event handler is named using the
175
- Product ID, so grab that, and use the ID to make the name of the Lua script.
176
-
177
- .. code-block:: text
178
-
179
- $ PRODUCT_ID=$(murano config product.id)
180
-
181
- $ PROD_EVENT="services/${PRODUCT_ID}_event.lua"
182
-
183
- $ echo ${PROD_EVENT}
184
-
185
- services/n51cq3fea5zc40cs4_event.lua
186
-
187
- You'll notice that Murano already created a simple event handler.
188
-
189
- .. code-block:: text
190
-
191
- $ cat ${PROD_EVENT}
192
-
193
- --#EVENT n51cq3fea5zc40cs4 event
194
- print(event)
195
-
196
- Now, overwrite the event handler with something similar. We just
197
- want to show how easy it is to update the event handler.
198
-
199
- .. code-block:: text
200
-
201
- $ cat > ${PROD_EVENT} << EOF
202
- --#EVENT ${PRODUCT_ID} event
203
- print("EVENT: " .. to_json(event))
204
- EOF
205
-
206
- NOTE: The ``--#EVENT`` header is mandatory. It tells Murano
207
- how to interpret the snippet of Lua code.
208
-
209
- If you run the ``status`` command, you should see that there's now one
210
- file modified locally (the event handler that we just edited) that is
211
- not synced with the corresponding event handler on Murano.
212
-
213
- .. code-block:: text
214
-
215
- $ murano status
216
-
217
- Nothing new locally
218
- Nothing new remotely
219
- Items that differ:
220
- M E services/n51cq3fea5zc40cs4_event.lua
221
-
222
- Run the ``syncup`` command to upload any modified files to Murano,
223
- overwriting what is on Murano.
224
-
225
- .. code-block:: text
226
-
227
- $ murano syncup
228
-
229
- Create and Provision a New Device
230
- =================================
231
-
232
- In order to do something useful, we need to create a device,
233
- that is attached to the Product, that can generate data.
234
-
235
- You'll notice that the new Product does not have any devices.
236
-
237
- .. code-block:: text
238
-
239
- $ murano device list
240
-
241
- Did not find any devices
242
-
243
- Create a device. We can use whatever identifier we want, so
244
- just grab a random UUID.
245
-
246
- .. code-block:: text
247
-
248
- $ SOME_ID=$(uuidgen)
249
-
250
- $ murano device enable ${SOME_ID} --expire 1
251
-
252
- $ murano device list
253
-
254
- +--------------------------------------+-------------+--------+
255
- | Identifier | Status | Online |
256
- +--------------------------------------+-------------+--------+
257
- | 1af384dd-57ba-4f13-9d89-45dbcbf207de | whitelisted | false |
258
- +--------------------------------------+-------------+--------+
259
-
260
- Provision the device. Murano generates and returns a CIK
261
- that we need to remember so that we can authenticate as
262
- the device when making calls on its behalf.
263
-
264
- .. code-block:: text
265
-
266
- $ CIK=$(murano product device activate ${SOME_ID})
267
-
268
- $ echo ${CIK}
269
-
270
- MJzNuMqPDs7UADLriMlHK10dClv7cx46uLSkJLSw
271
-
272
- $ murano device list
273
-
274
- +--------------------------------------+-------------+--------+
275
- | Identifier | Status | Online |
276
- +--------------------------------------+-------------+--------+
277
- | 1af384dd-57ba-4f13-9d89-45dbcbf207de | provisioned | false |
278
- +--------------------------------------+-------------+--------+
279
-
280
- Generate Device Data
281
- ====================
282
-
283
- Each solution (Application or Product) has its own URI.
284
- We need the Product's URI in order to interact with Murano
285
- on behalf of the device.
286
-
287
- Make a local variable for the Product URI.
288
-
289
- .. code-block:: text
290
-
291
- $ PRODUCT_URI=$(murano domain product --brief --no-progress)
292
-
293
- NOTE: We need to use the ``--no-progress`` option, otherwise MurCLI
294
- will display a progress bar that contaminates the captured output.
295
-
296
- Write data to the device. E.g., let's write a very cold temperature value.
297
-
298
- .. code-block:: text
299
-
300
- $ curl -si -k https://${PRODUCT_URI}/onep:v1/stack/alias \
301
- -H "X-Exosite-CIK: ${CIK}" \
302
- -H "Accept: application/x-www-form-urlencoded; charset=utf-8" \
303
- -d reports='{"temperature": -40.0}' \
304
- -i -v -w "%{http_code}"
305
-
306
- [VERBOSE OUTPUT OMITTED]
307
- 204
308
-
309
- Verify that the data was passed from the Product to the Application and
310
- processed how we indicated in the event handler (which is to log it).
311
-
312
- .. code-block:: text
313
-
314
- $ murano logs --application
315
-
316
- DEBUG [n51cq3fea5zc40cs4_event] 2017-07-26T11:44:57.000-05:00:
317
- EVENT: {
318
- "connection_id":"D2bzFD6HSV3ih56dbswY",
319
- "identity":"1af384dd-57ba-4f13-9d89-45dbcbf207de",
320
- "ip":"123.234.012.234",
321
- "protocol":"onep",
322
- "timestamp":1.501087497424287e+15,
323
- "type":"provisioned"
324
- }
325
-
326
- DEBUG [n51cq3fea5zc40cs4_event] 2017-07-26T14:09:30.000-05:00:
327
- EVENT: {
328
- "connection_id":"QWJeZcpXej5h5f5hwdLY",
329
- "identity":"1af384dd-57ba-4f13-9d89-45dbcbf207de",
330
- "ip":"123.234.012.234",
331
- "payload":[{
332
- "timestamp":1.501096170486053e+15,
333
- "values":{
334
- "reports":"{\"temperature\": -40.0}"}
335
- }],
336
- "protocol":"onep",
337
- "timestamp":1.501096170487898e+15,
338
- "type":"data_in"
339
- }
340
-
341
- Success! You should see the ``temperature`` value in the last log message.
342
-
343
- You'll notice that the Product does not generate any log messages.
344
-
345
- .. code-block:: text
346
-
347
- $ murano logs --product
348
-
349
- # [NO OUTPUT]
350
-
351
- Create a Resource
352
- =================
353
-
354
- Bonus step! Create a resource for your data.
355
-
356
- NOTE: The write operation works regardless of having a resource defined.
357
-
358
- Create a resources file that describes the data. E.g.,
359
-
360
- .. code-block:: text
361
-
362
- $ cat > specs/resources.yaml << EOF
363
- ---
364
- temperature:
365
- allowed: []
366
- format: number
367
- settable: false
368
- unit: ''
369
- EOF
370
-
371
- Upload the resources to Murano.
372
-
373
- .. code-block:: text
374
-
375
- $ murano syncup
376
-
377
- And write more data.
378
-
379
- .. code-block:: text
380
-
381
- $ curl -si -k https://${PRODUCT_URI}/onep:v1/stack/alias \
382
- -H "X-Exosite-CIK: ${CIK}" \
383
- -H "Accept: application/x-www-form-urlencoded; charset=utf-8" \
384
- -d raw_data='{"temperature": -19.9}' \
385
- -i -v -w "%{http_code}"
386
-
387
- Verify that you see a new event in the log.
388
-
389
- .. code-block:: text
390
-
391
- $ murano logs --application
392
-
393
- DEBUG [n51cq3fea5zc40cs4_event] 2017-07-26T11:44:57.000-05:00:
394
- EVENT: {
395
- "connection_id":"D2bzFD6HSV3ih56dbswY",
396
- "identity":"1af384dd-57ba-4f13-9d89-45dbcbf207de",
397
- "ip":"123.234.012.234",
398
- "protocol":"onep",
399
- "timestamp":1.501087497424287e+15,
400
- "type":"provisioned"
401
- }
402
-
403
- DEBUG [n51cq3fea5zc40cs4_event] 2017-07-26T14:09:30.000-05:00:
404
- EVENT: {
405
- "connection_id":"QWJeZcpXej5h5f5hwdLY",
406
- "identity":"1af384dd-57ba-4f13-9d89-45dbcbf207de",
407
- "ip":"123.234.012.234",
408
- "payload":[{
409
- "timestamp":1.501096170486053e+15,
410
- "values":{
411
- "reports":"{\"temperature\": -40.0}"}
412
- }],
413
- "protocol":"onep",
414
- "timestamp":1.501096170487898e+15,
415
- "type":"data_in"
416
- }
417
-
418
- DEBUG [n51cq3fea5zc40cs4_event] 2017-07-26T14:16:00.000-05:00:
419
- EVENT: {
420
- "connection_id":"3DD9rAZ95bgro5O0kGGD",
421
- "identity":"1af384dd-57ba-4f13-9d89-45dbcbf207de",
422
- "ip":"123.234.012.234",
423
- "payload":[{
424
- "timestamp":1.501096560116624e+15,
425
- "values":{
426
- "raw_data":"{\"temperature\": -19.9}"}
427
- }],
428
- "protocol":"onep",
429
- "timestamp":1.501096560118335e+15,
430
- "type":"data_in"
431
- }
432
-
433
- *Et Voilà!*
434
-
435
- Congratulations of your first, very basic Murano project!
436
-