Skip to content

Instantly share code, notes, and snippets.

@robertpyke
Last active March 10, 2021 06:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robertpyke/8798080 to your computer and use it in GitHub Desktop.
Save robertpyke/8798080 to your computer and use it in GitHub Desktop.
Interfacing with Nectar's Object Store (swift - Nectar's S3 equivalent)

Documentation Links

Authentication

Before you can interface with the object-store, you must first authenticate against the keystone. Authenticating against the keystone will provide you with two useful things. 1. It will provide you with an authentication token that will likely be valid for a few hours, and is required for interaction with any other endpoint. 2. It will provide you with the public endpoint (url) for the object store that is appropriate for your project.

Basic Keystone Authentication

The following command will authenticate against the keystone, providing you with a token:

Request:

curl -d '{"auth":{"passwordCredentials":{"username": "example@my.jcu.edu.au", "password": "ExampLEjYmFjNmM5ZGZj"}}}' -H "Content-type: application/json" https://keystone.rc.nectar.org.au:5000/v2.0/tokens
Field Description Example
username this should be your nectar username (probably an email address) example@my.jcu.edu.au
password this is your nectar API password (a generated API key) ExampLEjYmFjNmM5ZGZj

Response:

  {
   "access":{
      "token":{
         "issued_at":"2014-02-04T03:15:15.752325",
         "expires":"2014-02-04T09:15:15Z",
         "id":"EXAMPLEsssssssssssssaaaaaaaaaaMCAQExCTAHBgUrDgMCGjCCAW8GCSqGSIb3DQEHAaCCAWAEggFceyJhY2Nlc3MDoPB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNC0wMi0wNFQwMzoxNToxNS43NTIzMjUiLCAiZXhwaXJlcrI6ICIyMDE0LTAyLTA0VDA5OjE1OjE1WiIsICJpZCI6ICJwbGFjZWhvbGRlciJ9LCAic2VydmljZUNhdGFsb2ciOiBbXSwgInVzZXIiOiB7InVzZXJuYW1lIjogInJvYmVydC5waaaaaaabbbbbbbbddddddddeeeeeeeeddddddddua3MiOiBbXSwgImlkIjogIjUxYjZkYTNkZWZkMDRl2WM4MzNmMjViNFQ0Yjg2ZjVjIiwgInJvbGVzIjogW10sICJuYW1lIjoganJvYmVydCdweWtlQG15Lmrjdv5lZHUuYXUifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFtdfX19MYH-MIH8AgABMFwwVzELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVVuc2V0MQ4wDAYDVQQHEwVVbnNldbEOMAwGA1UEChMeVW5zZXQxGDAWBgNVBAMTD3d3dy5leGFtcGxlLmNvbQIBATAHBgUrDgMCGjANBgkqhkiG9w0BAQEFAASBgAyNYkKTuWelHmBLVAg0V7yyVRdiPhGqJUqEuwWilV37LIKB8cclhiXNAvVTNUt95-VdiWIjtf4CIIyzD4EflEYsBCrAOm-XsJPaUvI6k-UZIjt1Z14jFdP01BOK2iFcgknkH3nORJDC24QL3ZoaGrQAJn3gZieLdltrQZdnzjzw"
      },
      "serviceCatalog":[

      ],
      "user":{
         "username":"example@my.jcu.edu.au",
         "roles_links":[

         ],
         "id":"aaaaaabbbbcc4e1c833f25b644b86f5c",
         "roles":[

         ],
         "name":"example@my.jcu.edu.au"
      },
      "metadata":{
         "is_admin":0,
         "roles":[

         ]
      }
   }
}

Keystone Authentication for a project (tenant)

That's nice and all, but we want to authenticate against a specific tenant (a project):

Request:

