Commit 974ba2d8 authored by threedytech's avatar threedytech
Browse files

release: 3.1.1

parent 14292420
......@@ -143,3 +143,18 @@ Database
For all Database purposes instant3Dhub relies on the use of PostgreSQL.
instant3Dhub deploys a PostgresSQL instance within its containers. The use of external databases is explained `here <./INSTALL_EXT_POSTGRES_GUIDE.rst>`_.
Graphics Processing Unit
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
With GPUs on the service components we can computationally support clients and allow model tracking services.
Currently we only support NVIDIA GPUs.
To install GPU support for k8s we recommend using the `NVIDIA GPU Operator <https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/overview.html>`_.
Following the NVIDIA guide will allow an easy installation of a variety of GPUs.
Please check if the GPU of your choice is in the supported GPUs list.
It is our experience however that other reasonable recent consumer GPUs also work even if not listed.
We support GPUs with compose aswell, however we do not provide a GPU install guide.
......@@ -64,6 +64,14 @@ Create the following ``hosts.yml``:
vars:
ansible_connection: local
SELinux:
if you are required to run SELinux please add the following var with the correct identation to your hosts.yml.
.. code-block:: yaml
pgsql_configure_selinux: true
Invoke the following playbooks:
.. code-block:: bash
......
############################################
instant3Dhub 3.1 Integration
instant3Dhub 3.1.1 Integration
############################################
This is the deployment repository for instant3Dhub. For more information about the product visit `www.threedy.io <https://www.threedy.io>`_.
......
......@@ -9,7 +9,7 @@ volumes:
services:
i3dhub-consul:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-consul:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-consul:936f8a92ac20b38d17e2e24fe3d903c6
environment:
CONSUL_PORT: "8500"
CONSUL_CONTENT_PATH: /consul/ui/
......@@ -25,7 +25,7 @@ services:
restart: unless-stopped
i3dhub-apigw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-apigw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-apigw:936f8a92ac20b38d17e2e24fe3d903c6
ports:
- "${HUB_NODE_PORT}:8080"
env_file:
......@@ -35,7 +35,7 @@ services:
restart: unless-stopped
i3dhub-adminsvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-adminsvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-adminsvc:936f8a92ac20b38d17e2e24fe3d903c6
volumes:
- rabbitmq_volume:/var/lib/rabbitmq
- elastic_volume:/usr/share/elasticsearch/data
......@@ -50,7 +50,7 @@ services:
restart: unless-stopped
i3dhub-keystore:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-keystore:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-keystore:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env.elastic
- .env
......@@ -60,7 +60,7 @@ services:
restart: unless-stopped
i3dhub-authsvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-authsvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-authsvc:936f8a92ac20b38d17e2e24fe3d903c6
volumes:
- cache_volume:/var/cache/instant3Dhub/
env_file:
......@@ -71,7 +71,7 @@ services:
restart: unless-stopped
i3dhub-jaeger-collector:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-jaeger-collector:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-jaeger-collector:936f8a92ac20b38d17e2e24fe3d903c6
environment:
SPAN_STORAGE_TYPE: "elasticsearch"
ENABLE_TRACING: "true"
......@@ -83,7 +83,7 @@ services:
restart: unless-stopped
i3dhub-jaeger-query:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-jaeger-query:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-jaeger-query:936f8a92ac20b38d17e2e24fe3d903c6
environment:
SPAN_STORAGE_TYPE: "elasticsearch"
QUERY_BASE_PATH: /jaeger
......@@ -95,7 +95,7 @@ services:
restart: unless-stopped
i3dhub-rabbitmq:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-rabbitmq:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-rabbitmq:936f8a92ac20b38d17e2e24fe3d903c6
environment:
RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
RABBITMQ_DEFAULT_USER: "guest"
......@@ -118,7 +118,7 @@ services:
restart: unless-stopped
i3dhub-postgres:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-postgres:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-postgres:936f8a92ac20b38d17e2e24fe3d903c6
environment:
POSTGRES_USER: i3dhub
POSTGRES_PASSWORD: 12and3
......@@ -137,7 +137,7 @@ services:
restart: unless-stopped
i3dhub-elastic:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-elastic:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-elastic:936f8a92ac20b38d17e2e24fe3d903c6
environment:
- discovery.type=single-node
healthcheck:
......@@ -150,7 +150,7 @@ services:
restart: unless-stopped
i3dhub-kibana:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-kibana:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-kibana:936f8a92ac20b38d17e2e24fe3d903c6
environment:
SERVER_BASEPATH: /kibana
env_file:
......@@ -160,7 +160,7 @@ services:
restart: unless-stopped
i3dhub-resourcegw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-resourcegw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-resourcegw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env.elastic
- .env
......@@ -171,7 +171,7 @@ services:
restart: unless-stopped
i3dhub-entrygw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-entrygw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-entrygw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env.elastic
- .env
......@@ -184,7 +184,7 @@ services:
restart: unless-stopped
i3dhub-spacesvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-spacesvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-spacesvc:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env.elastic
- .env
......@@ -193,7 +193,7 @@ services:
restart: unless-stopped
i3dhub-transcodergw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-transcodergw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-transcodergw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env.elastic
- .env
......@@ -204,7 +204,7 @@ services:
restart: unless-stopped
i3dhub-transcodersvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-transcodersvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-transcodersvc:936f8a92ac20b38d17e2e24fe3d903c6
volumes:
- cache_volume:/var/cache/instant3Dhub/
env_file:
......@@ -217,7 +217,7 @@ services:
restart: unless-stopped
i3dhub-measurementgw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-measurementgw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-measurementgw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -229,7 +229,7 @@ services:
i3dhub-measurementsvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-measurementsvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-measurementsvc:936f8a92ac20b38d17e2e24fe3d903c6
volumes:
- cache_volume:/var/cache/instant3Dhub/
env_file:
......@@ -242,7 +242,7 @@ services:
restart: unless-stopped
i3dhub-deliverygw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-deliverygw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-deliverygw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -253,7 +253,7 @@ services:
restart: unless-stopped
i3dhub-deliverysvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-deliverysvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-deliverysvc:936f8a92ac20b38d17e2e24fe3d903c6
volumes:
- cache_volume:/var/cache/instant3Dhub/
env_file:
......@@ -265,7 +265,7 @@ services:
restart: unless-stopped
i3dhub-sharedsessionsvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-sharedsessionsvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-sharedsessionsvc:936f8a92ac20b38d17e2e24fe3d903c6
volumes:
- cache_volume:/var/cache/instant3Dhub/
env_file:
......@@ -278,7 +278,7 @@ services:
restart: unless-stopped
i3dhub-sharedsessiongw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-sharedsessiongw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-sharedsessiongw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -289,7 +289,7 @@ services:
restart: unless-stopped
i3dhub-spacestoregw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-spacestoregw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-spacestoregw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -300,7 +300,7 @@ services:
restart: unless-stopped
i3dhub-spacestoresvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-spacestoresvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-spacestoresvc:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -310,7 +310,7 @@ services:
restart: unless-stopped
i3dhub-querygw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-querygw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-querygw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -321,7 +321,7 @@ services:
restart: unless-stopped
i3dhub-querysvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-querysvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-querysvc:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
- .env.elastic
......@@ -331,7 +331,7 @@ services:
restart: unless-stopped
i3dhub-uploadsvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-uploadsvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-uploadsvc:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env
volumes:
......
......@@ -5,7 +5,7 @@ volumes:
services:
i3dhub-visualizationgw:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-visgw:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-visgw:936f8a92ac20b38d17e2e24fe3d903c6
env_file:
- .env.elastic
- .env
......@@ -16,7 +16,7 @@ services:
- i3dhub-elastic
restart: unless-stopped
i3dhub-gpuvissvc:
image: ${IMAGE_REGISTRY_HOST}/i3dhub-gpuvissvc:898d6e5bba0d03cc301ab21c5d3c7b21
image: ${IMAGE_REGISTRY_HOST}/i3dhub-gpuvissvc:936f8a92ac20b38d17e2e24fe3d903c6
runtime: nvidia
deploy:
resources:
......
......@@ -27,12 +27,15 @@ urn-rules:
urlContentType: [ x3d-xml ]
urlTemplate: http://i3dhub-entrygw:8080/repo/shapes/$(1).x3d
{{ range $gateway := .Values.dataGateways }}
{{- range $rule := $gateway }}
- namespace: {{ $rule.namespace }}
specifier: {{ $rule.specifier }}
urlContentType: {{ $rule.urlContentType }}
urlTemplate: {{ $rule.urlTemplate }}
{{- end }}
{{- range $rule := $gateway }}
- namespace: {{ $rule.namespace }}
specifier: {{ $rule.specifier }}
urlContentType: {{ $rule.urlContentType }}
urlTemplate: {{ $rule.urlTemplate }}
{{ if $rule.authUrlTemplate -}}
authUrlTemplate: {{ $rule.authUrlTemplate }}
{{- end -}}
{{- end }}
{{ end }}
service:
......@@ -53,7 +56,7 @@ service:
- name: class
value: '[[ coalesce .Params.class .Params.group ]]'
# rewrite to another field to we only have to do this once and not everywhere it is used
# rewrite to another field so we only have to do this once and not everywhere it is used
# cannot just coalesce because index function will be called and return an error
- name: resolvedUri
value: >
......@@ -63,7 +66,17 @@ service:
[[- (resolve .Params.inputUri).URI -]]
[[- end -]]
# rewrite to another field to we only have to do this once and not everywhere it is used
# extract auth url which will later be saved as part of the parameter set of this
# resource, allowing the auth service to read the result
- name: authUri
value: >
[[- if .Params.inputURI -]]
[[- (index .Params.inputURI 0 | resolve).AuthURI -]]
[[- else -]]
[[- (resolve .Params.inputUri).AuthURI -]]
[[- end -]]
# rewrite to another field so we only have to do this once and not everywhere it is used
# cannot just coalesce because index function will be called and return an error
- name: maskedUri
value: >
......@@ -73,7 +86,7 @@ service:
[[- (resolve .Params.inputUri).URNMasked -]]
[[- end -]]
# rewrite to another field to we only have to do this once and not everywhere it is used
# rewrite to another field so we only have to do this once and not everywhere it is used
# cannot just coalesce because index function will be called and return an error
- name: prio
value: >
......@@ -83,22 +96,32 @@ service:
[[- (resolve .Params.inputUri).Priority -]]
[[- end -]]
# rewrite to another field to we only have to do this once and not everywhere it is used
# cannot just coalesce because index function will be called and return an error
# rewrite to another field so we only have to do this once and not everywhere it is used
# .Params.inputURI is Hub2 API and an array, while .Params.inputUri is Hub3 API and a string
- name: inputContentType
value: >
[[- if .Params.inputContentType -]]
[[- .Params.inputContentType -]]
[[- else -]]
[[- if .Params.acceptedContentTypes -]]
[[- if gt (.Params.acceptedContentTypes | len) 0 -]]
[[- index .Params.acceptedContentTypes 0 -]]
[[- end -]]
[[- else if .Params.inputURI -]]
[[- (index .Params.inputURI 0 | resolve).URI | content_type_from_ext -]]
[[- else if .Params.acceptedContentTypes -]]
[[- if gt (.Params.acceptedContentTypes | len) 0 -]]
[[- index .Params.acceptedContentTypes 0 -]]
[[- end -]]
[[- else if .Params.inputURI -]]
[[- $resolved := index .Params.inputURI 0 | resolve -]]
[[- if gt ($resolved.Types | len) 0 -]]
[[- index $resolved.Types 0 -]]
[[- else -]]
[[- (resolve .Params.inputUri).URI | content_type_from_ext -]]
[[- $resolved.URI | content_type_from_ext -]]
[[- end -]]
[[- else if .Params.inputUri | lower | hasPrefix "urn" -]]
[[- $resolved := resolve .Params.inputUri -]]
[[- if gt ($resolved.Types | len) 0 -]]
[[- index $resolved.Types 0 -]]
[[- else -]]
[[- $resolved.URI | content_type_from_ext -]]
[[- end -]]
[[- else -]]
[[- .Params.inputUri | content_type_from_ext -]]
[[- end -]]
optional: true
default: any
......
......@@ -105,6 +105,7 @@ licenseServer:
# specifier: document-uuid
# urlContentType: [ "openjt" ]
# urlTemplate: https://download.example.com/documents/$(1).jt
# authUrlTemplate: https://auth.example.com/documents/$(1).jt
# Set any authorization header names which must be passed to data backends.
# These will be copied from incoming client requests and used while downloading
......@@ -134,7 +135,7 @@ licenseServer:
###############################################################################
# This is the version name and the tag for the instant3Dhub images
#imageTag: 898d6e5bba0d03cc301ab21c5d3c7b21
#imageTag: 936f8a92ac20b38d17e2e24fe3d903c6
# Override the access credentials to RabbitMQ
#rabbitmq:
......
========================================
webVis API
========================================
.. toctree::
:maxdepth: 2
:titlesonly:
manual/api
manual/enum
manual/event
manual/typ
\ No newline at end of file
# is [![Build Status](https://travis-ci.org/sindresorhus/is.svg?branch=master)](https://travis-ci.org/sindresorhus/is)
> Type check values: `is.string('🦄') //=> true`
<img src="header.gif" width="182" align="right">
## Install
```
$ npm install @sindresorhus/is
```
## Usage
```js
const is = require('@sindresorhus/is');
is('🦄');
//=> 'string'
is(new Map());
//=> 'Map'
is.number(6);
//=> true
```
When using `is` together with TypeScript, [type guards](http://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types) are being used to infer the correct type inside if-else statements.
```ts
import is from '@sindresorhus/is';
const padLeft = (value: string, padding: string | number) => {
if (is.number(padding)) {
// `padding` is typed as `number`
return Array(padding + 1).join(' ') + value;
}
if (is.string(padding)) {
// `padding` is typed as `string`
return padding + value;
}
throw new TypeError(`Expected 'padding' to be of type 'string' or 'number', got '${is(padding)}'.`);
}
padLeft('🦄', 3);
//=> ' 🦄'
padLeft('🦄', '🌈');
//=> '🌈🦄'
```
## API
### is(value)
Returns the type of `value`.
Primitives are lowercase and object types are camelcase.
Example:
- `'undefined'`
- `'null'`
- `'string'`
- `'symbol'`
- `'Array'`
- `'Function'`
- `'Object'`
Note: It will throw an error if you try to feed it object-wrapped primitives, as that's a bad practice. For example `new String('foo')`.
### is.{method}
All the below methods accept a value and returns a boolean for whether the value is of the desired type.
#### Primitives
##### .undefined(value)
##### .null(value)
##### .string(value)
##### .number(value)
##### .boolean(value)
##### .symbol(value)
#### Built-in types
##### .array(value)
##### .function(value)
##### .buffer(value)
##### .object(value)
Keep in mind that [functions are objects too](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions).
##### .numericString(value)
Returns `true` for a string that represents a number. For example, `'42'` and `'-8'`.
Note: `'NaN'` returns `false`, but `'Infinity'` and `'-Infinity'` return `true`.
##### .regExp(value)
##### .date(value)
##### .error(value)
##### .nativePromise(value)
##### .promise(value)
Returns `true` for any object with a `.then()` and `.catch()` method. Prefer this one over `.nativePromise()` as you usually want to allow userland promise implementations too.
##### .generator(value)
Returns `true` for any object that implements its own `.next()` and `.throw()` methods and has a function definition for `Symbol.iterator`.
##### .generatorFunction(value)
##### .asyncFunction(value)
Returns `true` for any `async` function that can be called with the `await` operator.
```js
is.asyncFunction(async () => {});
// => true
is.asyncFunction(() => {});
// => false
```
##### .boundFunction(value)
Returns `true` for any `bound` function.
```js
is.boundFunction(() => {});
// => true
is.boundFunction(function () {}.bind(null));
// => true
is.boundFunction(function () {});
// => false
```
##### .map(value)
##### .set(value)
##### .weakMap(value)
##### .weakSet(value)
#### Typed arrays
##### .int8Array(value)
##### .uint8Array(value)
##### .uint8ClampedArray(value)
##### .int16Array(value)
##### .uint16Array(value)
##### .int32Array(value)
##### .uint32Array(value)
##### .float32Array(value)
##### .float64Array(value)
#### Structured data
##### .arrayBuffer(value)
##### .sharedArrayBuffer(value)
##### .dataView(value)
#### Emptiness
##### .emptyString(value)
Returns `true` if the value is a `string` and the `.length` is 0.
##### .nonEmptyString(value)
Returns `true` if the value is a `string` and the `.length` is more than 0.
##### .emptyStringOrWhitespace(value)
Returns `true` if `is.emptyString(value)` or if it's a `string` that is all whitespace.
##### .emptyArray(value)
Returns `true` if the value is an `Array` and the `.length` is 0.
##### .nonEmptyArray(value)
Returns `true` if the value is an `Array` and the `.length` is more than 0.
##### .emptyObject(value)
Returns `true` if the value is an `Object` and `Object.keys(value).length` is 0.
Please note that `Object.keys` returns only own enumerable properties. Hence something like this can happen:
```js
const object1 = {};
Object.defineProperty(object1, 'property1', {
value: 42,
writable: true,
enumerable: false,
configurable: true
});
is.emptyObject(object1);
// => true
```
##### .nonEmptyObject(value)