First, you need to install
swift command line utility
and here is how to do it: Install OpenStack swift client only
In general, you will need:
- username (–os-username) – Username
- password (–os-password) – Password
- authentication url (–os-auth-url) – The URL address, which authorize your requests, it generates a security token for your operations. Always use https!
- tenant name (–os-tenant-name) – Tenant is like a project.
All of the above information should be available from your OpenStack administrator.
For the examples we assume there is a container “mytest” (it’s like a main directory from the root). You cannot upload files in the root, because this is the place for containers only i.e. directories. You must always upload files under container (i.e. directory aka folder).
To upload a single file with swift cli execute:
myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ upload mytest ./file1.log file1.log
To upload multiple files with swift cli execute:
myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ upload mytest ./newfiles-1.log ./newfiles-2.log ./newfiles-3.log newfiles-2.log newfiles-3.log newfiles-1.log myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ upload mytest upload mytest ./newfiles-*.log newfiles-1.log newfiles-2.log newfiles-6.log newfiles-3.log newfiles-4.log newfiles-5.log
Adding multiple files name or shell expand strings will upload the files in the OpenStack account.
To upload a directory and its content recursively
myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ upload mytest ./more-files more-files/more-files4.log more-files/files/file2.log more-files/files/file4.log more-files/more-files2.log more-files/more-files1.log more-files/files/file3.log more-files/more-files3.log
As you can see if a directory is used with upload command all of the files and sub-directories will be uploaded recursively and the order is unknown.
List uploaded files
myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ list mytest file1.log files/file2.log files/file3.log files/file4.log more-files/files/file2.log more-files/files/file3.log more-files/files/file4.log more-files/more-files1.log more-files/more-files2.log more-files/more-files3.log more-files/more-files4.log newfiles-1.log newfiles-2.log newfiles-3.log newfiles-4.log newfiles-5.log newfiles-6.log
Be careful here if you have millions of files under “mytest” it will try to list them all. Of course, probably there is a limit and it will output only a fixed number of files.
Environment variables
You can export the 4 required variables (OS_AUTH_URL, OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME) in the shell to use shorter syntax. Be careful with the security and the password exported in the shell!
myuser@myserver:~$ export OS_AUTH_URL="https://auth-url.example.com/v2.0/" myuser@myserver:~$ export OS_USERNAME="myuser" myuser@myserver:~$ export OS_PASSWORD="mypass" myuser@myserver:~$ export OS_TENANT_NAME="mytenant" myuser@myserver:~$ swift list mytest mytest2 myuser@myserver:~$ swift upload mytest2 files/ files/newfiles-4.log files/newfiles-3.log files/newfiles-2.log files/newfiles-6.log files/newfiles-1.log files/file4.log files/newfiles-5.log files/file2.log files/file3.log myuser@myserver:~$ swift list mytest2 files/file2.log files/file3.log files/file4.log files/newfiles-1.log files/newfiles-2.log files/newfiles-3.log files/newfiles-4.log files/newfiles-5.log files/newfiles-6.log
Create a container
As said the container is like a directory in the first level. You cannot upload files in the first level, only containers are allowed there i.e. directories. Create a container (aka directory) with the “post” swift command. To create “mytest” for the examples above you should do:
myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ post mytest myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ list mytest myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ post mytest2 myuser@myserver:~$ swift --os-username myuser --os-tenant-name mytenant --os-password mypass --os-auth-url https://auth-url.example.com/v2.0/ list mytest mytest2