Configuring dynamic plugins Red Hat Developer Hub 1.4 Red Hat Customer Content Services

Commands:
argocd: appLocatorMethods: - type: 'config' instances: - name: argoInstance1 url: https://argoInstance1.com username: USD{ARGOCD_USERNAME} password: USD{ARGOCD_PASSWORD} - name: argoInstance2 url: https://argoInstance2.com username: USD{ARGOCD_USERNAME} password: USD{ARGOCD_PASSWORD}
annotations: # The label that Argo CD uses to fetch all the applications. The format to be used is label.key=label.value. For example, rht-gitops.com/janus-argocd=quarkus-app. argocd/app-selector: 'USD{ARGOCD_LABEL_SELECTOR}'
annotations: # The Argo CD instance name used in `app-config.yaml`. argocd/instance-name: 'USD{ARGOCD_INSTANCE}'
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/roadiehq-backstage-plugin-argo-cd-backend-dynamic disabled: false - package: ./dynamic-plugins/dist/backstage-community-plugin-redhat-argocd disabled: false
kubernetes: customResources: - group: 'argoproj.io' apiVersion: 'v1alpha1' plural: 'Rollouts' - group: 'argoproj.io' apiVersion: 'v1alpha1' plural: 'analysisruns'
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - argoproj.io resources: - rollouts - analysisruns verbs: - get - list
apply -f <your-clusterrole-file>.yaml
annotations: backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
annotations: backstage.io/kubernetes-namespace: <RESOURCE_NAMESPACE>
annotations: backstage.io/kubernetes-label-selector: 'app=my-app,component=front-end'
labels: backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
labels: app.kubernetes.io/instance: <GITOPS_APPLICATION_NAME>
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-community-plugin-jfrog-artifactory disabled: false
proxy: endpoints: '/jfrog-artifactory/api': target: http://<hostname>:8082 # or https://<customer>.jfrog.io headers: # Authorization: 'Bearer <YOUR TOKEN>' # Change to "false" in case of using a self-hosted Artifactory instance with a self-signed certificate secure: true
metadata: annotations: 'jfrog-artifactory/image-name': '<IMAGE-NAME>'
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-community-plugin-catalog-backend-module-keycloak-dynamic disabled: false
catalog: providers: keycloakOrg: default: # # highlight-add-start schedule: # optional; same options as in TaskScheduleDefinition # supports cron, ISO duration, "human duration" as used in code frequency: { minutes: 1 } # supports ISO duration, "human duration" as used in code timeout: { minutes: 1 } initialDelay: { seconds: 15 } # highlight-add-end
catalog: providers: keycloakOrg: default: # # highlight-add-start userQuerySize: 500 # Optional groupQuerySize: 250 # Optional # highlight-add-end
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-community-plugin-nexus-repository-manager disabled: false
proxy: '/nexus-repository-manager': target: 'https://<NEXUS_REPOSITORY_MANAGER_URL>' headers: X-Requested-With: 'XMLHttpRequest' # Uncomment the following line to access a private Nexus Repository Manager using a token # Authorization: 'Bearer <YOUR TOKEN>' changeOrigin: true # Change to "false" in case of using self hosted Nexus Repository Manager instance with a self-signed certificate secure: true
nexusRepositoryManager: # default path is `/nexus-repository-manager` proxyPath: /custom-path
nexusRepositoryManager: experimentalAnnotations: true
metadata: annotations: # insert the chosen annotations here # example nexus-repository-manager/docker.image-name: `<ORGANIZATION>/<REPOSITORY>`,
kubernetes: customResources: - group: 'tekton.dev' apiVersion: 'v1' plural: 'pipelineruns' - group: 'tekton.dev' apiVersion: 'v1' apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - "" resources: - pods/log verbs: - get - list - watch - apiGroups: - tekton.dev resources: - pipelineruns - taskruns verbs: - get - list
annotations: backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
annotations: backstage.io/kubernetes-namespace: <RESOURCE_NS>
annotations: janus-idp.io/tekton : <BACKSTAGE_ENTITY_NAME>
annotations: backstage.io/kubernetes-label-selector: 'app=my-app,component=front-end'
labels: backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-community-plugin-tekton disabled: false
auth: global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-community-plugin-topology disabled: false
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - route.openshift.io resources: - routes verbs: - get - list
kubernetes: customResources: - group: 'route.openshift.io' apiVersion: 'v1' plural: 'routes'
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - '' resources: - pods - pods/log verbs: - get - list - watch
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - tekton.dev resources: - pipelines - pipelineruns - taskruns verbs: - get - list
kubernetes: customResources: - group: 'tekton.dev' apiVersion: 'v1' plural: 'pipelines' - group: 'tekton.dev' apiVersion: 'v1' plural: 'pipelineruns' - group: 'tekton.dev' apiVersion: 'v1' plural: 'taskruns'
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - kubevirt.io resources: - virtualmachines - virtualmachineinstances verbs: - get - list
kubernetes: customResources: - group: 'kubevirt.io' apiVersion: 'v1' plural: 'virtualmachines' - group: 'kubevirt.io' apiVersion: 'v1' plural: 'virtualmachineinstances'
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: backstage-read-only rules: - apiGroups: - org.eclipse.che resources: - checlusters verbs: - get - list
kubernetes: customResources: - group: 'org.eclipse.che' apiVersion: 'v2' plural: 'checlusters'
annotations: app.openshift.io/vcs-uri: <GIT_REPO_URL>
annotations: app.openshift.io/vcs-ref: <GIT_REPO_BRANCH>
annotations: backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>
labels: backstage.io/kubernetes-id: <BACKSTAGE_ENTITY_NAME>`
annotations: backstage.io/kubernetes-namespace: <RESOURCE_NS>
annotations: backstage.io/kubernetes-label-selector: 'app=my-app,component=front-end'
annotations: backstage.io/kubernetes-label-selector: 'component in (<BACKSTAGE_ENTITY_NAME>,che)'
labels: component: che # add this label to your che cluster instance labels: component: <BACKSTAGE_ENTITY_NAME> # add this label to the other resources associated with your entity
labels: app.openshift.io/runtime: <RUNTIME_NAME>
labels: app.kubernetes.io/name: <RUNTIME_NAME>
labels: app.kubernetes.io/part-of: <GROUP_NAME>
annotations: app.openshift.io/connects-to: '[{"apiVersion": <RESOURCE_APIVERSION>,"kind": <RESOURCE_KIND>,"name": <RESOURCE_NAME>}]'
plugins: - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import-backend-dynamic disabled: false - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import disabled: false
p, role:default/bulk-import, bulk.import, use, allow g, user:default/ <your_user> , role:default/bulk-import
{ "actor": { "actorId": "user:default/myuser", "hostname": "localhost", "ip": "::1", "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" }, "eventName": "BulkImportFindAllOrganizations", "isAuditLog": true, "level": "info", "message": "'get /organizations' endpoint hit by user:default/myuser", "meta": {}, "plugin": "bulk-import", "request": { "body": {}, "method": "GET", "params": {}, "query": { "pagePerIntegration": "1", "sizePerIntegration": "5" }, "url": "/api/bulk-import/organizations?pagePerIntegration=1&sizePerIntegration=5" }, "response": { "status": 200 }, "service": "backstage", "stage": "completion", "status": "succeeded", "timestamp": "2024-08-26 16:41:02" }
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/backstage-community-plugin-scaffolder-backend-module-servicenow-dynamic disabled: false
servicenow: # The base url of the ServiceNow instance. baseUrl: USD{SERVICENOW_BASE_URL} # The username to use for authentication. username: USD{SERVICENOW_USERNAME} # The password to use for authentication. password: USD{SERVICENOW_PASSWORD}
// Create the BackendFeature export const customRootHttpServerFactory: BackendFeature = rootHttpRouterServiceFactory({ configure: ({ app, routes, middleware, logger }) => { logger.info( 'Using custom root HttpRouterServiceFactory configure function', ); app.use(middleware.helmet()); app.use(middleware.cors()); app.use(middleware.compression()); app.use(middleware.logging()); // Add a the custom middleware function before all // of the route handlers app.use(addTestHeaderMiddleware({ logger })); app.use(routes); app.use(middleware.notFound()); app.use(middleware.error()); }, }); // Export the BackendFeature as the default entrypoint export default customRootHttpServerFactory;