Install the Swiftly client for Cloud Files
Install Swiftly
Swiftly is a client tool that you can use to upload objects to and download
objects from your Rackspace Cloud Files account. Swiftly manages the
storage of large objects in Cloud Files. If you have a very large object
(such as a virtual disk image file), Swiftly splits the file into
smaller segments and then creates the large object manifest for you.
For more information about Swiftly, see the following sites:
- The Python® package index page:
https://pypi.python.org/pypi/swiftly/2.02 - Swiftly documentation: https://gholt.github.io/swiftly/
- Swiftly source code: https://github.com/gholt/swiftly
Install Swiftly on the Ubuntu operating system
These instructions were built by Rackspace on an Ubuntu® 13.10 public
image.
Use the following instructions from a Bash shell on your server:
-
Update the
apt-get
database.sudo apt-get update
-
Install the Python installer,
pip
, by usingapt-get
.sudo apt-get install python-pip
-
Install Swiftly by using
pip
.sudo pip install swiftly
Install Swiftly on CentOS
These instructions were verified by Rackspace on a CentOS® 6.5 public
image.
Use the following instructions from a Bash shell on your server:
-
Install the Python installer,
pip
, by usingyum
.sudo yum install python-pip
If you get an error saying the package can't be found, the EPEL
repository needs to be enabled. For information on setting up the
EPEL repository on your system, see Install EPEL and additional repositories on CentOS and Red Hat.
When EPEL is enabled, run theinstall
command for pip again. -
Install Swiftly by using
pip
.sudo pip install swiftly
Configure Swiftly for Cloud Files
Edit or create the file ~/.swiftly.conf
. By default, Swiftly uses the configuration file
in the same local directory where it is run, or you can define a file path while running
Swiftly commands by using the --conf=PATH
flag. Include the following contents in your
.swiftly.conf file:
[swiftly]
auth_user = <yourUserName>
auth_key = <yourAPIkey>
auth_url = https://identity.api.rackspacecloud.com/v2.0
region = <datacenter>
For the full list of options available in the .swiftly.conf file, see
the sample config file in the Swiftly repo.
Install Eventlet (optional)
Eventlet is an optional pip
package that allows you to set a concurrency count when using
Swiftly. This count is useful when performing bulk actions that are threaded because the Cloud
Files application programming interface (API) has a limit of 100 concurrent write requests
per container.
Install Eventlet on the Ubuntu operating system
Use the following instructions from a Bash shell on your server:
-
Install the Python developer library package by using
apt-get
.sudo apt-get python-dev
-
Install Eventlet by using
pip
.sudo pip install eventlet
Install Eventlet on CentOS
Use the following instructions from a Bash shell on your server:
-
Install the Python developer library package by using
yum
.sudo yum install python-devel
-
Install Eventlet by using
pip
.sudo pip install eventlet
Install GNU Screen (optional)
GNU Screen is a program that you can use to start a Screen session. A
Screen session looks just like an ordinary shell except that you can
detach a terminal from a Screen session, and whatever commands you are
running continue running in the session. This functionality is useful
when you start a long running process (such as a large object upload)
from the command line. If your laptop battery dies, or your wireless
connection is lost, or you are otherwise disconnected, the process
continues to run in your Screen session.
Install Screen in the Ubuntu operating system
Use the following instructions from a Bash shell on your server to install
Screen in the Ubuntu operating system:
sudo apt-get install screen
Installing Screen in CentOS
Invoke the following instructions from a Bash shell on your server to install
Screen in CentOS:
sudo yum install screen
Get started with Screen
To start Screen, run the following command. The -s
option tells the program what shell to use. The -S
option provides a
name for the session, which is helpful if you have several Screen
sessions running at the same time.
screen -s /bin/bash -S display-Name-For-Screen
After you start Screen, you can enter regular Bash commands. Screen commands,
that is, commands requesting Screen to do something, are escaped with Control-a
(or C-a
) . Some Screen commands are single character. For example, to detach from
Screen, type the following command:
C-a d
Other Screen commands are longer. To use these, you first type
C-a:
and then you type the rest of the command in the status line
of the Screen window. For example, you can log Screen's output to a file
so that you can go back and review it later by typing the following
command:
C-a :
C-a : logfile name-of-log-file
C-a : log
The first command sets the name of the file in which the log is
recorded. The second command toggles logging on and off. Because this is
the first time you typed it, it turns logging on.
We encourage you to create a log of Screen output so that you have a
record of everything that happened while you were detached from Screen.
To exit Screen, just type Control-d
(without prefacing it with
Control-a
).
You can learn more about Screen by visiting
https://www.gnu.org/software/screen/manual/screen.html.
Reattach to a running Screen session
You can get a list of what Screen sessions you currently have running by
invoking this command from a Bash shell:
screen -list
Your response looks something like the following output:
There are screens on:
3064.some-other-stuff (Detached)
3004.large-obj-transfer (Detached)
3073.even-more-stuff (Detached)
3 Sockets in /var/run/screen/S-root.
To reattach to the Screen session named large-obj-transfer, for example,
note the session number (in this example, 3004
) and then use the
following command:
screen -r 3004
Swiftly example commands
Important: Swiftly allows destructive actions to run against
one or all containers on an account. Use caution when performing updates
and deletes to Cloud Files objects because these cannot be undone.
Test your commands against test containers wherever possible before
running them in production.
Following are some common Swiftly command examples.
Get a list of containers
Run the following command to get a list of containers for the configured account:
swiftly get
The response is similar to the following list:
.ACCESS_LOGS
.CDN_ACCESS_LOGS
Books
Get a list of containers with details
Run the following command to get a list of containers including detailed information:
swiftly get --raw
The response displays in JavaScript® Object Notation (JSON) format:
[{"count": 103, "bytes": 22296, "name": ".ACCESS_LOGS"},
{"count": 126, "bytes": 32708, "name": ".CDN_ACCESS_LOGS"},
{"count": 417, "bytes": 1177376576, "name": "Books"}]
Get a list of objects in a container
Run the following command to get a list of objects in a container:
swiftly get <containerName>
Get containers or objects that match a beginning prefix
Run the following command to get containers or objects that match a beginning
prefix (case sensitive):
swiftly get --prefix <startingText>
swiftly get <containerName> --prefix <startingText>
Post new headers to an object
Run the following command to post new headers to an object (supports multiple headers
in a single command, separated as shown):
swiftly post -h "<headerName1>:<headerValue1>" -h "<headerName2>:<headerValue2>" <containerName>/<objectName>
Upload an object
The following example uploads the local directory file somefile.png, renames it to
newfilename.png in the specified container, and places the object into the pseudo
directory /images/).
Run the following command to upload an object:
swiftly put -i ~/somefile.png <containerName>/images/newfilename.png
Delete an object
Run the following command to delete an object, or delete an object within a pseudo directory:
swiftly delete <containerName>/somefile.png
swiftly delete <containerName>/images/newfilename.png
Delete all objects within a container and delete the container
Run the following command to delete all objects within a container and delete the container:
swiftly delete <containerName> --until-empty --recursive
Bulk update
This command performs a bulk update of all files in a container to add the header HEADERNAME
with a value of HEADERVALUE. Note that Swiftly for/do
commands contain
literal open and close angle bracket characters (<
and >
), such as <item>
in
the examples shown here. The angle brackets are part of the command, not placeholders
for variable content.
As a best practice with for/do
commands, --cache-auth
is set to temporarily store
the authentication token rather than make repeated calls to the Identity API, and
--concurrency
is limited to 100 maximum API calls to Cloud Files:
Run the following command to perform a bulk update:
swiftly --cache-auth --eventlet --concurrency=100 for CONTAINER do post -H "HEADERNAME:HEADERVALUE" "<item>"
Bulk delete specified objects
Run the following command to perform a bulk delete of only objects within a container
whose name begins with a certain prefix (caching the Identity token and limiting to
100 concurrent API calls):
swiftly --cache-auth --eventlet --concurrency=100 for CONTAINER --prefix STARTINGTEXT --output-names do delete "<item>"
Bulk delete specified containers
Run the following command to perform a bulk delete of only containers whose name
begins with a certain prefix (caching the Identity token and limiting to 100
concurrent API calls):
swiftly --cache-auth --eventlet --concurrency=100 for "" --prefix STARTINGTEXT --output-names do delete "<item>" --recursive --until-empty
Updated 6 months ago