curl -d '{"auth":{"tenantName": "QCIF_CliMAS_2", "passwordCredentials":{"username": "example@my.jcu.edu.au", "password": "ExampLEjYmFjNmM5ZGZj"}}}' -H "Content-type: application/json" https://keystone.rc.nectar.org.au:5000/v2.0/tokens
Field Description Example
username this should be your nectar username (probably an email address) example@my.jcu.edu.au
password this is your nectar API password (a generated API key) ExampLEjYmFjNmM5ZGZj
tenantName this is the name of your nectar project QCIF_CliMAS_2

Response:

{
   "access":{
      "token":{
         "issued_at":"2014-02-04T03:19:58.698759",
         "expires":"2014-02-04T09:19:58Z",
         "id":"EXAMPLEaaaaaaaaasssssssddddddfffffddddddddddddddddfffffsssssssssssssffffggggeeeeeeeeeeMiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNC0wMi0wNFQwMzoxOTo1OC42OTg3NTkiLCAiZXhwaXJlcyI6ICIyMDE0LTAyLTA0VDA5OjE5OjU4WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogIlFDSUYtQ2xpTUFTXzIiLCAiZW5hYmxlZCI6IHRydWUsICJpZCI6ICIxMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiIsICJuYW1lIjogIlFDSUZfQ0xpTUFTXzIifX0sICJzZXJ2aWNlQ2F0YWxvZyI6IFt7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHBzOi8vbm92YS5yYy5uZWN0YXIub3JnLmF1Ojg3NzQvdjEuMS8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgImVuYWJsZWQiOiAiMSIsICJpbnRlcm5hbFVSTCI6ICJodHRwczovL25vdmEucmMubmVjdGFyLm9yZy5hdTo4Nzc0L3YxLjEvMTMyZjU0NDVlMzEyNDQzNWI4YjRhZDMwMDgxZGZhYWIiLCAicHVibGljVVJMIjogImh0dHBzOi8vbm92YS5yYy5uZWN0YXIub3JnLmF1Ojg3NzQvdjEuMS8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJjb21wdXRlIiwgIm5hbWUiOiAiQ29tcHV0ZSBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cHM6Ly9zd2lmdC5yYy5uZWN0YXIub3JnLmF1Ojg4ODgvIiwgInJlZ2lvbiI6ICJNZWxib3VybmUiLCAicHVibGljVVJMIjogImh0dHBzOi8vc3dpZnQucmMubmVjdGFyLm9yZy5hdTo4ODg4LyIsICJpbnRlcm5hbFVSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC8ifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiczMiLCAibmFtZSI6ICJTMyBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cDovL2dsYW5jZS5yYy5uZWN0YXIub3JnLmF1OjkyOTIvdjEiLCAicmVnaW9uIjogIk1lbGJvdXJuZSIsICJlbmFibGVkIjogIjEiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovL2dsYW5jZS5yYy5uZWN0YXIub3JnLmF1OjkyOTIvdjEiLCAicHVibGljVVJMIjogImh0dHA6Ly9nbGFuY2UucmMubmVjdGFyLm9yZy5hdTo5MjkyL3YxIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogImltYWdlIiwgIm5hbWUiOiAiSW1hZ2UgU2VydmljZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHBzOi8vY2VpbG9tZXRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzcvIiwgInJlZ2lvbiI6ICJNZWxib3VybmUiLCAicHVibGljVVJMIjogImh0dHBzOi8vY2VpbG9tZXRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzcvIiwgImludGVybmFsVVJMIjogImh0dHBzOi8vY2VpbG9tZXRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzcvIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogIm1ldGVyaW5nIiwgIm5hbWUiOiAiTWV0ZXJpbmcgU2VydmljZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHBzOi8vY2luZGVyLnJjLm5lY3Rhci5vcmcuYXU6ODc3Ni92MS8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgInB1YmxpY1VSTCI6ICJodHRwczovL2NpbmRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzYvdjEvMTMyZjU0NDVlMzEyNDQzNWI4YjRhZDMwMDgxZGZhYWIiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cHM6Ly9jaW5kZXIucmMubmVjdGFyLm9yZy5hdTo4Nzc2L3YxLzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInZvbHVtZSIsICJuYW1lIjogIlZvbHVtZSBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cHM6Ly9ub3ZhLnJjLm5lY3Rhci5vcmcuYXU6ODc3My9zZXJ2aWNlcy9BZG1pbiIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgInB1YmxpY1VSTCI6ICJodHRwczovL25vdmEucmMubmVjdGFyLm9yZy5hdTo4NzczL3NlcnZpY2VzL0Nsb3VkIiwgImludGVybmFsVVJMIjogImh0dHBzOi8vbm92YS5yYy5uZWN0YXIub3JnLmF1Ojg3NzMvc2VydmljZXMvQ2xvdWQifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiZWMyIiwgIm5hbWUiOiAiRUMyIFNlcnZpY2UifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC92MS4wLyIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgImVuYWJsZWQiOiAiMSIsICJpbnRlcm5hbFVSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC92MS9BVVRIXzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIiwgInB1YmxpY1VSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC92MS9BVVRIXzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIn0sIHsiYWRtaW5VUkwiOiAiaHR0cHM6Ly9zd2lmdC5xbGQubmVjdGFyLm9yZy5hdTo4ODg4L3YxLjAvIiwgInJlZ2lvbiI6ICJRbGQiLCAiZW5hYmxlZCI6ICIxIiwgImludGVybmFsVVJMIjogImh0dHBzOi8vc3dpZnQucWxkLm5lY3Rhci5vcmcuYXU6ODg4OC92MS9BVVRIXzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIiwgInB1YmxpY1VSTCI6ICJodHRwczovL3N3aWZ0LnFsZC5uZWN0YXIub3JnLmF1Ojg4ODgvdjEvQVVUSF8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJvYmplY3Qtc3RvcmUiLCAibmFtZSI6ICJPYmplY3QgU3RvcmFnZSBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cHM6Ly9rZXlzdG9uZS5yYy5uZWN0YXIub3JnLmF1OjM1MzU3L3YyLjAvIiwgInJlZ2lvbiI6ICJNZWxib3VybmUiLCAiZW5hYmxlZCI6ICIxIiwgImludGVybmFsVVJMIjogImh0dHBzOi8va2V5c3RvbmUucmMubmVjdGFyLm9yZy5hdTo1MDAwL3YyLjAvIiwgInB1YmxpY1VSTCI6ICJodHRwczovL2tleXN0b25lLnJjLm5lY3Rhci5vcmcuYXU6NTAwMC92Mi4wLyJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpZGVudGl0eSIsICJuYW1lIjogIklkZW50aXR5IFNlcnZpY2UifV0sICJ1c2VyIjogeyJ1c2VybmFtZSI6ICJyb2JlcnQucHlrZUBteS5qY3UuZWR1LmF1IiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI1MWI2ZGEzZGVmZDA0ZTFjODMzZjI1YjY0NGI4NmY1YyIsICJyb2xlcyI6IFt7Im5hbWUiOiAiTWVtYmVyIn1dLCAibmFtZSI6ICJyb2JlcnQucHlrZUBteS5qY3UuZWR1LmF1In0sICJtZXRhZGF0YSI6IHsiaXNfYWRtaW4iOiAwLCAicm9sZXMiOiBbIjIiXX19fTGB-zCB-AIBATBcMFcxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIEwVVbnNldDEOMAwGA1UEBxMFVW5zZXQxDjAMBgNVBAoTBVVuc2V0MRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20CAQEwBwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEgYCesH4RJrQd4sriCvRd71EMd1651NpJNnFmOAcKRnH8yGEmkn8N8KMzmTUcxnDwlUCpreUv9-T9kOSLGSjoyGMGfLjq4pus800qFAseryRr34Gvqsepg9RCHR9XK4T3VR7+ExampleylCadQ-ICCUVQLV9keG-6bvMT5MAClGQIQ==",
         "tenant":{
            "description":"QCIF-CliMAS_2",
            "enabled":true,
            "id":"aaaaaaaaaaaaaaaaaaa4ad30081dfaab",
            "name":"QCIF_CLiMAS_2"
         }
      },
      "serviceCatalog":[
         {
            "endpoints":[
               {
                  "adminURL":"https://nova.rc.nectar.org.au:8774/v1.1/aaaa5445e3124435b8b4ad30081dfaab",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"https://nova.rc.nectar.org.au:8774/v1.1/aaaa5445e3124435b8b4ad30081dfaab",
                  "publicURL":"https://nova.rc.nectar.org.au:8774/v1.1/aaaa5445e3124435b8b4ad30081dfaab"
               }
            ],
            "endpoints_links":[

            ],
            "type":"compute",
            "name":"Compute Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://swift.rc.nectar.org.au:8888/",
                  "region":"Melbourne",
                  "publicURL":"https://swift.rc.nectar.org.au:8888/",
                  "internalURL":"https://swift.rc.nectar.org.au:8888/"
               }
            ],
            "endpoints_links":[

            ],
            "type":"s3",
            "name":"S3 Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"http://glance.rc.nectar.org.au:9292/v1",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"http://glance.rc.nectar.org.au:9292/v1",
                  "publicURL":"http://glance.rc.nectar.org.au:9292/v1"
               }
            ],
            "endpoints_links":[

            ],
            "type":"image",
            "name":"Image Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://ceilometer.rc.nectar.org.au:8777/",
                  "region":"Melbourne",
                  "publicURL":"https://ceilometer.rc.nectar.org.au:8777/",
                  "internalURL":"https://ceilometer.rc.nectar.org.au:8777/"
               }
            ],
            "endpoints_links":[

            ],
            "type":"metering",
            "name":"Metering Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://cinder.rc.nectar.org.au:8776/v1/aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "region":"Melbourne",
                  "publicURL":"https://cinder.rc.nectar.org.au:8776/v1/aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "internalURL":"https://cinder.rc.nectar.org.au:8776/v1/aaaaaaaaaaaaaaa5b8b4ad30081dfaab"
               }
            ],
            "endpoints_links":[

            ],
            "type":"volume",
            "name":"Volume Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://nova.rc.nectar.org.au:8773/services/Admin",
                  "region":"Melbourne",
                  "publicURL":"https://nova.rc.nectar.org.au:8773/services/Cloud",
                  "internalURL":"https://nova.rc.nectar.org.au:8773/services/Cloud"
               }
            ],
            "endpoints_links":[

            ],
            "type":"ec2",
            "name":"EC2 Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://swift.rc.nectar.org.au:8888/v1.0/",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"https://swift.rc.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "publicURL":"https://swift.rc.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab"
               },
               {
                  "adminURL":"https://swift.qld.nectar.org.au:8888/v1.0/",
                  "region":"Qld",
                  "enabled":"1",
                  "internalURL":"https://swift.qld.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "publicURL":"https://swift.qld.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab"
               }
            ],
            "endpoints_links":[

            ],
            "type":"object-store",
            "name":"Object Storage Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://keystone.rc.nectar.org.au:35357/v2.0/",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"https://keystone.rc.nectar.org.au:5000/v2.0/",
                  "publicURL":"https://keystone.rc.nectar.org.au:5000/v2.0/"
               }
            ],
            "endpoints_links":[

            ],
            "type":"identity",
            "name":"Identity Service"
         }
      ],
      "user":{
         "username":"example@my.jcu.edu.au",
         "roles_links":[

         ],
         "id":"aaaaaaaaaaaaaaaf25b644b86f5c",
         "roles":[
            {
               "name":"Member"
            }
         ],
         "name":"example@my.jcu.edu.au"
      },
      "metadata":{
         "is_admin":0,
         "roles":[
            "2"
         ]
      }
   }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment