provider-routeros

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2026 License: Apache-2.0

README

Provider RouterOS

provider-routeros is an Upjet-generated Crossplane provider for MikroTik RouterOS. It is a direct adapter around the official terraform-routeros provider: the Terraform provider's managed-resource schemas and behavior are the source of truth.

The provider intentionally does not patch RouterOS behavior, maintain a fork, or add a second resource model. It currently generates all 254 upstream Terraform resources in both cluster-scoped and namespaced Crossplane API families. Terraform's 16 read-only data sources are not Crossplane managed resources and are not generated.

Runtime model

The upstream Terraform Plugin SDK v2 provider is compiled into the Crossplane provider process (Upjet "no-fork" mode). The runtime image contains neither the Terraform CLI nor a separate provider plugin. Resource operations are delegated to the official provider callbacks and schemas.

Terraform SDK ValidateFunc callbacks are Terraform configuration-time validation and are not run while Upjet refreshes state in no-fork mode. This is why values accepted by RouterOS, such as romon, do not require a local schema patch.

Configuration

Create a JSON credential secret and reference it from either a ProviderConfig or ClusterProviderConfig. The JSON is passed to the official provider and may contain any of its configuration fields:

apiVersion: v1
kind: Secret
metadata:
  name: routeros-creds
  namespace: crossplane-system
type: Opaque
stringData:
  credentials: |
    {
      "hosturl": "https://192.0.2.1",
      "username": "admin",
      "password": "replace-me",
      "insecure": false
    }
---
apiVersion: routeros.m.sindrip.io/v1beta1
kind: ClusterProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      name: routeros-creds
      namespace: crossplane-system
      key: credentials

Supported keys are hosturl, username, password, ca_certificate, insecure, suppress_syso_del_warn, routeros_version, and rest_timeout. ca_certificate has the same meaning as upstream: it is a path visible inside the provider container.

Resource identity and recovery

Upjet stores the official Terraform resource ID in the crossplane.io/external-name annotation. The provider does not invent natural keys, inject ownership comments, or automatically rediscover every RouterOS object after Kubernetes state is lost. Keep external names in Git for resources that must be re-adopted after rebuilding the management cluster, and first use Crossplane management policies such as Observe when adopting existing configuration.

Ordering, singleton behavior, defaults, move operations, and deletion semantics remain those implemented by terraform-routeros. Any future custom behavior should be explicit and should not silently diverge from upstream.

Following upstream

The exact official provider release is pinned as a Go module in go.mod. Renovate proposes every stable upstream release. The Makefile derives the Terraform schema and documentation tag from that module version, so an update is reviewed by regenerating metadata, APIs, controllers, and CRDs and checking the resulting diff.

Development

Generate the provider from the pinned upstream release:

make generate

Run tests and build the provider:

go test ./...
go build ./cmd/provider

Run against a Kubernetes cluster:

make run

Please report bugs and feature requests in this repository. Behavior inherited from terraform-routeros should be followed upstream rather than patched here.

Directories

