From d000398138c1e6ea351433705a76f79536b94307 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Thu, 10 Nov 2022 15:10:06 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- incubator/netbox/0.0.1/CHANGELOG.md | 11 + incubator/netbox/0.0.1/Chart.lock | 12 + incubator/netbox/0.0.1/Chart.yaml | 35 + incubator/netbox/0.0.1/README.md | 108 + incubator/netbox/0.0.1/app-readme.md | 8 + .../netbox/0.0.1/charts/common-10.9.4.tgz | Bin 0 -> 49391 bytes .../0.0.1/charts/postgresql-8.0.122.tgz | Bin 0 -> 55654 bytes .../netbox/0.0.1/charts/redis-3.0.121.tgz | Bin 0 -> 56427 bytes incubator/netbox/0.0.1/ix_values.yaml | 268 ++ incubator/netbox/0.0.1/questions.yaml | 3776 +++++++++++++++++ .../netbox/0.0.1/templates/_housekeeper.tpl | 33 + incubator/netbox/0.0.1/templates/_secret.tpl | 376 ++ incubator/netbox/0.0.1/templates/_worker.tpl | 56 + incubator/netbox/0.0.1/templates/common.yaml | 16 + .../0.0.1/templates/prometheusrules.yaml | 18 + .../0.0.1/templates/servicemonitor.yaml | 24 + incubator/netbox/0.0.1/values.yaml | 0 incubator/netbox/item.yaml | 4 + 18 files changed, 4745 insertions(+) create mode 100644 incubator/netbox/0.0.1/CHANGELOG.md create mode 100644 incubator/netbox/0.0.1/Chart.lock create mode 100644 incubator/netbox/0.0.1/Chart.yaml create mode 100644 incubator/netbox/0.0.1/README.md create mode 100644 incubator/netbox/0.0.1/app-readme.md create mode 100644 incubator/netbox/0.0.1/charts/common-10.9.4.tgz create mode 100644 incubator/netbox/0.0.1/charts/postgresql-8.0.122.tgz create mode 100644 incubator/netbox/0.0.1/charts/redis-3.0.121.tgz create mode 100644 incubator/netbox/0.0.1/ix_values.yaml create mode 100644 incubator/netbox/0.0.1/questions.yaml create mode 100644 incubator/netbox/0.0.1/templates/_housekeeper.tpl create mode 100644 incubator/netbox/0.0.1/templates/_secret.tpl create mode 100644 incubator/netbox/0.0.1/templates/_worker.tpl create mode 100644 incubator/netbox/0.0.1/templates/common.yaml create mode 100644 incubator/netbox/0.0.1/templates/prometheusrules.yaml create mode 100644 incubator/netbox/0.0.1/templates/servicemonitor.yaml create mode 100644 incubator/netbox/0.0.1/values.yaml create mode 100644 incubator/netbox/item.yaml diff --git a/incubator/netbox/0.0.1/CHANGELOG.md b/incubator/netbox/0.0.1/CHANGELOG.md new file mode 100644 index 00000000000..0d4af959dde --- /dev/null +++ b/incubator/netbox/0.0.1/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + + + +## [netbox-0.0.1]netbox-0.0.1 (2022-11-10) + +### Feat + +- add netbox ([#4248](https://github.com/truecharts/charts/issues/4248)) + + \ No newline at end of file diff --git a/incubator/netbox/0.0.1/Chart.lock b/incubator/netbox/0.0.1/Chart.lock new file mode 100644 index 00000000000..ae729ad5600 --- /dev/null +++ b/incubator/netbox/0.0.1/Chart.lock @@ -0,0 +1,12 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.9.4 +- name: postgresql + repository: https://charts.truecharts.org/ + version: 8.0.122 +- name: redis + repository: https://charts.truecharts.org + version: 3.0.121 +digest: sha256:3d735a35d0b9723ef7c9fab29613f5407c530ac80815a2f5f9d9673ba25da2f6 +generated: "2022-11-10T15:07:38.772854797Z" diff --git a/incubator/netbox/0.0.1/Chart.yaml b/incubator/netbox/0.0.1/Chart.yaml new file mode 100644 index 00000000000..c83fd8854b8 --- /dev/null +++ b/incubator/netbox/0.0.1/Chart.yaml @@ -0,0 +1,35 @@ +apiVersion: v2 +appVersion: "3.3.6" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.9.4 + - condition: postgresql.enabled + name: postgresql + repository: https://charts.truecharts.org/ + version: 8.0.122 + - condition: redis.enabled + name: redis + repository: https://charts.truecharts.org + version: 3.0.121 +description: NetBox is the leading solution for modeling and documenting modern networks. +home: https://truecharts.org/docs/charts/incubator/netbox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/netbox.png +keywords: + - network + - netbox +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: netbox +sources: + - https://github.com/truecharts/charts/tree/master/charts/incubator/netbox + - https://github.com/netbox-community/netbox-docker +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - network + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/incubator/netbox/0.0.1/README.md b/incubator/netbox/0.0.1/README.md new file mode 100644 index 00000000000..e3a0b100e36 --- /dev/null +++ b/incubator/netbox/0.0.1/README.md @@ -0,0 +1,108 @@ +# netbox + +NetBox is the leading solution for modeling and documenting modern networks. + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [netbox](https://truecharts.org/docs/charts/incubator/netbox) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Source Code + +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://charts.truecharts.org/ | postgresql | 8.0.122 | +| https://charts.truecharts.org | redis | 3.0.121 | +| https://library-charts.truecharts.org | common | 10.9.4 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Installing-an-App). + +### Helm + +To install the chart with the release name `netbox` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install netbox TrueCharts/netbox +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `netbox` deployment + +```console +helm uninstall netbox +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the values.yaml file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/truecharts/library-charts/tree/main/charts/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install netbox \ + --set env.TZ="America/New York" \ + TrueCharts/netbox +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install netbox TrueCharts/netbox -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/incubator/netbox/0.0.1/app-readme.md b/incubator/netbox/0.0.1/app-readme.md new file mode 100644 index 00000000000..35163b5207a --- /dev/null +++ b/incubator/netbox/0.0.1/app-readme.md @@ -0,0 +1,8 @@ +NetBox is the leading solution for modeling and documenting modern networks. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/incubator/netbox](https://truecharts.org/docs/charts/incubator/netbox) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/incubator/netbox/0.0.1/charts/common-10.9.4.tgz b/incubator/netbox/0.0.1/charts/common-10.9.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..aa605d254d8f773be0b3d1710714b66cd09d80d4 GIT binary patch literal 49391 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

)4Skc|ql53zCkJM#*h-Ipy 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 Bgk1mt literal 0 HcmV?d00001 diff --git a/incubator/netbox/0.0.1/charts/postgresql-8.0.122.tgz b/incubator/netbox/0.0.1/charts/postgresql-8.0.122.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a663db2e6c101ff9abc0753f37d4b60ded53a323 GIT binary patch literal 55654 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 CaAKGM literal 0 HcmV?d00001 diff --git a/incubator/netbox/0.0.1/charts/redis-3.0.121.tgz b/incubator/netbox/0.0.1/charts/redis-3.0.121.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c8d0d90c105849ea22e2f00eeeae620454bb73f7 GIT binary patch literal 56427 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.`. Add '*' to this list to exempt all models. + exempt_view_permissions: + [] + # - dcim.site + # - dcim.region + # - ipam.prefix + # - HTTP proxies NetBox should use when sending outbound HTTP requests (e.g. for webhooks). + http_proxies: + [] + # - key: http + # url: http://10.10.1.10:3128 + # - key: https + # url: http://10.10.1.10:1080 + # -- IP addresses recognized as internal to the system. The debugging toolbar will be available only to clients accessing + # NetBox from an internal IP. (127.0.0.1 and ::1) added automatically + internal_ips: + [] + # - "10.10.10.5" + # -- Automatically reset the lifetime of a valid session upon each authenticated request. Enables users to remain + # authenticated to NetBox indefinitely. + login_persistence: false + # -- Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users + # are permitted to access most data in NetBox but not make any changes. + login_required: true + # -- The length of time (in seconds) for which a user will remain logged into the web UI before being prompted to + # re-authenticate. (Default: 1209600 [14 days]) + login_timeout: 1209600 + # -- Enable GraphQL API. + graphql_enabled: true + # -- Maps provider + maps_url: https://maps.google.com/?q= + # -- An API consumer can request an arbitrary number of objects =by appending the "limit" parameter to the URL (e.g. + # "?limit=1000"). This setting defines the maximum limit. Setting it to 0 or None will allow an API consumer to request + # all objects by specifying "?limit=0". + max_page_size: 1000 + # -- Determine how many objects to display per page within a list. (Default: 50) + paginate_count: 50 + powerfeed: + # -- The default value for the amperage field when creating new power feeds. + default_amperage: 15 + # -- The default value (percentage) for the max_utilization field when creating new power feeds. + default_max_utilization: 80 + # -- The default value for the voltage field when creating new power feeds. + default_voltage: 120 + # -- Rack elevation size defaults, in pixels. For best results, the ratio of width to height should be roughly 10:1. + rack: + elevation_default_unit_height: 22 + elevation_default_unit_width: 220 + # -- Credentials that NetBox will uses to authenticate to devices when connecting via NAPALM. + napalm: + username: "" + password: "" + timeout: 30 + # -- NAPALM optional arguments (see http://napalm.readthedocs.io/en/latest/support/#optional-arguments). + args: + [] + # - arg: allow_agent + # value: "False" + # -- Cross-Site-Request-Forgery-Attack settings. If Netbox is sitting behind a reverse proxy, you might need to set this + csrf_trusted_origin: + [] + # - https://netbox.mydomain.com + # -- The name to use for the session cookie. + session_cookie_name: sessionid + # -- The name to use for the csrf token cookie. + csrf_cookie_name: csrftoken + # -- By default uploaded media is stored on the local filesystem. Using Django-storages is also supported. Provide the + # class path of the storage driver in storage_backend and any configuration options in storage_config. For example: + # Example storages.backends.s3boto3.S3Boto3Storage + storage_backend: "" + storage_config: + [] + # - key: AWS_ACCESS_KEY_ID + # value: KeyID + # - key: AWS_SECRET_ACCESS_KEY + # value: Secret + # - key: AWS_STORAGE_BUCKET_NAME + # value: netbox + # - key: AWS_S3_REGION_NAME + # value: eu-west-1 + # -- Plugins configuration settings. These settings are used by various plugins that the user may have installed. + plugin_config: + # - plugin_name: plugin1 + # enabled: false + # config: + # - key: foo + # value: bar + # - key: fizz + # value: bizz + # -- Maximum execution time for background tasks, in seconds. + rq_default_timeout: 300 + # -- Remote authentication support + remote_auth: + {} + # enabled: false + # backend: netbox.authentication.RemoteUserBackend + # header: header + # auto_create_user: false + # default_groups: [] + # default_permissions: + # - key: dcim.change_site + # value: None + # -- Date/time formatting. See the following link for supported formats: + # https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date + date_time: + date_format: N j, Y + short_date_format: Y-m-d + time_format: g:i a + short_time_format: H:i:s + date_time_format: N j, Y g:i a + short_date_time_format: Y-m-d H:i + +metrics: + # -- Enable and configure a Prometheus serviceMonitor for the chart under this key. + # @default -- See values.yaml + enabled: false + serviceMonitor: + interval: 1m + scrapeTimeout: 30s + labels: {} + # -- Enable and configure Prometheus Rules for the chart under this key. + # @default -- See values.yaml + prometheusRule: + enabled: false + labels: {} + # -- Configure additionial rules for the chart under this key. + # @default -- See prometheusrules.yaml + rules: + [] + # - alert: UnifiPollerAbsent + # annotations: + # description: Unifi Poller has disappeared from Prometheus service discovery. + # summary: Unifi Poller is down. + # expr: | + # absent(up{job=~".*unifi-poller.*"} == 1) + # for: 5m + # labels: + # severity: critical + +persistence: + config: + enabled: true + mountPath: /etc/netbox/config + reports: + enabled: true + mountPath: /etc/netbox/reports + scripts: + enabled: true + mountPath: /etc/netbox/scripts + media: + enabled: true + mountPath: /opt/netbox/netbox/media + configfile: + enabled: true + type: secret + objectName: '{{ include "tc.common.names.fullname" . }}-secret' + mountPath: /etc/netbox/config/01-config.py + subPath: config.py + +postgresql: + enabled: true + existingSecret: dbcreds + postgresqlUsername: netbox + postgresqlDatabase: netbox + +redis: + enabled: true + existingSecret: rediscreds + +portal: + enabled: true diff --git a/incubator/netbox/0.0.1/questions.yaml b/incubator/netbox/0.0.1/questions.yaml new file mode 100644 index 00000000000..ddf7e7ba63f --- /dev/null +++ b/incubator/netbox/0.0.1/questions.yaml @@ -0,0 +1,3776 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: netbox + group: Container Configuration + label: Netbox Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: allowed_hosts + label: Allowed Hosts + description: This is a list of valid fully-qualified domain names (FQDNs) for the NetBox server. NetBox will not permit write access to the server via any other hostnames. The first FQDN in the list will be treated as the preferred name. (127.0.0.1 and ::1) added automatically + schema: + type: list + default: [] + items: + - variable: allowed_hosts_entry + label: Allowed Host + schema: + type: string + required: true + default: "" + - variable: allowed_urls_schemes + label: Allowed URL Schemes + description: URL schemes that are allowed within links in NetBox. + schema: + type: list + default: [] + items: + - variable: allowed_url_scheme_entry + label: Allowed URL Scheme + schema: + type: string + required: true + default: "" + - variable: admins + label: Admins + description: Specify one or more name and email address tuples representing NetBox administrators. These people will be notified of application errors (assuming correct email settings are provided). + schema: + type: list + default: [] + items: + - variable: admin_entry + label: Admin + schema: + type: dict + additional_attrs: true + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: email + label: Email + schema: + type: string + required: true + default: "" + - variable: auth_password_validators + label: Auth Password Validators + description: Enable any desired validators for local account passwords below. For a list of included validators, please see the Django documentation at https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation. + schema: + type: list + default: [] + items: + - variable: auth_password_validators_entry + label: Auth Password Validator + schema: + type: dict + additional_attrs: true + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: options + label: Options + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: Key + schema: + type: string + required: true + default: "" + - variable: value + label: Value + schema: + type: string + required: true + default: "" + - variable: banner + label: Banner + schema: + additional_attrs: true + type: dict + attrs: + - variable: login + label: Login Banner + description: Text to include on the login page above the login form. HTML is allowed + schema: + type: string + default: "" + - variable: top + label: Top Banner + description: Optionally display a persistent banner at the top of every page. + schema: + type: string + default: "" + - variable: bottom + label: Bottom Banner + description: Optionally display a persistent banner at the bottom of every page. + schema: + type: string + default: "" + - variable: retention + label: Retention + schema: + additional_attrs: true + type: dict + attrs: + - variable: changelog + label: Changelog + description: Maximum number of days to retain logged changes. Set to 0 to retain changes indefinitely. + schema: + type: int + default: 90 + - variable: job_result + label: Job Results + description: Maximum number of days to retain job results (scripts and reports). Set to 0 to retain job results in the database indefinitely. + schema: + type: int + default: 90 + - variable: prefer_ipv4 + label: Prefer IPv4 + description: When determining the primary IP address for a device, IPv6 is preferred over IPv4 by default. + schema: + type: boolean + default: false + - variable: enforce_global_unique + label: Enforce Global Unique + description: Enforcement of unique IP space can be toggled on a per-VRF basis. To enforce unique IP space within the global table + schema: + type: boolean + default: true + - variable: cors_origin_allow_all + label: CORS Origin Allow All + description: If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers + schema: + type: boolean + default: false + show_subquestions_if: false + - variable: cors_origin_whitelist + label: CORS Origin Whitelist + description: Example 127.0.0.1 + schema: + type: list + default: [] + items: + - variable: cors_origin_whitelist_entry + label: CORS Origin Whitelist Entry + schema: + type: string + required: true + default: "" + - variable: cors_origin_regex_whitelist + label: CORS Origin Regex Whitelist + description: Example r'^(https?://)?(\w+\.)?example\.com$' + schema: + type: list + default: [] + items: + - variable: cors_origin_whitelist_entry + label: CORS Origin Regex Whitelist Entry + schema: + type: string + required: true + default: "" + - variable: csrf_trusted_origin + label: CSRF Trusted Origin + description: Cross-Site-Request-Forgery-Attack settings. If Netbox is sitting behind a reverse proxy, you might need to set this + schema: + type: list + default: [] + items: + - variable: csrf_trusted_origin_entry + label: CSRF Trusted Origin Entry + schema: + type: string + required: true + default: "" + - variable: csrf_cookie_name + label: CSRF Cookie Name + description: The name to use for the csrf token cookie. + schema: + type: string + default: csrftoken + - variable: session_cookie_name + label: Session Cookie Name + description: The name to use for the session cookie. + schema: + type: string + default: sessionid + - variable: email + label: Email + schema: + additional_attrs: true + type: dict + attrs: + - variable: server + label: Server + schema: + type: string + default: "" + - variable: port + label: Port + schema: + type: int + default: 587 + - variable: from_email + label: From Email + schema: + type: string + default: "" + - variable: username + label: Username + schema: + type: string + default: "" + - variable: password + label: Password + schema: + type: string + private: true + default: "" + - variable: use_ssl + label: Use SSL + schema: + type: boolean + default: false + - variable: use_tls + label: Use TLS + schema: + type: boolean + default: true + - variable: timeout + label: Timeout + schema: + type: int + default: 10 + - variable: exempt_view_permissions + label: Exempt View Permissions + description: Exempt certain models from the enforcement of view permissions. Models listed here will be viewable by all users and by anonymous users. List models in the form `.`. Add '*' to this list to exempt all models. + schema: + type: list + default: [] + items: + - variable: exempt_view_permissions_entry + label: Exempt View Permission + schema: + type: string + required: true + default: "" + - variable: http_proxies + label: HTTP Proxies + description: HTTP proxies NetBox should use when sending outbound HTTP requests (e.g. for webhooks). + schema: + type: list + default: [] + items: + - variable: http_proxy_entry + label: HTTP Proxy Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: Key + schema: + type: string + required: true + default: "" + - variable: url + label: URL + schema: + type: string + required: true + default: "" + - variable: internal_ips + label: Internal IPs + description: IP addresses recognized as internal to the system. The debugging toolbar will be available only to clients accessing NetBox from an internal IP. (127.0.0.1 and ::1) added automatically + schema: + type: list + default: [] + items: + - variable: internal_ips_entry + label: Internal IP + schema: + type: string + required: true + default: "" + - variable: login_persistence + label: Login Persistence + description: Automatically reset the lifetime of a valid session upon each authenticated request. Enables users to remain authenticated to NetBox indefinitely. + schema: + type: boolean + default: false + - variable: login_required + label: Login Required + description: Setting this to true will permit only authenticated users to access any part of NetBox. By default, anonymous users are permitted to access most data in NetBox but not make any changes. + schema: + type: boolean + default: true + - variable: login_timeout + label: Login Timeout + description: The length of time (in seconds) for which a user will remain logged into the web UI before being prompted to re-authenticate. + schema: + type: int + default: 1209600 + - variable: graphql_enabled + label: Enable GraphQL + description: Enable GraphQL API. + schema: + type: boolean + default: true + - variable: maps_url + label: Maps URl + description: Maps provider + schema: + type: string + default: https://maps.google.com/?q= + - variable: max_page_size + label: Max Page Size + description: This setting defines the maximum limit of objects an API can request. Setting it to 0 or None will allow an API consumer to request all objects. + schema: + type: int + default: 1000 + - variable: paginate_count + label: Paginate Count + description: Determine how many objects to display per page within a list. + schema: + type: int + default: 50 + - variable: powerfeed + label: Power Feed + schema: + additional_attrs: true + type: dict + attrs: + - variable: default_amperage + label: Default Amperage + description: The default value for the amperage field when creating new power feeds. + schema: + type: int + default: 15 + - variable: default_max_utilization + label: Default Max Utilization + description: The default value (percentage) for the max_utilization field when creating new power feeds. + schema: + type: int + default: 80 + - variable: default_voltage + label: Default Voltage + description: The default value for the voltage field when creating new power feeds. + schema: + type: int + default: 120 + - variable: rack + label: Rack + description: Rack elevation size defaults, in pixels. For best results, the ratio of width to height should be roughly 10:1. + schema: + additional_attrs: true + type: dict + attrs: + - variable: elevation_default_unit_height + label: Elevation Default Unit Height + schema: + type: int + default: 22 + - variable: elevation_default_unit_width + label: Elevation Default Unit Width + schema: + type: int + default: 220 + - variable: napalm + label: Napalm + description: Credentials that NetBox will uses to authenticate to devices when connecting via NAPALM. + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: Username + schema: + type: string + default: "" + - variable: password + label: Password + schema: + type: string + private: true + default: "" + - variable: timeout + label: Timeout + schema: + type: int + default: 30 + - variable: args + label: Args + description: NAPALM optional arguments (see http://napalm.readthedocs.io/en/latest/support/#optional-arguments). + schema: + type: list + default: [] + items: + - variable: arg_entry + label: Arg Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: arg + label: Arg + schema: + type: string + required: true + default: "" + - variable: value + label: Value + schema: + type: string + required: true + default: "" + - variable: storage_backend + label: Storage Backend + description: By default uploaded media is stored on the local filesystem. Using Django-storages is also supported. Provide the class path of the storage driver in storage_backend and any configuration options in storage_config. + schema: + type: string + required: true + default: "" + - variable: storage_config + label: Storage Config + schema: + show_if: [["storage_backend", "!=", ""]] + type: list + default: [] + items: + - variable: storage_config_entry + label: Storage Config Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: Key + schema: + type: string + required: true + default: "" + - variable: value + label: Value + schema: + type: string + required: true + default: "" + - variable: rq_default_timeout + label: RQ Default Timeout + description: Maximum execution time for background tasks, in seconds. + schema: + type: int + required: true + default: 300 + - variable: remote_auth + label: Remote Auth + description: Remote authentication support + schema: + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + - variable: backend + label: Backend + schema: + type: string + required: true + default: "" + - variable: header + label: Header + schema: + type: string + required: true + default: "" + - variable: auto_create_user + label: Auto Create User + schema: + type: boolean + default: false + - variable: default_groups + label: Default Groups + schema: + type: list + default: [] + items: + - variable: default_group_entry + label: Default Group + schema: + type: string + required: true + default: "" + - variable: default_permissions + label: Default Permissions + schema: + type: list + default: [] + items: + - variable: default_permissions_entry + label: Default Permission Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: Key + schema: + type: string + required: true + default: "" + - variable: value + label: Value + schema: + type: string + required: true + default: "" + - variable: date_time + label: Date Time + description: Date/time formatting. See the following link for supported formats https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date + schema: + type: dict + additional_attrs: true + attrs: + - variable: date_format + label: Date Format + schema: + type: string + required: true + default: N j, Y + - variable: short_date_format + label: Short Date Format + schema: + type: string + required: true + default: Y-m-d + - variable: time_format + label: Time Format + schema: + type: string + required: true + default: g:i a + - variable: short_time_format + label: Short Time Format + schema: + type: string + required: true + default: H:i:s + - variable: date_time_format + label: Date Time Format + schema: + type: string + required: true + default: N j, Y g:i a + - variable: short_date_time_format + label: Short Date Time Format + schema: + type: string + required: true + default: Y-m-d H:i + - variable: plugins_config + label: Plugins Config + description: Plugins configuration settings. These settings are used by various plugins that the user may have installed. + schema: + type: list + default: [] + items: + - variable: plugin_entry + label: Plugin Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: plugin_name + label: Plugin Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enable Plugin + schema: + type: boolean + default: true + - variable: config + label: Config + schema: + type: list + default: [] + items: + - variable: config_entry + label: Config Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: Key + schema: + type: string + required: true + default: "" + - variable: value + label: Value + schema: + type: string + required: true + default: "" + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + group: Container Configuration + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Service + description: The Primary service on which the healthcheck runs, often the webUI + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 10265 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: Target Port + description: The internal(!) port on the container the Application runs on + schema: + type: int + default: 8080 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + - variable: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: config + label: App Config Storage + description: Stores the Application Configuration. + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: reports + label: App Reports Storage + description: Stores the Application Reports. + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: scripts + label: App Scripts Storage + description: Stores the Application Scripts. + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: media + label: App Media Storage + description: Stores the Application Media. + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: Privileged mode + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: ReadOnly Root Filesystem + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: Allow Privilege Escalation + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: runAsNonRoot + schema: + type: boolean + default: false + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: runAsUser + description: The UserID of the user running the application + schema: + type: int + default: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + - variable: fsGroup + label: fsGroup + description: The group that should own ALL storage. + schema: + type: int + default: 568 + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: hostPath + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] + - variable: metrics + group: Metrics + label: Prometheus Metrics + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + description: Enable Prometheus Metrics + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: serviceMonitor + label: Service Monitor Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: interval + label: Scrape Interval + description: Scrape interval time + schema: + type: string + default: 1m + required: true + - variable: scrapeTimeout + label: Scrape Timeout + description: Scrape timeout Time + schema: + type: string + default: 30s + required: true + - variable: horizontalPodAutoscaler + group: Advanced + label: (Advanced) Horizontal Pod Autoscaler + schema: + type: list + default: [] + items: + - variable: hpaEntry + label: HPA Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: target + label: Target + description: Deployment name, Defaults to Main Deployment + schema: + type: string + default: "" + - variable: minReplicas + label: Minimum Replicas + schema: + type: int + default: 1 + - variable: maxReplicas + label: Maximum Replicas + schema: + type: int + default: 5 + - variable: targetCPUUtilizationPercentage + label: Target CPU Utilization Percentage + schema: + type: int + default: 80 + - variable: targetMemoryUtilizationPercentage + label: Target Memory Utilization Percentage + schema: + type: int + default: 80 + - variable: networkPolicy + group: Advanced + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: nodePort + description: Leave Empty to Disable + label: nodePort DEPRECATED + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: auth_once + label: Auth Once + description: Only attempt to log in if not already logged in. + schema: + type: boolean + default: true + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: The address on which to listen for SOCKS5 proxying into the tailscale net. + schema: + type: string + default: "" + - variable: outbound_http_proxy_listen + label: Outbound HTTP Proxy Listen + description: The address on which to listen for HTTP proxying into the tailscale net. + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true diff --git a/incubator/netbox/0.0.1/templates/_housekeeper.tpl b/incubator/netbox/0.0.1/templates/_housekeeper.tpl new file mode 100644 index 00000000000..43edc3ea6ab --- /dev/null +++ b/incubator/netbox/0.0.1/templates/_housekeeper.tpl @@ -0,0 +1,33 @@ +{{/* Define the housekeeper container */}} +{{- define "netbox.housekeeper" -}} +image: {{ .Values.image.repository }}:{{ .Values.image.tag }} +imagePullPolicy: {{ .Values.image.pullPolicy }} +securityContext: + runAsUser: {{ .Values.podSecurityContext.runAsUser }} + runAsGroup: {{ .Values.podSecurityContext.runAsGroup }} + readOnlyRootFilesystem: {{ .Values.securityContext.readOnlyRootFilesystem }} + runAsNonRoot: {{ .Values.securityContext.runAsNonRoot }} +command: + - /bin/bash + - -c + - | + echo "Starting housekeeper..." + until $(curl --output /dev/null --silent --head --fail http://127.0.0.1:8080/login); do + echo "Housekeeper: Waiting for the main netbox container..." + sleep 5 + done + /opt/netbox/housekeeping.sh + echo "Housekeeper finished, exiting..." +volumeMounts: + - name: config + mountPath: /etc/netbox/config + - name: reports + mountPath: /etc/netbox/reports + - name: scripts + mountPath: /etc/netbox/scritps + - name: media + mountPath: /opt/netbox/netbox/media + - name: configfile + mountPath: /etc/netbox/config/01-config.py + subPath: config.py +{{- end -}} diff --git a/incubator/netbox/0.0.1/templates/_secret.tpl b/incubator/netbox/0.0.1/templates/_secret.tpl new file mode 100644 index 00000000000..6d53f94fded --- /dev/null +++ b/incubator/netbox/0.0.1/templates/_secret.tpl @@ -0,0 +1,376 @@ +{{/* Define the secret */}} +{{- define "netbox.secret" -}} + +{{- $secretName := printf "%s-secret" (include "tc.common.names.fullname" .) }} + +{{- $secret_key := "" }} +{{- with (lookup "v1" "Secret" .Release.Namespace $secretName) }} + {{- $secret_key = (index .data "secret_key") }} +{{- else }} + {{- $secret_key = randAlphaNum 64 }} +{{- end }} + +--- + +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: {{ $secretName }} + labels: + {{- include "tc.common.labels" . | nindent 4 }} +data: + secret_key: {{ $secret_key | b64enc }} +stringData: + config.py: | + ALLOWED_HOSTS = [ + '127.0.0.1', + '::1', + {{- range .Values.netbox.allowed_hosts }} + {{ . | squote }}, + {{- end }} + ] + + DATABASE = { + 'NAME': '{{ .Values.postgresql.postgresqlDatabase }}', + 'USER': '{{ .Values.postgresql.postgresqlUsername }}', + 'PASSWORD': '{{ .Values.postgresql.postgresqlPassword | trimAll "\"" }}', + 'HOST': '{{ printf "%v-%v" .Release.Name "postgresql" }}', + 'PORT': '5432', + 'CONN_MAX_AGE': 300, + } + + REDIS = { + 'tasks': { + 'HOST': '{{ printf "%v-%v" .Release.Name "redis" }}', + 'PORT': 6379, + 'PASSWORD': '{{ .Values.redis.redisPassword | trimAll "\"" }}', + 'DATABASE': 0, + 'SSL': False, + }, + 'caching': { + 'HOST': '{{ printf "%v-%v" .Release.Name "redis" }}', + 'PORT': 6379, + 'PASSWORD': '{{ .Values.redis.redisPassword | trimAll "\"" }}', + 'DATABASE': 1, + 'SSL': False, + } + } + + SECRET_KEY = '{{ $secret_key }}' + + {{- with .Values.netbox.admins }} + ADMINS = [ + {{- range . }} + ({{ .name | squote }},{{ .email | squote }}), + {{- end }} + ] + {{- end }} + + {{- with .Values.netbox.allowed_urls_schemes}} + ALLOWED_URL_SCHEMES = [ + {{- range . }} + {{ . | squote }}, + {{- end }} + ] + {{- end }} + + {{- with .Values.netbox.auth_password_validators }} + AUTH_PASSWORD_VALIDATORS = [ + {{- range . }} + { + 'NAME': {{ .name | squote }}, + 'OPTIONS': { + {{- range .options }} + {{ .key | squote }}: {{ .value }}, + {{- end }} + } + + }, + {{- end }} + ] + {{- end }} + + {{- with .Values.netbox.banner.top }} + BANNER_TOP = {{ . | squote }} + {{- end }} + + {{- with .Values.netbox.banner.bottom }} + BANNER_BOTTOM = {{ . | squote }} + {{- end }} + + {{- with .Values.netbox.banner.login }} + BANNER_LOGIN = {{ . | squote }} + {{- end }} + + {{- if or .Values.netbox.retention.changelog (eq (int .Values.netbox.retention.changelog) 0) }} + CHANGELOG_RETENTION = {{ .Values.netbox.retention.changelog }} + {{- end }} + + {{- if or .Values.netbox.retention.job_result (eq (int .Values.netbox.retention.job_result) 0) }} + JOBRESULT_RETENTION = {{ .Values.netbox.retention.job_result }} + {{- end }} + + PREFER_IPV4 = {{ ternary "True" "False" .Values.netbox.prefer_ipv4 }} + + ENFORCE_GLOBAL_UNIQUE = {{ ternary "True" "False" .Values.netbox.enforce_global_unique }} + + GRAPHQL_ENABLED = {{ ternary "True" "False" .Values.netbox.graphql_enabled }} + + {{- with .Values.netbox.maps_url }} + MAPS_URL = {{ . | squote }} + {{- end }} + + {{- if or .Values.netbox.max_page_size (eq (int .Values.netbox.max_page_size) 0) }} + MAX_PAGE_SIZE = {{ .Values.netbox.max_page_size }} + {{- end }} + + {{- if or .Values.netbox.paginate_count (eq (int .Values.netbox.paginate_count) 0) }} + PAGINATE_COUNT = {{ .Values.netbox.paginate_count }} + {{- end }} + + {{- with .Values.netbox.powerfeed.default_amperage }} + POWERFEED_DEFAULT_AMPERAGE = {{ . }} + {{- end }} + + {{- with .Values.netbox.powerfeed.default_max_utilization }} + POWERFEED_DEFAULT_MAX_UTILIZATION = {{ . }} + {{- end }} + + {{- with .Values.netbox.powerfeed.default_voltage }} + POWERFEED_DEFAULT_VOLTAGE = {{ . }} + {{- end }} + + {{- with .Values.netbox.rack.elevation_default_unit_height }} + RACK_ELEVATION_DEFAULT_UNIT_HEIGHT = {{ . }} + {{- end }} + + {{- with .Values.netbox.rack.elevation_default_unit_width }} + RACK_ELEVATION_DEFAULT_UNIT_WIDTH = {{ . }} + {{- end }} + + {{- with .Values.netbox.napalm.username }} + NAPALM_USERNAME = {{ . | squote }} + {{- end }} + + {{- with .Values.netbox.napalm.password }} + NAPALM_PASSWORD = {{ . | squote }} + {{- end }} + + {{- with .Values.netbox.napalm.timeout }} + NAPALM_TIMEOUT = {{ . }} + {{- end }} + + {{- with .Values.netbox.napalm.args }} + NAPALM_ARGS = { + {{- range . }} + {{ .arg | squote }}: {{ .value | squote }}, + {{- end }} + } + {{- end }} + + {{- with .Values.netbox.csrf_trusted_origin }} + CSRF_TRUSTED_ORIGINS = [ + {{ . | squote }}, + ] + {{- end }} + + {{- with .Values.netbox.csrf_cookie_name }} + CSRF_COOKIE_NAME = {{ . | squote }} + {{- end }} + + CORS_ORIGIN_ALLOW_ALL = {{ ternary "True" "False" .Values.netbox.cors_origin_allow_all }} + + {{- with .Values.netbox.cors_origin_whitelist }} + CORS_ORIGIN_WHITELIST = [ + {{- range . }} + {{ . | squote }}, + {{- end }} + ] + {{- end }} + + {{- with .Values.netbox.cors_origin_regex_whitelist }} + CORS_ORIGIN_REGEX_WHITELIST = [ + {{- range . }} + {{ . }}, + {{- end }} + ] + {{- end }} + + DEBUG = {{ ternary "True" "False" .Values.netbox.debug }} + + {{- if .Values.netbox.email }} + {{- if .Values.netbox.email.server }} + EMAIL = { + {{- with .Values.netbox.email.server }} + 'SERVER': {{ . | squote }}, + {{- end }} + {{- with .Values.netbox.email.port }} + 'PORT': {{ . }}, + {{- end }} + {{- with .Values.netbox.email.username }} + 'USERNAME': {{ . | squote }}, + {{- end }} + {{- with .Values.netbox.email.password }} + 'PASSWORD': {{ . | squote }}, + {{- end }} + 'USE_SSL': {{ ternary "True" "False" .Values.netbox.email.use_ssl }}, + 'USE_TLS': {{ ternary "True" "False" .Values.netbox.email.use_tls }}, + {{- with .Values.netbox.email.timeout }} + 'TIMEOUT': {{ . }}, + {{- end }} + {{- with .Values.netbox.email.from_email }} + 'FROM_EMAIL': {{ . | squote }}, + {{- end }} + } + {{- end }} + {{- end }} + + {{- with .Values.netbox.exempt_view_permissions }} + EXEMPT_VIEW_PERMISSIONS = [ + {{- range . }} + {{ . | squote }}, + {{- end }} + ] + {{- end }} + + {{- with .Values.netbox.http_proxies }} + HTTP_PROXIES = { + {{- range . }} + {{ .key | squote }}: {{ .url | squote }}, + {{- end }} + } + {{- end }} + + {{- with .Values.netbox.internal_ips }} + INTERNAL_IPS = ( + '127.0.0.1', + '::1', + {{- range . }} + {{ . | squote }}, + {{- end }} + ) + {{- end }} + + LOGIN_PERSISTENCE = {{ ternary "True" "False" .Values.netbox.login_persistence }} + + LOGIN_REQUIRED = {{ ternary "True" "False" .Values.netbox.login_required }} + + {{- with .Values.netbox.login_timeout }} + LOGIN_TIMEOUT = {{ . }} + {{- end }} + + METRICS_ENABLED = {{ ternary "True" "False" .Values.metrics.enabled }} + + TIME_ZONE = {{ .Values.TZ | squote }} + + MEDIA_ROOT = '/opt/netbox/netbox/media' + REPORTS_ROOT = '/opt/netbox/netbox/reports' + SCRIPTS_ROOT = '/opt/netbox/netbox/scripts' + + {{- with .Values.netbox.storage_backend }} + STORAGE_BACKEND = {{ . | squote }} + {{- end }} + + {{- with .Values.netbox.storage_config }} + STORAGE_CONFIG = { + {{- range . }} + {{ .key | squote }}: {{ .value | squote }}, + {{- end }} + } + {{- end }} + + {{- $enabled_plugins := list -}} + {{- with .Values.netbox.plugin_config -}} + {{- range . -}} + {{- if .enabled -}} + {{- $enabled_plugins = append $enabled_plugins .plugin_name -}} + {{- end -}} + {{- end -}} + {{- end -}} + + {{- with $enabled_plugins }} + PLUGINS = [ + {{- range . }} + {{ . | squote }}, + {{- end }} + ] + {{- end }} + + {{/* + TODO: Consider template plugins here, so it's easier to config on UI + https://github.com/netbox-community/netbox/wiki/Plugins + */}} + {{- with .Values.netbox.plugin_config }} + PLUGINS_CONFIG = { + {{- range . }} + {{- if .enabled }} + {{ .plugin_name | squote }}: { + {{- range .config }} + {{ .key | squote }}: {{ .value | squote }}, + {{- end }} + } + {{- end }} + {{- end }} + } + {{- end }} + + {{- with .Values.netbox.rq_default_timeout }} + RQ_DEFAULT_TIMEOUT = {{ . }} + {{- end }} + + {{- with .Values.netbox.session_cookie_name }} + SESSION_COOKIE_NAME = {{ . | squote }} + {{- end }} + + RELEASE_CHECK_URL = 'https://api.github.com/repos/netbox-community/netbox/releases' + + {{- with .Values.netbox.remote_auth }} + {{- if .enabled }} + REMOTE_AUTH_ENABLED = True + {{- with .backend }} + REMOTE_AUTH_BACKEND = {{ . | squote }} + {{- end }} + {{- with .header }} + REMOTE_AUTH_HEADER = {{ . | squote }} + {{- end }} + REMOTE_AUTH_AUTO_CREATE_USER = {{ ternary "True" "False" .auto_create_user }} + {{- with .default_groups }} + REMOTE_AUTH_DEFAULT_GROUPS = [ + {{- range . }} + {{ . | squote }}, + {{- end }} + ] + {{- end }} + {{- with .default_permissions }} + REMOTE_AUTH_DEFAULT_PERMISSIONS = { + {{- range . }} + {{ .key | squote }}: {{ if eq .value "None" }}{{ .value }}{{ else }}{{ .value | squote }}{{ end }}, + {{- end }} + } + {{- end }} + {{- end }} + {{- end }} + SESSION_FILE_PATH = None + + {{- with .Values.netbox.date_time }} + {{- with .date_format }} + DATE_FORMAT = {{ . | squote }} + {{- end }} + {{- with .short_date_format }} + SHORT_DATE_FORMAT = {{ . | squote }} + {{- end }} + {{- with .time_format }} + TIME_FORMAT = {{ . | squote }} + {{- end }} + {{- with .shot_time_format }} + SHORT_TIME_FORMAT = {{ . | squote }} + {{- end }} + {{- with .date_time_format }} + DATETIME_FORMAT = {{ . | squote }} + {{- end }} + {{- with .short_date_time_format }} + SHORT_DATETIME_FORMAT = {{ . | squote }} + {{- end }} + {{- end }} +{{- end }} diff --git a/incubator/netbox/0.0.1/templates/_worker.tpl b/incubator/netbox/0.0.1/templates/_worker.tpl new file mode 100644 index 00000000000..41ff2f01b72 --- /dev/null +++ b/incubator/netbox/0.0.1/templates/_worker.tpl @@ -0,0 +1,56 @@ +{{/* Define the worker container */}} +{{- define "netbox.worker" -}} +image: {{ .Values.image.repository }}:{{ .Values.image.tag }} +imagePullPolicy: {{ .Values.image.pullPolicy }} +securityContext: + runAsUser: {{ .Values.podSecurityContext.runAsUser }} + runAsGroup: {{ .Values.podSecurityContext.runAsGroup }} + readOnlyRootFilesystem: {{ .Values.securityContext.readOnlyRootFilesystem }} + runAsNonRoot: {{ .Values.securityContext.runAsNonRoot }} +command: + - /bin/bash + - -c + - | + echo "Starting worker...." + until $(curl --output /dev/null --silent --head --fail http://127.0.0.1:8080/login); do + echo "Worker: Waiting for the main netbox container..." + sleep 5 + done + /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py rqworker +volumeMounts: + - name: config + mountPath: /etc/netbox/config + - name: reports + mountPath: /etc/netbox/reports + - name: scripts + mountPath: /etc/netbox/scritps + - name: media + mountPath: /opt/netbox/netbox/media + - name: configfile + mountPath: /etc/netbox/config/01-config.py + subPath: config.py +{{/*readinessProbe: + exec: + command: + - TODO: find a healthcheck + initialDelaySeconds: {{ .Values.probes.readiness.spec.initialDelaySeconds }} + timeoutSeconds: {{ .Values.probes.readiness.spec.timeoutSeconds }} + periodSeconds: {{ .Values.probes.readiness.spec.periodSeconds }} + failureThreshold: {{ .Values.probes.readiness.spec.failureThreshold }} +livenessProbe: + exec: + command: + - TODO: find a healthcheck + initialDelaySeconds: {{ .Values.probes.liveness.spec.initialDelaySeconds }} + timeoutSeconds: {{ .Values.probes.liveness.spec.timeoutSeconds }} + periodSeconds: {{ .Values.probes.liveness.spec.periodSeconds }} + failureThreshold: {{ .Values.probes.liveness.spec.failureThreshold }} +startupProbe: + exec: + command: + - TODO: find a healthcheck + initialDelaySeconds: {{ .Values.probes.startup.spec.initialDelaySeconds }} + timeoutSeconds: {{ .Values.probes.startup.spec.timeoutSeconds }} + periodSeconds: {{ .Values.probes.startup.spec.periodSeconds }} + failureThreshold: {{ .Values.probes.startup.spec.failureThreshold }}*/}} +{{- end -}} diff --git a/incubator/netbox/0.0.1/templates/common.yaml b/incubator/netbox/0.0.1/templates/common.yaml new file mode 100644 index 00000000000..36d5d8539ea --- /dev/null +++ b/incubator/netbox/0.0.1/templates/common.yaml @@ -0,0 +1,16 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.common.loader.init" . }} + +{{- include "netbox.secret" . }} + +{{- $_ := set .Values.additionalContainers "worker" (include "netbox.worker" . | fromYaml) -}} +{{- $_ := set .Values.additionalContainers "housekeeper" (include "netbox.housekeeper" . | fromYaml) -}} + +{{- if .Values.metrics.enabled -}} +{{- $_ := set .Values.podAnnotations "prometheus.io/scrape" "true" -}} +{{- $_ := set .Values.podAnnotations "prometheus.io/path" "/metrics" -}} +{{- $_ := set .Values.podAnnotations "prometheus.io/port" (.Values.service.main.ports.main.targetPort | toString) -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.common.loader.apply" . }} diff --git a/incubator/netbox/0.0.1/templates/prometheusrules.yaml b/incubator/netbox/0.0.1/templates/prometheusrules.yaml new file mode 100644 index 00000000000..35b77edf0f6 --- /dev/null +++ b/incubator/netbox/0.0.1/templates/prometheusrules.yaml @@ -0,0 +1,18 @@ +{{- if and .Values.metrics.enabled .Values.metrics.prometheusRule.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: {{ include "tc.common.names.fullname" . }} + labels: + {{- include "tc.common.labels" . | nindent 4 }} + {{- with .Values.metrics.prometheusRule.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + groups: + - name: {{ include "tc.common.names.fullname" . }} + rules: + {{- with .Values.metrics.prometheusRule.rules }} + {{- toYaml . | nindent 8 }} + {{- end }} +{{- end }} diff --git a/incubator/netbox/0.0.1/templates/servicemonitor.yaml b/incubator/netbox/0.0.1/templates/servicemonitor.yaml new file mode 100644 index 00000000000..3a719d761e1 --- /dev/null +++ b/incubator/netbox/0.0.1/templates/servicemonitor.yaml @@ -0,0 +1,24 @@ +{{- if .Values.metrics.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "tc.common.names.fullname" . }} + labels: + {{- include "tc.common.labels" . | nindent 4 }} + {{- with .Values.metrics.serviceMonitor.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + matchLabels: + {{- include "tc.common.labels.selectorLabels" . | nindent 6 }} + endpoints: + - port: http + {{- with .Values.metrics.serviceMonitor.interval }} + interval: {{ . }} + {{- end }} + {{- with .Values.metrics.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ . }} + {{- end }} + path: /metrics +{{- end }} diff --git a/incubator/netbox/0.0.1/values.yaml b/incubator/netbox/0.0.1/values.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/incubator/netbox/item.yaml b/incubator/netbox/item.yaml new file mode 100644 index 00000000000..24b089f5cf4 --- /dev/null +++ b/incubator/netbox/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/netbox.png +categories: +- network +