You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<h2id="release-creation-process" class="section-heading"><ahref="#release-creation-process" class="hover-link"><iclass="ri-link-m" aria-hidden="true"></i></a><spanclass="text">Release creation process</span></h2><p>To create a Release in Edgehog:</p><ol><li>Navigate to the <strong>Applications</strong> section in the Edgehog web interface</li><li>Open the app for which you want to create a release</li><li>Click on <strong>Create Release</strong> action button</li><li>Fill in the release form:<ul><li><strong>Version</strong>: Enter a unique version number that follows the <ahref="https://semver.org">Semantic Versioning</a> spec</li><li><strong>Supported System Models</strong>: Choose system model(s) which the release should support. If left blank, the release supports all devices</li></ul></li><li>Add container(s) by clicking <strong>Add Container</strong> button (see <ahref="applications_management#container-creation">Container creation</a> for more details)</li><li>Click <strong>Create</strong> to create the release</li></ol><p><imgsrc="assets/release_create.png" alt="Creating Release"/></p><h3id="reuse-release-configuration" class="section-heading"><ahref="#reuse-release-configuration" class="hover-link"><iclass="ri-link-m" aria-hidden="true"></i></a><spanclass="text">Reuse Release Configuration</span></h3><p>Edgehog also let's you reuse existing containers and their configurations from the same or some other application.</p><p>To reuse a Release:</p><ol><li>Click on <strong>Reuse Release</strong> button in the Create Release page</li><li>Choose application and release from which you want to copy containers and their configurations</li><li>Click <strong>Confirm</strong> to import release configuration</li></ol><p><imgsrc="assets/release_create_reuse.png" alt="Reusing Release"/></p><h3id="container-creation" class="section-heading"><ahref="#container-creation" class="hover-link"><iclass="ri-link-m" aria-hidden="true"></i></a><spanclass="text">Container creation</span></h3>
Copy file name to clipboardExpand all lines: snapshot/core_concepts-1.html
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -151,9 +151,9 @@ <h1>Core concepts</h1>
151
151
<codeclass="inline">datetime("2022-06-27T16:27:40.254795Z")</code>.</li><li><codeclass="inline">binaryblob("<base64 encoded value>")</code> is used to pass <codeclass="inline">binaryblob</code> values in expressions. The
152
152
string contained in double quotes must be a valid Base64 encoding of the binary value. Example:
153
153
<codeclass="inline">binaryblob("Zm9vYmFy")</code> to encode the string <codeclass="inline">"foobar"</code>.</li></ul><h5>Attribute inclusion filter*</h5><p>*<em>This feature is planned for a future release</em></p><ul><li><codeclass="inline">"<value>" in attributes["<namespace>:<key>"]</code>: returns <codeclass="inline">true</code> if <codeclass="inline">value</code> is included in the
154
-
chosen attribute. Note that the attribute must be an array for the expression to be valid.</li></ul><h4>Examples</h4><p>To provide some examples, here is a Selector to target all out of order Devices in Milan:</p><pre><codeclass="makeup elixir" translate="no"><spanclass="s">"out-of-order"</span><spanclass="w"></span><spanclass="ow">in</span><spanclass="w"></span><spanclass="n">tags</span><spanclass="w"></span><spanclass="ow">and</span><spanclass="w"></span><spanclass="n">attributes</span><spanclass="p" data-group-id="9284378943-1">[</span><spanclass="s">"edgehog-synthetic:city"</span><spanclass="p" data-group-id="9284378943-1">]</span><spanclass="w"></span><spanclass="o">==</span><spanclass="w"></span><spanclass="s">"Milan"</span></code></pre><p>Here is a selector to target all Devices that have their service timestamp in the past so they have
154
+
chosen attribute. Note that the attribute must be an array for the expression to be valid.</li></ul><h4>Examples</h4><p>To provide some examples, here is a Selector to target all out of order Devices in Milan:</p><pre><codeclass="makeup elixir" translate="no"><spanclass="s">"out-of-order"</span><spanclass="w"></span><spanclass="ow">in</span><spanclass="w"></span><spanclass="n">tags</span><spanclass="w"></span><spanclass="ow">and</span><spanclass="w"></span><spanclass="n">attributes</span><spanclass="p" data-group-id="6493844409-1">[</span><spanclass="s">"edgehog-synthetic:city"</span><spanclass="p" data-group-id="6493844409-1">]</span><spanclass="w"></span><spanclass="o">==</span><spanclass="w"></span><spanclass="s">"Milan"</span></code></pre><p>Here is a selector to target all Devices that have their service timestamp in the past so they have
155
155
to be serviced, imagining this information is contained in the <codeclass="inline">com.foo.ServiceInfo</code> Astarte
156
-
interface in the <codeclass="inline">/serviceTimestamp</code>:</p><pre><codeclass="makeup elixir" translate="no"><spanclass="n">attributes</span><spanclass="p" data-group-id="9005043176-1">[</span><spanclass="s">"astarte-values:com.foo.ServiceInfo/serviceTimestamp"</span><spanclass="p" data-group-id="9005043176-1">]</span><spanclass="w"></span><spanclass="o"><=</span><spanclass="w"></span><spanclass="n">now</span><spanclass="p" data-group-id="9005043176-2">(</span><spanclass="p" data-group-id="9005043176-2">)</span></code></pre><h4>Caveats</h4><p>Note that numeric values are conflated in a single numeric type, i.e. a selector with
156
+
interface in the <codeclass="inline">/serviceTimestamp</code>:</p><pre><codeclass="makeup elixir" translate="no"><spanclass="n">attributes</span><spanclass="p" data-group-id="9774763228-1">[</span><spanclass="s">"astarte-values:com.foo.ServiceInfo/serviceTimestamp"</span><spanclass="p" data-group-id="9774763228-1">]</span><spanclass="w"></span><spanclass="o"><=</span><spanclass="w"></span><spanclass="n">now</span><spanclass="p" data-group-id="9774763228-2">(</span><spanclass="p" data-group-id="9774763228-2">)</span></code></pre><h4>Caveats</h4><p>Note that numeric values are conflated in a single numeric type, i.e. a selector with
157
157
<codeclass="inline">attributes["custom:foo"] == 42</code> will match either if <codeclass="inline">foo</code> is <codeclass="inline">integer</code>, <codeclass="inline">longinteger</code> or <codeclass="inline">double</code>
158
158
(e.g it will also match <codeclass="inline">42.0</code>).</p><p>Another important thing to notice is that using an Attribute Filter will implicitly match only
159
159
Devices that have that attribute. As an example, if there are 3 devices, one with attribute <codeclass="inline">foo:bar == 42</code>, the other with attribute <codeclass="inline">foo:bar == 3</code> and the third one with no <codeclass="inline">foo:bar</code> attribute, the
Copy file name to clipboardExpand all lines: snapshot/core_concepts-2.html
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -103,7 +103,7 @@ <h1>Core concepts</h1>
103
103
104
104
105
105
<p>This page illustrates the core concepts of Edgehog's container management system.</p><h2id="images" class="section-heading"><ahref="#images" class="hover-link"><iclass="ri-link-m" aria-hidden="true"></i></a><spanclass="text">Images</span></h2><p>Images in Edgehog are not managed directly by the platform. Instead, Edgehog treats images as external references that are passed to the device’s container runtime (such as Docker or Podman). Edgehog does not store, pull or validate images, it simply records the image reference string provided in a container definition.</p><h3id="image-reference-format" class="section-heading"><ahref="#image-reference-format" class="hover-link"><iclass="ri-link-m" aria-hidden="true"></i></a><spanclass="text">Image Reference Format</span></h3><p>The image reference represents the name of the image to pull.
</span><spanclass="p" data-group-id="4538437684-3">}</span><spanclass="p" data-group-id="4538437684-2">)</span></code></pre><p>Values to be replaced</p><ul><li><codeclass="inline">TENANT-NAME</code>: the name of the new tenant.</li><li><codeclass="inline">TENANT-SLUG</code>: the slug of the tenant, must contain only lowercase letters and hyphens.</li><li><codeclass="inline">TENANT-PUBLIC-KEY</code>: the content of <codeclass="inline">tenant_public.pem</code> created in the <ahref="#creating-a-keypair">previous
</span><spanclass="p" data-group-id="9477549289-3">}</span><spanclass="p" data-group-id="9477549289-2">)</span></code></pre><p>Values to be replaced</p><ul><li><codeclass="inline">TENANT-NAME</code>: the name of the new tenant.</li><li><codeclass="inline">TENANT-SLUG</code>: the slug of the tenant, must contain only lowercase letters and hyphens.</li><li><codeclass="inline">TENANT-PUBLIC-KEY</code>: the content of <codeclass="inline">tenant_public.pem</code> created in the <ahref="#creating-a-keypair">previous
598
598
step</a>. Open a multiline string with <codeclass="inline">"""</code>, press Enter, paste the content of
599
599
the file in the <codeclass="inline">iex</code> shell and then close the multiline string with <codeclass="inline">"""</code> on a new line.</li><li><codeclass="inline">ASTARTE-BASE-API-URL</code>: the base API url of the Astarte instance (e.g.
600
600
<ahref="https://api.astarte.example.com">https://api.astarte.example.com</a>).</li><li><codeclass="inline">ASTARTE-REALM-NAME</code>: the name of the Astarte realm you're using.</li><li><codeclass="inline">ASTARTE-REALM-PRIVATE-KEY</code>: the content of the Astarte realm's private key. Open a multiline string with
0 commit comments