Path Synopsis
apis
cluster
Package cluster contains Kubernetes API for the provider.
Package cluster contains Kubernetes API for the provider.
cluster/bridge/v1alpha1
+kubebuilder:object:generate=true +groupName=bridge.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=bridge.routeros.sindrip.io +versionName=v1alpha1
cluster/capsman/v1alpha1
+kubebuilder:object:generate=true +groupName=capsman.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=capsman.routeros.sindrip.io +versionName=v1alpha1
cluster/certificate/v1alpha1
+kubebuilder:object:generate=true +groupName=certificate.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=certificate.routeros.sindrip.io +versionName=v1alpha1
cluster/container/v1alpha1
+kubebuilder:object:generate=true +groupName=container.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=container.routeros.sindrip.io +versionName=v1alpha1
cluster/dhcp/v1alpha1
+kubebuilder:object:generate=true +groupName=dhcp.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=dhcp.routeros.sindrip.io +versionName=v1alpha1
cluster/disk/v1alpha1
+kubebuilder:object:generate=true +groupName=disk.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=disk.routeros.sindrip.io +versionName=v1alpha1
cluster/dns/v1alpha1
+kubebuilder:object:generate=true +groupName=dns.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=dns.routeros.sindrip.io +versionName=v1alpha1
cluster/firewall/v1alpha1
+kubebuilder:object:generate=true +groupName=firewall.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=firewall.routeros.sindrip.io +versionName=v1alpha1
cluster/interface/v1alpha1
+kubebuilder:object:generate=true +groupName=interface.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=interface.routeros.sindrip.io +versionName=v1alpha1
cluster/ip/v1alpha1
+kubebuilder:object:generate=true +groupName=ip.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ip.routeros.sindrip.io +versionName=v1alpha1
cluster/ipv6/v1alpha1
+kubebuilder:object:generate=true +groupName=ipv6.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ipv6.routeros.sindrip.io +versionName=v1alpha1
cluster/move/v1alpha1
+kubebuilder:object:generate=true +groupName=move.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=move.routeros.sindrip.io +versionName=v1alpha1
cluster/ovpn/v1alpha1
+kubebuilder:object:generate=true +groupName=ovpn.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ovpn.routeros.sindrip.io +versionName=v1alpha1
cluster/ppp/v1alpha1
+kubebuilder:object:generate=true +groupName=ppp.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ppp.routeros.sindrip.io +versionName=v1alpha1
cluster/queue/v1alpha1
+kubebuilder:object:generate=true +groupName=queue.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=queue.routeros.sindrip.io +versionName=v1alpha1
cluster/radius/v1alpha1
+kubebuilder:object:generate=true +groupName=radius.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=radius.routeros.sindrip.io +versionName=v1alpha1
cluster/routeros/v1alpha1
+kubebuilder:object:generate=true +groupName=routeros.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=routeros.routeros.sindrip.io +versionName=v1alpha1
cluster/routing/v1alpha1
+kubebuilder:object:generate=true +groupName=routing.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=routing.routeros.sindrip.io +versionName=v1alpha1
cluster/snmp/v1alpha1
+kubebuilder:object:generate=true +groupName=snmp.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=snmp.routeros.sindrip.io +versionName=v1alpha1
cluster/system/v1alpha1
+kubebuilder:object:generate=true +groupName=system.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=system.routeros.sindrip.io +versionName=v1alpha1
cluster/tool/v1alpha1
+kubebuilder:object:generate=true +groupName=tool.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=tool.routeros.sindrip.io +versionName=v1alpha1
cluster/user/v1alpha1
+kubebuilder:object:generate=true +groupName=user.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=user.routeros.sindrip.io +versionName=v1alpha1
cluster/v1alpha1
Package v1alpha1 contains core resources of the RouterOS provider.
Package v1alpha1 contains core resources of the RouterOS provider.
cluster/v1beta1
Package v1beta1 contains core resources of the RouterOS provider.
Package v1beta1 contains core resources of the RouterOS provider.
cluster/wifi/v1alpha1
+kubebuilder:object:generate=true +groupName=wifi.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=wifi.routeros.sindrip.io +versionName=v1alpha1
cluster/wireguard/v1alpha1
+kubebuilder:object:generate=true +groupName=wireguard.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=wireguard.routeros.sindrip.io +versionName=v1alpha1
cluster/zerotier/v1alpha1
+kubebuilder:object:generate=true +groupName=zerotier.routeros.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=zerotier.routeros.sindrip.io +versionName=v1alpha1
namespaced
Package namespaced contains Kubernetes API for the provider.
Package namespaced contains Kubernetes API for the provider.
namespaced/bridge/v1alpha1
+kubebuilder:object:generate=true +groupName=bridge.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=bridge.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/capsman/v1alpha1
+kubebuilder:object:generate=true +groupName=capsman.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=capsman.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/certificate/v1alpha1
+kubebuilder:object:generate=true +groupName=certificate.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=certificate.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/container/v1alpha1
+kubebuilder:object:generate=true +groupName=container.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=container.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/dhcp/v1alpha1
+kubebuilder:object:generate=true +groupName=dhcp.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=dhcp.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/disk/v1alpha1
+kubebuilder:object:generate=true +groupName=disk.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=disk.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/dns/v1alpha1
+kubebuilder:object:generate=true +groupName=dns.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=dns.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/firewall/v1alpha1
+kubebuilder:object:generate=true +groupName=firewall.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=firewall.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/interface/v1alpha1
+kubebuilder:object:generate=true +groupName=interface.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=interface.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/ip/v1alpha1
+kubebuilder:object:generate=true +groupName=ip.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ip.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/ipv6/v1alpha1
+kubebuilder:object:generate=true +groupName=ipv6.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ipv6.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/move/v1alpha1
+kubebuilder:object:generate=true +groupName=move.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=move.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/ovpn/v1alpha1
+kubebuilder:object:generate=true +groupName=ovpn.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ovpn.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/ppp/v1alpha1
+kubebuilder:object:generate=true +groupName=ppp.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=ppp.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/queue/v1alpha1
+kubebuilder:object:generate=true +groupName=queue.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=queue.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/radius/v1alpha1
+kubebuilder:object:generate=true +groupName=radius.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=radius.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/routeros/v1alpha1
+kubebuilder:object:generate=true +groupName=routeros.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=routeros.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/routing/v1alpha1
+kubebuilder:object:generate=true +groupName=routing.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=routing.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/snmp/v1alpha1
+kubebuilder:object:generate=true +groupName=snmp.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=snmp.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/system/v1alpha1
+kubebuilder:object:generate=true +groupName=system.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=system.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/tool/v1alpha1
+kubebuilder:object:generate=true +groupName=tool.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=tool.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/user/v1alpha1
+kubebuilder:object:generate=true +groupName=user.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=user.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/v1alpha1
Package v1alpha1 contains core resources of the RouterOS provider.
Package v1alpha1 contains core resources of the RouterOS provider.
namespaced/v1beta1
Package v1beta1 contains core resources of the RouterOS provider.
Package v1beta1 contains core resources of the RouterOS provider.
namespaced/wifi/v1alpha1
+kubebuilder:object:generate=true +groupName=wifi.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=wifi.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/wireguard/v1alpha1
+kubebuilder:object:generate=true +groupName=wireguard.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=wireguard.routeros.m.sindrip.io +versionName=v1alpha1
namespaced/zerotier/v1alpha1
+kubebuilder:object:generate=true +groupName=zerotier.routeros.m.sindrip.io +versionName=v1alpha1
+kubebuilder:object:generate=true +groupName=zerotier.routeros.m.sindrip.io +versionName=v1alpha1
cmd
generator command
provider command
internal
version
Package version contains the version of this provider
Package version contains the version of this provider
rest module
routeros module
schema module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL