72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package publish
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/drone/drone/plugin/condition"
|
|
"github.com/drone/drone/shared/build/buildfile"
|
|
)
|
|
|
|
type Swift struct {
|
|
// Username for authentication
|
|
Username string `yaml:"username,omitempty"`
|
|
|
|
// Password for authentication
|
|
// With Rackspace this is usually an API Key
|
|
Password string `yaml:"password,omitempty"`
|
|
|
|
// Container to upload files to
|
|
Container string `yaml:"container,omitempty"`
|
|
|
|
// Base API version URL to authenticate against
|
|
// Rackspace: https://identity.api.rackspacecloud.com/v2.0
|
|
AuthURL string `yaml:"auth_url,omitempty"`
|
|
|
|
// Region to communicate with, in a generic OpenStack install
|
|
// this may be RegionOne
|
|
Region string `yaml:"region,omitempty"`
|
|
|
|
// Source file or directory to upload, if source is a directory,
|
|
// upload the contents of the directory
|
|
Source string `yaml:"source,omitempty"`
|
|
|
|
// Destination to write the file(s) to. Should contain the full
|
|
// object name if source is a file
|
|
Target string `yaml:"target,omitempty"`
|
|
|
|
Condition *condition.Condition `yaml:"when,omitempty"`
|
|
}
|
|
|
|
func (s *Swift) Write(f *buildfile.Buildfile) {
|
|
var target string
|
|
// All options are required, so ensure they are present
|
|
if len(s.Username) == 0 || len(s.Password) == 0 || len(s.AuthURL) == 0 || len(s.Region) == 0 || len(s.Source) == 0 || len(s.Container) == 0 {
|
|
f.WriteCmdSilent(`echo "Swift: Missing argument(s)"`)
|
|
return
|
|
}
|
|
|
|
// If a target was provided, prefix it with a /
|
|
if len(s.Target) > 0 {
|
|
target = fmt.Sprintf("/%s", strings.TrimPrefix(s.Target, "/"))
|
|
}
|
|
|
|
// debugging purposes so we can see if / where something is failing
|
|
f.WriteCmdSilent(`echo "Swift: Publishing..."`)
|
|
|
|
// install swiftly using PIP
|
|
f.WriteCmdSilent("[ -f /usr/bin/sudo ] || pip install swiftly 1> /dev/null 2> /dev/null")
|
|
f.WriteCmdSilent("[ -f /usr/bin/sudo ] && sudo pip install swiftly 1> /dev/null 2> /dev/null")
|
|
|
|
// Write out environment variables
|
|
f.WriteEnv("SWIFTLY_AUTH_URL", s.AuthURL)
|
|
f.WriteEnv("SWIFTLY_AUTH_USER", s.Username)
|
|
f.WriteEnv("SWIFTLY_AUTH_KEY", s.Password)
|
|
f.WriteEnv("SWIFTLY_REGION", s.Region)
|
|
|
|
f.WriteCmd(fmt.Sprintf(`swiftly put -i %s %s%s`, s.Source, s.Container, target))
|
|
}
|
|
|
|
func (s *Swift) GetCondition() *condition.Condition {
|
|
return s.Condition
|
|
}
|