-
Notifications
You must be signed in to change notification settings - Fork 67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature feedback: service-access #160
Comments
@aegershman Not ungrateful :) Valid feedback based on the user experience of how this is currently designed. Let me think about how we can update using the feedback above. Stay tuned.... |
Here's the format that I am planning to more forward with in cf-mgmt.yml config file.
Unless I'm missing something I believe with this format I can accomplish all of the scenarios above. Let me know if you have any questions. Will be working through how to migrate the current format of service-access away from in each org.yml file. |
Right on, will get some coworker feedback + will think more on this later today & next few days 👍 |
I converted some of our existing service-access config over to the proposed syntax and came away with feedback. I have a bit more after this, will include in later comment. also, goes w/o saying, but I'm not trying to commandeer the use-case or be naggy, fully respect the decision on direct you take, etc., so with that said here's some takeaways I have: broker ambiguityas per cf enable-service-access SERVICE [-b BROKER] [-p PLAN] [-o ORG]
-b Enable access to a service from a particular service broker. Required when service name is ambiguous presumably this could be solved by making the broker an optional field - service: "p.mysql-v2"
broker: dedicated-mysql-broker
plan: "db-small-single-node"
orgs:
- myorg1
- myorg2
|
I think it's worth reassessing the structure of the Having many individual entries will get cluttered. For example, here's the result of broker: app-autoscaler
service plan access orgs
app-autoscaler standard all
broker: aws-services-broker
service plan access orgs
aws-dynamodb standard limited myorg1
aws-rds-aurora basic limited myorg1
aws-rds-aurora enterprise limited myorg1
aws-rds-aurora premium limited myorg1
aws-rds-aurora standard limited myorg1
aws-rds-mariadb basic limited myorg1
aws-rds-mariadb enterprise limited myorg1
aws-rds-mariadb premium limited myorg1
aws-rds-mariadb standard limited myorg1
aws-rds-mysql basic limited myorg1
aws-rds-mysql enterprise limited myorg1
aws-rds-mysql premium limited myorg1
aws-rds-mysql standard limited myorg1
aws-rds-oracle basic limited myorg1
aws-rds-oracle enterprise limited myorg1
aws-rds-oracle premium limited myorg1
aws-rds-oracle standard limited myorg1
aws-rds-postgres basic limited myorg1
aws-rds-postgres enterprise limited myorg1
aws-rds-postgres premium limited myorg1
aws-rds-postgres standard limited myorg1
aws-rds-sqlserver basic limited myorg1
aws-rds-sqlserver enterprise limited myorg1
aws-rds-sqlserver premium limited myorg1
aws-rds-sqlserver standard limited myorg1
aws-s3 standard limited myorg1
aws-sqs standard limited myorg1
broker: dedicated-mysql-broker
service plan access orgs
p.mysql db-large all
p.mysql db-medium all
p.mysql db-small all
p.mysql db-xlarge all
p.mysql leader-follower all
broker: identity-service-broker
service plan access orgs
p-identity aeg-dev limited myorg2
p-identity uaa limited myorg1
broker: metrics-forwarder
service plan access orgs
metrics-forwarder unlimited all
broker: newrelic-broker
service plan access orgs
newrelic xyz-sandbox none
broker: nfsbroker
service plan access orgs
nfs-legacy Existing limited system,yugabyte_service_broker-org
nfs Existing limited system,yugabyte_service_broker-org
broker: p-rabbitmq
service plan access orgs
p-rabbitmq standard limited p-spring-cloud-services,system
broker: p-redis
service plan access orgs
p-redis shared-vm none
broker: p-spring-cloud-services
service plan access orgs
p-circuit-breaker-dashboard standard limited myorg2,system
p-config-server standard all
p-service-registry standard all
broker: rabbitmq-odb
service plan access orgs
p.rabbitmq clustered-3.7 all
p.rabbitmq single-node-3.7 all
broker: redis-odb
service plan access orgs
p.redis cache-medium all
p.redis cache-small all
broker: scheduler-for-pcf
service plan access orgs
scheduler-for-pcf standard all
broker: yugabyte_service_broker
service plan access orgs
yugabyte-db large limited myorg1
yugabyte-db medium limited myorg1
yugabyte-db small limited myorg1
yugabyte-db x-large limited myorg1
yugabyte-db x-small limited myorg1 As you can see there are a lot of plans and services. Let's hone in on the the In order to make all the access:
- service: aws-dynamodb
orgs:
- myorg1
- service: aws-rds-aurora
orgs:
- myorg1
- service: aws-rds-mariadb
orgs:
- myorg1
- service: aws-rds-mysql
orgs:
- myorg1
- service: aws-rds-oracle
orgs:
- myorg1
- service: aws-rds-postgres
orgs:
- myorg1
- service: azure-servicebus
orgs:
- myorg1
- service: aws-rds-sqlserver
orgs:
- myorg1
- service: aws-s3
orgs:
- myorg1
- service: aws-sqs
orgs:
- myorg1 And again, when we need to explicitly declare access:
- service: aws-dynamodb
orgs:
- myorg1
# aws-rds-aurora
- service: aws-rds-aurora
plan: basic
orgs:
- myorg1
- service: aws-rds-aurora
plan: enterprise
orgs:
- myorg1
- service: aws-rds-aurora
plan: premium
disabled: true
- service: aws-rds-aurora
plan: standard
orgs:
- myorg1
# aws-rds-mariadb
- service: aws-rds-mariadb
plan: basic
orgs:
- myorg1
- service: aws-rds-mariadb
plan: enterprise
orgs:
- myorg1
- service: aws-rds-mariadb
plan: premium
disabled: true
- service: aws-rds-mariadb
plan: standard
orgs:
- myorg1
# aws-rds-mysql
- service: aws-rds-mysql
plan: basic
orgs:
- myorg1
- service: aws-rds-mysql
plan: enterprise
orgs:
- myorg1
- service: aws-rds-mysql
plan: premium
disabled: true
- service: aws-rds-mysql
plan: standard
orgs:
- myorg1
# aws-rds-oracle
- service: aws-rds-oracle
plan: basic
orgs:
- myorg1
- service: aws-rds-oracle
plan: enterprise
orgs:
- myorg1
- service: aws-rds-oracle
plan: premium
disabled: true
- service: aws-rds-oracle
plan: standard
orgs:
- myorg1
# aws-rds-postgres
- service: aws-rds-postgres
plan: basic
orgs:
- myorg1
- service: aws-rds-postgres
plan: enterprise
orgs:
- myorg1
- service: aws-rds-postgres
plan: premium
disabled: true
- service: aws-rds-postgres
plan: standard
orgs:
- myorg1
# aws-rds-sqlserver
- service: aws-rds-sqlserver
plan: basic
orgs:
- myorg1
- service: aws-rds-sqlserver
plan: enterprise
orgs:
- myorg1
- service: aws-rds-sqlserver
plan: premium
disabled: true
- service: aws-rds-sqlserver
plan: standard
orgs:
- myorg1
- service: aws-s3
orgs:
- myorg1
- service: aws-sqs
orgs:
- myorg1 This is demoing the config for only this one broker. This is pretty intense, in my opinion. In a comment below I'm about going to workshop out some ideas, so bare with me. Unclear if this is the best model, how feasible it is to implement, not trying to impose, etc. Just sharing. (more thoughts on the way, am writing them up again--) |
last one: Is there benefit to consolidating the model to have using the access:
- service: aws-dynamodb
orgs:
- myorg1
# aws-rds-aurora
- service: aws-rds-aurora
plans:
- plan: basic
orgs:
- myorg1
- plan: enterprise
orgs:
- myorg1
- plan: premium
disabled: true
- plan: standard
orgs:
- myorg1
# aws-rds-mariadb
- service: aws-rds-mariadb
plans:
- plan: basic
orgs:
- myorg1
- plan: enterprise
orgs:
- myorg1
- plan: premium
disabled: true
- plan: standard
orgs:
- myorg1
# aws-rds-mysql
- service: aws-rds-mysql
plans:
- plan: basic
orgs:
- myorg1
- plan: enterprise
orgs:
- myorg1
- plan: premium
disabled: true
- plan: standard
orgs:
- myorg1
# aws-rds-oracle
- service: aws-rds-oracle
plans:
- plan: basic
orgs:
- myorg1
- plan: enterprise
orgs:
- myorg1
- plan: premium
disabled: true
- plan: standard
orgs:
- myorg1
# aws-rds-postgres
- service: aws-rds-postgres
plans:
- plan: basic
orgs:
- myorg1
- plan: enterprise
orgs:
- myorg1
- plan: premium
disabled: true
- plan: standard
orgs:
- myorg1
# aws-rds-sqlserver
- service: aws-rds-sqlserver
plans:
- plan: basic
orgs:
- myorg1
- plan: enterprise
orgs:
- myorg1
- plan: premium
disabled: true
- plan: standard
orgs:
- myorg1
- service: aws-s3
orgs:
- myorg1
- service: aws-sqs
orgs:
- myorg1 So not perfect, but we do have fewer lines of code && fewer top-level keys in the more alternative struct ideasAs was said in a comment above, if you want to do something like "enable ALL plans of a service to everyone, EXCEPT for a few select limiting rules-- for example, "make all mysql plans available to everyone, EXCEPT only make Assuming the above structure, what if there were a key for something like That way, instead of this: - service: "p.mysql-v2"
plans:
- plan: db-small
- plan: db-medium
- plan: db-large
- plan: db-pretty-large-but-not-too-large
- plan: db-galera-small
- plan: db-galera-medium
- plan: db-galera-large
- plan: db-very-expensive
disabled: true
- plan: db-small-single-node
orgs:
- myorg1
- myorg2 You could do this: # I'm going to come back to this example down below
- service: "p.mysql-v2"
enable-all-first: true
plans:
- plan: db-very-expensive
disabled: true
- plan: db-small-single-node
orgs:
- myorg1
- myorg2 consolidating the model under
|
I definitely think this should emulate the how service-access is viewed. So agree need to introduce the broker as a level of organization and see how that can clean up the amount of clutter. Thanks for the feedback I'll experiment with a few options and circle back. |
@aegershman Here's what I have come up with. Wanting to see if this covers the scenarios and if this UX seems reasonable. All these configs are in
which is equivalent to the following
And example of multiple brokers, services to see configuration will look.
Thanks in advance for the feedback. Been helpful to walk through the scenarios. Trying to balance ease of use vs |
Give me just a little bit to review this w/ coworkers + mock out what it would be like for our current usage, will get back to you ASAP. Thanks again 👍 |
@calebwashburn i think this has a lot of potential. For an initial step this would solve a lot of the issues that @aegershman and myself have with managing service access. For an initial first go I think this would work and after using it in practice we would know more what could be refined. |
@calebwashburn also I don't want to put you in a position similar to the first implementation of Not trying to tell you how to run your product, just don't want to be whiny or put your features in limbo |
I proposed this idea back in #84, you graciously expanded & implemented it, and now, like a brat, I don't use the feature; I'd like to give some usage feedback.
concerns with cf-mgmt workflow:
I can't selective disable one service/service-plan or selectively re-enable it for specific orgs without configuring service access settings for every other org.
For example, in order to selectively-enable the "p.mysql" broker's "cdr-double-xl" plan for a limited number of orgs, I have to "affirm" access for every single org for all the other service plans except "cdr-double-xl", and then only the selected orgs which I want to give access would have "cdr-double-xl" listed.
This makes managing service access a bit unruly, and requires updating every org if a new service broker or service plan is added, changed, or removed.
This is also problematic because the blanket "disable service access" including orgs which aren't managed by cf-mgmt. For example, I have the
system
org whitelisted, so I don't have aconfig/system
definition for it. So when I useservice_access
for other orgs, it disables access for all orgs first, includingsystem
, rendering all services insystem
unavailable.current usage
Currently we use a pipeline called
cf-service-access-mgmt
using the cf-cli-resource. Here's a basic snippet from ourprod
foundation:This pipeline works in a two-step flow:
This works well because I can selectively disable a single plan and re-enable the plan for given orgs, while simultaneously leaving other plans of the service instance alone. So for example, I can disable "cdr-double-xl" in "p.mysql", but that leaves the "db-xlarge", "db-large", etc. plans completely untouched from the global defaults.
ideas
We need an ability to disable specific service brokers or service plans for everyone, and selectively enable them for a few orgs. For everything else we don't explicitly configure, we prefer it to be untouched.
Therefore, it could be beneficial to have a centralized
serviceAccess.yml
which looks similar to the pipeline above, wheredisable:
andenable:
blocks can be defined. I made this up in a few minutes, so I really haven't thought through the implications yet.Don't mean to sound ungrateful or anything, but any thoughts?
The text was updated successfully, but these errors were encountered: