Hi all,

I have finished working on the plugin and have submitted a PR which is 
currently waiting on workflow approval.

https://github.com/apache/cloudstack/pull/9748

One part of my changes that I am a little unsure of relates to maven edits to 
pom.xml. Please let me know if something looks amiss in that area.

Thanks,

Tom.

> On Sep 21, 2024, at 17:21, Tom O'Dowd <tpod...@cloudian.com> wrote:
> 
> Hi all,
> 
> I’ve been quietly working on implementing a Cloudian (an S3 Object Storage 
> Vendor) plugin for the new Object Storage Framework in CloudStack. I’m 
> getting there but I have some questions. If you are reading this and don’t 
> have all the answers but know some of them or have an opinion on some of it, 
> let me know.
> 
> Firstly, I’m using the following mapping currently.
> 
> CloudStack Domain is mapped to a HyperStore Group.
> CloudStack Account is mapped to a HyperStore User (in the domain appropriate 
> group)
> CloudStack Projects will probably be automatically mapped to HyperStore Users 
> also (haven’t tried it yet).
> 
> We have 3 server endpoints to manage (for this plugin)
> 1. The Admin API endpoint
> 2. An S3 service endpoint
> 3. An IAM service endpoint
> 
> I plan to look at changing the “Add new object storage” UI to accept those 3 
> different endpoints if Cloudian is choosen as the provider. I haven’t looked 
> into that yet.
> 
> The Object Storage “url” will be the Admin API endpoint. I’ll probably add 
> the other endpoint urls to the “details” Map similar to how the  accesskey 
> and secretkey are set already. I think this should work. I’ll probably get to 
> this part next week.
> 
> I am thinking that the main idea for this plugin is to have all bucket 
> management (creation and deletion in particular) done from the CloudStack UI. 
> I say this because, when you look at the “Details” UI element for a bucket, 
> you can find the Access Key and Secret Key for that bucket there. If you add 
> those credentials to a 3rd party s3 application etc, then it is possible to 
> create other buckets that CloudStack will not know about or manage under that 
> user account. As this seems wrong to me, I am planning on creating an IAM 
> user with a policy that grants bucket and object actions except for 
> createBucket and deleteBucket. The IAM user credentials will then be 
> displayed instead of the Root User credentials. The Root user credentials 
> will be used by the plugin itself to manage the bucket. In this manner, Users 
> created by CloudStack can only create and delete buckets via the CloudStack 
> UI.
> 
> I don’t see anywhere to update the credentials associated with the 
> ObjectStorage providers in case they change or get rotated?
> 
> Right now I have the following credentials:
> ADMIN API - user/password combination
> Each HyperStore Account - Root User Credentials (hidden from user but used by 
> plugin)
> Each HyperStore Account - IAM User with Restricted Credentials -> visible as 
> part of Bucket “Details"
> 
> I noticed that if there are 2 or more object storages configured and one of 
> them has an exception when collecting bucket usage stats, then the other one 
> can be skipped. I have a fix for this coming also.
> 
> One other thing that I have done differently is the “public” bucket policy 
> option. Minio and Ceph currently enable public bucket listing (index of 
> objects in the bucket). I have only enabled GetObject on the bucket’s 
> objects. I could enable the same as Minio and Ceph but I think it is over 
> permissive. I think the developer of Ceph just copied what Minio was doing so 
> I figured I’d ask.
> 
> Another difference that I noticed is that Minio has CORS enabled by default 
> on it's buckets. This seems to be required for the S3 Javascript browser 
> built into CloudStack. By default, Cloudian does not enable CORS (similar to 
> AWS). I plan to enable it as part of the createBucket API so that the 
> CloudStack browser functionality also works but I am wondering how to set the 
> Allowed Origin. Mino uses “*” allowing any Origin. I have not checked Ceph 
> but there is nothing explicity done in the code. Do you think using “*” is 
> ok? If not, I’m currently stuck for where to get the correct setting for 
> Origin given that there could be many management servers. Also there is no 
> place in the UI to manage this right now should the origins change. So maybe 
> “*” is the right direction here.
> 
> Where should documentation regarding this go? I think an administrator would 
> like to know how for the different providers types the Accounts are mapped to 
> the Storage etc.
> 
> Things I am not going to fix in my first PR (but should be fixed):
> 
> 1. INFO level logging currently dumps S3 credentials in the log file. This 
> happens in a few places. Just look for “secretkey”. This should be addressed 
> so as not to log clear text “passwords".
> 
> 2. The secret key is visible in the Bucket “Details” page. This should 
> possibly be hidden with a click to “copy” type browser action in place.
> 
> Thanks,
> 
> Tom.
> 
>> On Sep 11, 2024, at 17:17, Tom O'Dowd <tpod...@cloudian.com> wrote:
>> 
>> Sorry. answering my own question again. I found I could delete from the 
>> object_store table in the cloud database directly so that works for me right 
>> now rather than dropping everything.
>> 
>> One thing that I have noticed about the UI is that the secret key is 
>> “displayed” and “remembered” by the browser when configuring a new object 
>> storage. This should probably behave more like a password field where you 
>> cannot see the value normally and the browser doesn’t remember previously 
>> used values.
>> 
>> <Screenshot 2024-09-11 at 17.07.15.png>
>> 
>> Tom.
>> 
>>> On Sep 11, 2024, at 16:56, Tom O'Dowd <tpod...@cloudian.com> wrote:
>>> 
>>> Hi guys,
>>> 
>>> I’ve started working on the Object Storage plugin. One quick question which 
>>> I can’t find yet in the docs… 
>>> 
>>> Once I have added an object store as the admin user, how do I remove it? 
>>> ie, I just want to blow away the configuration for now so I can try re-add 
>>> it repeatedly as I fix things? Maybe the opposite of deploydb will do?
>>> 
>>> Thanks,
>>> 
>>> Tom.
>>> 
>>>> On Sep 6, 2024, at 18:55, Rohit Yadav <rohit.ya...@shapeblue.com> wrote:
>>>> 
>>>> Hi Tom,
>>>> 
>>>> In addition to what has been answered and what you've found, here are some 
>>>> useful links for reference:
>>>> 
>>>> https://github.com/shapeblue/hackerbook/tree/main (self-learning dev 
>>>> material)
>>>> https://github.com/shapeblue/hackerbook/blob/main/2-dev.md#contributing-to-cloudstack
>>>> https://github.com/shapeblue/mbx (local CI/dev-test setup)
>>>> https://github.com/apache/cloudstack/commit/c3f0d14d31583fdf2570de2633db5c87a0f08fa4
>>>>  (learn from new and existing plugins as reference implementation)
>>>> https://github.com/apache/cloudstack/tree/main/plugins/storage/object/minio
>>>>  (original minio plugin for reference)
>>>> 
>>>> 
>>>> Regards.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> ________________________________
>>>> From: Tom O'Dowd <tpod...@cloudian.com.INVALID>
>>>> Sent: Friday, September 6, 2024 14:37
>>>> To: dev@cloudstack.apache.org <dev@cloudstack.apache.org>
>>>> Subject: Re: Object Storage Framework integration for Cloudian HyperStore
>>>> 
>>>> Sorry for the noise. I answered my own question (or rather I found a page 
>>>> that did): https://cloudstack.apache.org/developers/
>>>> 
>>>> Thanks,
>>>> 
>>>> Tom.
>>>> 
>>>>> On Sep 6, 2024, at 17:06, Tom O'Dowd <tpod...@cloudian.com> wrote:
>>>>> 
>>>>> Hi Daan,
>>>>> 
>>>>> I have made some progress. I have got CloudStack running on Ubuntu 24.04 
>>>>> now. I have installed Minio and configurated it out as the Object Storage 
>>>>> Provider to understand how it being used from an Admin and Regular user’s 
>>>>> perspective. Additionally, I have also enabled the existing Cloudian 
>>>>> Plugin and tried that out to ensure that it's all working also.
>>>>> 
>>>>> There is one small item that I would like to fix in the existing plugin 
>>>>> relating to a path change in the default HyperStore URL that the SSO 
>>>>> uses. That’s just a string change. Additionally, we have moved away from 
>>>>> Puppet in recent HyperStore versions for configuration management and I’d 
>>>>> like to update the documentation specific to that point. My question is 
>>>>> which branch I should use as a base for my PRs for both cloudstack and 
>>>>> cloudstack-documentation.
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> Tom.
>>>>> 
>>>>>> On Sep 3, 2024, at 17:38, Daan Hoogland <daan.hoogl...@gmail.com> wrote:
>>>>>> 
>>>>>> Tom,
>>>>>> You are welcome to submit a PR and we'll happily review it and help you
>>>>>> tackle problems. The framework is there to use and adjust to your needs. 
>>>>>> As
>>>>>> for the API, what level of stability do you require? I expect some 
>>>>>> changes
>>>>>> on behalf of you if you are serious about implementing it. The minio is a
>>>>>> PoC implementation and at least a ceph one is underway.
>>>>>> 
>>>>>> On Tue, Sep 3, 2024 at 9:59 AM Tom O'Dowd <tpod...@cloudian.com.invalid>
>>>>>> wrote:
>>>>>> 
>>>>>>> Hi all,
>>>>>>> 
>>>>>>> We (Cloudian) have been getting some inquiries requesting a new Cloudian
>>>>>>> HyperStore plugin to work with CloudStacks new Object Storage 
>>>>>>> Framework. We
>>>>>>> currently have a different CloudStack plugin which adds integration 
>>>>>>> between
>>>>>>> the CloudStack UI and our UI that works for both admin and users as 
>>>>>>> well as
>>>>>>> providing secondary storage. I’ve been trying to find out more 
>>>>>>> information
>>>>>>> regarding the new Object Storage Framework and see there is a Minio 
>>>>>>> plugin
>>>>>>> and a simulator plugin. I’ve also just checked out the git repo and have
>>>>>>> found the relevant code.  Is the API stable at this point and are you
>>>>>>> accepting new plugin contributions? Can I just implement the same base
>>>>>>> objects that the Minio plugin is implementing in order to get our own
>>>>>>> plugin working?
>>>>>>> 
>>>>>>> I notice in the “Add Object Storage” UI, there are fields:
>>>>>>> 
>>>>>>> Name
>>>>>>> Provider
>>>>>>> URL
>>>>>>> Access key
>>>>>>> Secret key
>>>>>>> 
>>>>>>> I think that we would use an https URL, but some installations would
>>>>>>> probably have a self-signed cert so they might need the option to skip
>>>>>>> validation. Didn’t check how this was working with Minio yet. 
>>>>>>> Currently, we
>>>>>>> do not use an access/secret key to connect to the administration API but
>>>>>>> rather a username and password. Once connected, this should be able to
>>>>>>> allocate users to match CloudStack accounts. I’d need to look at what
>>>>>>> mappings to use there. The users should have Access/Secret keys so I 
>>>>>>> would
>>>>>>> expect all of the S3 bucket browser stuff will just work once its all
>>>>>>> connected.
>>>>>>> 
>>>>>>> Development wise, I have followed the “Developers Guide” under
>>>>>>> https://docs.cloudstack.apache.org/en/latest/developersguide/developer_guide.html#prerequisites
>>>>>>> and got as far as connecting to the management server without the
>>>>>>> simulator. I’m currently running on Rocky8. I’m wondering if I’m going 
>>>>>>> to
>>>>>>> run into trouble on this OS and if I should switch to Ubuntu 24.04 
>>>>>>> which it
>>>>>>> seems the instructions were for?
>>>>>>> 
>>>>>>> I guess my first goal is to seem it working with Minio and then try to 
>>>>>>> get
>>>>>>> it working with HyperStore.
>>>>>>> 
>>>>>>> Any advice appreciated,
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> 
>>>>>>> Tom.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Daan
>>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to