You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/end-user-guides/cloudfoundry.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,4 +13,4 @@ To realize the use case, you'll:
13
13
14
14
Additionally topics you can learn about:
15
15
16
-
-[Exporter Tool](/docs/crossplane-provider-cloudfoundry/docs/end-user-guides/import-resources-provider-cf) which helps you with exporting existing Cloud Foundry resources and importing them into your control plane
16
+
-[Exporter Tool](/docs/crossplane-provider-cloudfoundry/docs/end-user-guides/import-resources-provider-cf) which helps you with exporting existing Cloud Foundry resources and importing them into your control plane
@@ -306,4 +306,4 @@ We can use `enforcementPolicy` to control group assignment behavior:
306
306
307
307
### Error: "user with username `abc@example.com` does not exist"
308
308
309
-
If the user with the username/e-mail never logged in to your SAP Cloud Foundry environment, you will receive an error "user with username `abc@example.com` does not exist".
309
+
If the user with the username/e-mail never logged in to your SAP Cloud Foundry environment, you will receive an error "user with username `abc@example.com` does not exist".
Copy file name to clipboardExpand all lines: docs/end-user-guides/deploy-workload-provider-cf.mdx
+66-33Lines changed: 66 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,20 +8,20 @@ import Badge, { READY,IN_PREVIEW, CONCEPT, IN_DEV, RESTRICTION, NA } from "@site
8
8
9
9
# Deploy workload
10
10
11
-
Finally, we want to deploy workload into our CloudFoundry environment.
11
+
Finally, we want to deploy workload into our CloudFoundry environment.
12
12
13
-
Our sample application is a simple web application that uses `xsuaa` for authentication and `destination` service to connect to a backend system. The application is deployed as a docker image and exposed via a route.
13
+
Our sample application is a simple web application that uses `xsuaa` for authentication and `destination` service to connect to a backend system. The application is deployed as a docker image and exposed via a route.
14
14
15
15
To deploy our sample application, we can either directly orchestrate all aspects (routes, services, app etc) using the `CloudFoundry` provider or use the `Multi-target Application`*(MTA)* to deploy in a bundle.
Before we can deploy workload to Cloud Foundry, we need to first allocate **APPLICATION_RUNTIME** quota to our BTP `Subaccount`. We can use [`Entitlement`](https://doc.crds.dev/github.com/SAP/crossplane-provider-btp/account.btp.sap.crossplane.io/Entitlement/v1alpha1@v1.6.0) of the BTP provider for this.
21
+
Before we can deploy workload to Cloud Foundry, we need to first allocate **APPLICATION_RUNTIME** quota to our BTP `Subaccount`. We can use [`Entitlement`](https://doc.crds.dev/github.com/SAP/crossplane-provider-btp/account.btp.sap.crossplane.io/Entitlement/v1alpha1@v1.6.0) of the BTP provider for this.
This will allocate 2GB of memory to the Cloud Foundry runtime, and allows to create up to 20 routes and 100 service instances in your entire Cloud Foundry Organization. You may first distribute this quota among different `Spaces` using the `SpaceQuota` managed resource.
36
+
This will allocate 2GB of memory to the Cloud Foundry runtime, and allows to create up to 20 routes and 100 service instances in your entire Cloud Foundry Organization. You may first distribute this quota among different `Spaces` using the `SpaceQuota` managed resource.
37
37
38
38
39
39
## Direct deployment
40
40
41
-
In this approach, we orchestrate all resources required for our sample application directly using using the `CloudFoundry` provider.
42
-
41
+
In this approach, we orchestrate all resources required for our sample application directly using using the `CloudFoundry` provider.
Service instances are orchestrated using the `ServiceInstance` manages resources. All service instances are created in the orchestrated Space `my-space` we created in the previous step.
46
+
Service instances are orchestrated using the `ServiceInstance` manages resources. All service instances are created in the orchestrated Space `my-space` we created in the previous step.
47
47
48
48
49
49
```yaml title="Example: a destination service instance"
@@ -55,7 +55,7 @@ Service instances are orchestrated using the `ServiceInstance` manages resources
55
55
forProvider:
56
56
type: managed
57
57
name: my-destination-service
58
-
spaceRef:
58
+
spaceRef:
59
59
name: my-space
60
60
servicePlan:
61
61
offering: destination
@@ -85,10 +85,10 @@ Service instances are orchestrated using the `ServiceInstance` manages resources
85
85
}
86
86
```
87
87
#### Configure Service Parameters
88
-
Some service instances support configuration parameters, like the `xsuaa` service instance. You can provide these parameters in several ways:
88
+
Some service instances support configuration parameters, like the `xsuaa` service instance. You can provide these parameters in several ways:
Use `spec.forProvider.jsonParams` to provide the parameters as a JSON string.
91
+
Use `spec.forProvider.jsonParams` to provide the parameters as a JSON string.
92
92
93
93
```yaml title="Example: a xsuaa service instance with paramaters as JSON"
94
94
spec:
@@ -140,24 +140,57 @@ Some service instances support configuration parameters, like the `xsuaa` servic
140
140
</TabItem>
141
141
</Tabs>
142
142
143
-
:::note Service Parameter Drift Detection
143
+
:::note Service Parameter Drift Detection
144
144
145
-
Some managed service instances, *for example `xsuaa`*, do not allow fetching the service parameters after the service instance is created.
146
-
In such cases, if service parameters are manually updated via the Cockpit or any other ways, the provider cannot detect the change and will do nothing.
145
+
Some managed service instances, *for example `xsuaa`*, do not allow fetching the service parameters after the service instance is created.
146
+
In such cases, if service parameters are manually updated via the Cockpit or any other ways, the provider cannot detect the change and will do nothing.
147
147
148
148
**Whenever service parameters are modified in the CR, the provider will apply the changes as usual**.
149
149
150
150
:::
151
151
152
+
#### Sharing service instances
153
+
154
+
Some service offerings support [service instance sharing](https://docs.cloudfoundry.org/devguide/services/sharing-instances.html). One example is `alert-notification`.
155
+
156
+
If you have the CF CLI and jq installed you can check if a service offering supports service instance sharing with the following command: `cf curl /v3/service_offerings | jq '.resources[] | select(.name == "<service-offering-name>") | .shareable'`
157
+
158
+
The space the service instance was initially created in and all spaces it is shared with can be in different orgs, but must be in the same landscape.
159
+
160
+
The user referenced in the [ProviderConfig](./configure-provider-cf.mdx#create-providerconfig) must have the `SpaceDeveloper` role in the space the service instance was initially created in and in all spaces it is shared with.
161
+
162
+
```yaml title="Example: a shared service instance"
163
+
apiVersion: cloudfoundry.crossplane.io/v1alpha1
164
+
kind: ServiceInstance
165
+
metadata:
166
+
name: my-alert-notification-service
167
+
spec:
168
+
forProvider:
169
+
type: managed
170
+
name: my-alert-notification-service
171
+
spaceRef:
172
+
name: my-space
173
+
servicePlan:
174
+
offering: alert-notification
175
+
plan: standard
176
+
sharedSpaces:
177
+
- spaceRef:
178
+
name: my-other-space
179
+
```
180
+
181
+
:::warning
182
+
Unsharing a service instance deletes all service bindings to apps in the spaces it was shared with. This might cause apps to fail.
183
+
:::
184
+
152
185
#### Create Service Keys
153
186
154
187
`ServiceKeys` are created to give external applications access to the service instance.
155
188
156
189
They are credentials for **direct communication with specific service instances within the Cloud Foundry Environment**.
157
190
158
191
```yaml title="Example: a service key"
159
-
apiVersion: cloudfoundry.crossplane.io/v1alpha1
160
-
kind: ServiceCredentialBinding
192
+
apiVersion: cloudfoundry.crossplane.io/v1alpha1
193
+
kind: ServiceCredentialBinding
161
194
metadata:
162
195
name: my-service-key
163
196
spec:
@@ -181,8 +214,8 @@ Service keys (`ServiceCredentialBinding` of type `key`) support automatic key ro
A route is a unique address/URL that enables our end users to reach our sample applications.
276
+
A route is a unique address/URL that enables our end users to reach our sample applications.
244
277
245
-
We first choose a `Domain` in which we want to create the route. Here we use the shared HTTP domain `cfapps.eu12.hana.ondemand.com`. This domain is deployed by default in the BTP Cloud Foundry environment.
278
+
We first choose a `Domain` in which we want to create the route. Here we use the shared HTTP domain `cfapps.eu12.hana.ondemand.com`. This domain is deployed by default in the BTP Cloud Foundry environment.
246
279
247
280
```yaml title="Example:import cfapps domain"
248
281
apiVersion: cloudfoundry.crossplane.io/v1alpha1
@@ -252,14 +285,14 @@ metadata:
252
285
name: cfapps-domain
253
286
spec:
254
287
forProvider:
255
-
name: cfapps.eu12.hana.ondemand.com
288
+
name: cfapps.eu12.hana.ondemand.com
256
289
orgRef:
257
290
name: my-org
258
291
internal: false
259
292
260
293
```
261
294
262
-
We then create a route with the given `host` and `path` in the `cfapp-domain`. The resulting URL will be `my-app.cfapps.eu12.hana.ondemand.com/hello`.
295
+
We then create a route with the given `host` and `path` in the `cfapp-domain`. The resulting URL will be `my-app.cfapps.eu12.hana.ondemand.com/hello`.
263
296
264
297
```yaml title="Example: create my application route"
265
298
apiVersion: cloudfoundry.crossplane.io/v1alpha1
@@ -283,16 +316,16 @@ spec:
283
316
:::note Route with the same URL already exists
284
317
Routes are unique URL/address . If a Route with a URL exist in another Space or Organization, you cannot create a Route with the same URL.
285
318
286
-
Route subjects to quota limit set on the respective Space. If not set, the Subaccount quota limit applies.
319
+
Route subjects to quota limit set on the respective Space. If not set, the Subaccount quota limit applies.
287
320
:::
288
321
289
-
Currently, you can only create Routes under the default landscape domain `cfapps.<region>.hana.ondemand.com`.
290
-
It depends on the region of your BTP Subaccount, in the `eu10` region, the default domain is `cfapps.eu10.hana.ondemand.com`.
322
+
Currently, you can only create Routes under the default landscape domain `cfapps.<region>.hana.ondemand.com`.
323
+
It depends on the region of your BTP Subaccount, in the `eu10` region, the default domain is `cfapps.eu10.hana.ondemand.com`.
291
324
Use `spec.forProvider.domain.name` to specify the domain name directly.
The `App` resource lets you deploy a Docker image as an app.
328
+
The `App` resource lets you deploy a Docker image as an app.
296
329
297
330
```yaml title="examples/app.yaml"
298
331
apiVersion: cloudfoundry.crossplane.io/v1alpha1
@@ -399,15 +432,15 @@ For `Apps` to consume `ServiceInstances` you can either bind them **using the de
399
432
<details>
400
433
<summary>How do I bind non-cloudfoundry service instances (e.g. using BTP Service Operator)</summary>
401
434
402
-
Let's assume we created [`ServiceInstance`](https://doc.crds.dev/github.com/SAP/crossplane-provider-btp/account.btp.sap.crossplane.io/ServiceInstance/v1alpha1@v1.6.0) and [`ServiceBinding`](https://doc.crds.dev/github.com/SAP/crossplane-provider-btp/account.btp.sap.crossplane.io/ServiceBinding/v1alpha1@v1.6.0).
435
+
Let's assume we created [`ServiceInstance`](https://doc.crds.dev/github.com/SAP/crossplane-provider-btp/account.btp.sap.crossplane.io/ServiceInstance/v1alpha1@v1.6.0) and [`ServiceBinding`](https://doc.crds.dev/github.com/SAP/crossplane-provider-btp/account.btp.sap.crossplane.io/ServiceBinding/v1alpha1@v1.6.0).
403
436
Note that this service is created outside of Cloud Foundry Environment.
404
437
405
438
To bind it to a Cloud Foundry `App`, we first create a Cloud Foundry `ServiceInstance` of type `user-provided` called `my-ups`. It reads from the `Secret` of the `ServiceBinding` we created using BTP Service Operator.
406
439
You can use `spec.forProvider.serviceBinding` in `App` to then bind `my-ups`.
407
440
Effectively this delivers `ServiceBinding` to the `VCAP_SERVICES` environment variables of the app.
408
441
409
442
```yaml title="examples/ups-svc.yaml"
410
-
apiVersion: cloudfoundry.crossplane.io/v1alpha1
443
+
apiVersion: cloudfoundry.crossplane.io/v1alpha1
411
444
kind: ServiceInstance
412
445
metadata:
413
446
namespace: default
@@ -418,19 +451,19 @@ For `Apps` to consume `ServiceInstances` you can either bind them **using the de
name: svc-secret ## Secret created from ServiceBinding via BTP Service Operator
427
460
namespace: default
428
461
```
429
462
</details>
430
463
431
464
## Multi-target Application
432
465
433
-
In this scenario all aspects of the deployment are **orchestrated by the Multi-target Application _`MTA`_ approach** which spans over several tool and offers one application lifecycle.
466
+
In this scenario all aspects of the deployment are **orchestrated by the Multi-target Application _`MTA`_ approach** which spans over several tool and offers one application lifecycle.
434
467
435
468
You can learn more about the `MTA` build tool [here](https://help.sap.com/docs/btp/sap-business-technology-platform/multitarget-applications-in-cloud-foundry-environment).
You can use any CloudFoundry landscape, orchestrated or manually created, and use traditional pipelines to deploy your [`MTA` or Non-`MTA` workload](https://www.project-piper.io/steps/cloudFoundryDeploy/).
476
+
You can use any CloudFoundry landscape, orchestrated or manually created, and use traditional pipelines to deploy your [`MTA` or Non-`MTA` workload](https://www.project-piper.io/steps/cloudFoundryDeploy/).
444
477
445
478
446
479
@@ -452,4 +485,4 @@ Set it as `SpaceDeveloper` or `SpaceManager` role in the respective `Space` and
When orchestrating `Routes`, ensure that you allocated route quota to your `Organization` using [`APPLICATION_RUNTIME Entitlement`](#prerequisites-application-runtime-quota) on `Subaccount` level.
488
+
When orchestrating `Routes`, ensure that you allocated route quota to your `Organization` using [`APPLICATION_RUNTIME Entitlement`](#prerequisites-application-runtime-quota) on `Subaccount` level.
Copy file name to clipboardExpand all lines: docs/end-user-guides/order-cf-environment.mdx
+4-8Lines changed: 4 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,10 +10,6 @@ import Badge, { READY,IN_PREVIEW, CONCEPT, IN_DEV, RESTRICTION, NA } from "@site
10
10
11
11
In this guide, we will get familiar with the fundamentals of creating a managed `CloudFoundryEnvironment` in a BTP `Subaccount`.
12
12
13
-
:::note
14
-
Are you a platform operator or administrator? Feel free to check out the [OpenMCP project](https://openmcp-project.github.io/docs/). It helps organizations enable more teams to use Crossplane by providing a managed control plane as a service.
15
-
:::
16
-
17
13
## 🚧 Prerequisites
18
14
19
15
- You have a running control plane.
@@ -34,14 +30,14 @@ Now, we have everything in place to enable `CloudFoundry` in our selected `Subac
name: cf-environment-secret # Secret containing connection details including apiEnpoint of the created cloudfoundry environment.
49
+
name: cf-environment-secret # Secret containing connection details including apiEnpoint of the created cloudfoundry environment.
54
50
namespace: default
55
51
```
56
52
@@ -74,4 +70,4 @@ Once the resource is created, you can find the connection details in the `Secret
74
70
## FAQs
75
71
### 401, User Authentication failed: LOCKED_OTP_CODE
76
72
77
-
The required services can only be consumed by technical users. Please revisit our [configuration guide](/docs/crossplane-provider-btp/docs/end-user-guides/setup/configure-provider-btp) page and switch to a non personal user.
73
+
The required services can only be consumed by technical users. Please revisit our [configuration guide](/docs/crossplane-provider-btp/docs/end-user-guides/setup/configure-provider-btp) page and switch to a non personal user.
0 commit comments