Skip to content

Commit

Permalink
installer: deploys tsuru config to hosts
Browse files Browse the repository at this point in the history
  • Loading branch information
andrestc committed Jun 30, 2017
1 parent a95e547 commit 31171aa
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 8 deletions.
1 change: 1 addition & 0 deletions tsuru/installer/defaultconfig/compose.yml
Expand Up @@ -43,6 +43,7 @@ services:
image: tsuru/api:v1
volumes:
- "/etc/docker/certs.d:/certs:ro"
- "/etc/tsuru/tsuru.conf:/etc/tsuru/tsuru.conf:ro"
ports:
- 8080:8080
networks:
Expand Down
55 changes: 53 additions & 2 deletions tsuru/installer/defaultconfig/configs.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tsuru/installer/defaultconfig/generator/main.go
Expand Up @@ -20,7 +20,7 @@ func main() {
panic(err)
}
out.Write([]byte("// Code generated by generator/main.go, DO NOT EDIT.\n\n"))
out.Write([]byte("package config \n\nconst (\n"))
out.Write([]byte("package defaultconfig \n\nconst (\n"))
for _, f := range fs {
if strings.HasSuffix(f.Name(), ".yml") {
out.Write([]byte(strings.Title(strings.TrimSuffix(f.Name(), ".yml")) + " = `"))
Expand Down
50 changes: 50 additions & 0 deletions tsuru/installer/defaultconfig/tsuru.yml
@@ -0,0 +1,50 @@
listen: "0.0.0.0:$TSURU_PORT"
host: $TSURU_ADDR:$TSURU_PORT
use-tls: false
tls:
cert-file: /certs/cert.pem
key-file: /certs/key.pem
repo-manager: none
database:
url: $MONGODB_ADDR:$MONGODB_PORT
name: tsuru
auth:
token-expire-days: 2
hash-cost: 4
user-registration: true
provisioner: docker
docker:
bs:
socket: /var/run/docker.sock
cluster:
storage: mongodb
mongo-url: $MONGODB_ADDR:$MONGODB_PORT
mongo-database: cluster
collection: docker
registry: $REGISTRY_ADDR:$REGISTRY_PORT
repository-namespace: tsuru
router: hipache
deploy-cmd: /var/lib/tsuru/deploy
run-cmd:
bin: /var/lib/tsuru/start
port: "8888"
tls:
root-path: /certs
auto-scale:
enabled: true
run-interval: $DOCKER_AUTOSCALE_RUN_INTERVAL
routers:
hipache:
type: hipache
domain: $HIPACHE_DOMAIN
redis-server: $REDIS_ADDR:$REDIS_PORT
queue:
mongo-url: $MONGODB_ADDR:$MONGODB_PORT
mongo-database: queuedb
quota:
units-per-app: 4
apps-per-user: 2
log:
disable-syslog: true
use-stderr: true
iaas: $IAAS_CONF
3 changes: 2 additions & 1 deletion tsuru/installer/install_test.go
Expand Up @@ -16,6 +16,7 @@ import (

"github.com/docker/machine/drivers/fakedriver"
"github.com/docker/machine/libmachine/host"
"github.com/tsuru/tsuru-client/tsuru/installer/defaultconfig"
"github.com/tsuru/tsuru-client/tsuru/installer/dm"
"github.com/tsuru/tsuru/cmd"
"github.com/tsuru/tsuru/cmd/cmdtest"
Expand Down Expand Up @@ -249,7 +250,7 @@ func (s *S) TestInstallConfigInit(c *check.C) {
c.Assert(err, check.IsNil)
compose, err := ioutil.ReadFile(filepath.Join(d, "compose.yml"))
c.Assert(err, check.IsNil)
c.Assert(string(compose), check.DeepEquals, defaultCompose)
c.Assert(string(compose), check.DeepEquals, defaultconfig.Compose)
opts, err := parseConfigFile(filepath.Join(d, "config.yml"))
c.Assert(err, check.IsNil)
c.Assert(opts, check.DeepEquals, defaultInstallOpts)
Expand Down
28 changes: 24 additions & 4 deletions tsuru/installer/installer.go
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/docker/machine/libmachine/provision"
"github.com/docker/machine/libmachine/provision/serviceaction"
"github.com/fsouza/go-dockerclient"
"github.com/tsuru/tsuru-client/tsuru/installer/defaultconfig"
"github.com/tsuru/tsuru-client/tsuru/installer/dm"
"github.com/tsuru/tsuru/cmd"
"github.com/tsuru/tsuru/iaas/dockermachine"
Expand Down Expand Up @@ -80,7 +81,7 @@ func (i *Installer) Install(opts *InstallOpts) (*Installation, error) {
return nil, fmt.Errorf("pre-install checks failed: %s", errChecks)
}
setCoreDriverDefaultOpts(opts)
coreMachines, err := i.ProvisionMachines(opts.Hosts.Core.Size, opts.Hosts.Core.Driver.Options)
coreMachines, err := i.ProvisionMachines(opts.Hosts.Core.Size, opts.Hosts.Core.Driver.Options, deployTsuruConfig)
if err != nil {
return nil, fmt.Errorf("failed to provision components machines: %s", err)
}
Expand Down Expand Up @@ -112,6 +113,20 @@ func (i *Installer) Install(opts *InstallOpts) (*Installation, error) {
}, nil
}

func deployTsuruConfig(m *dockermachine.Machine) error {
fmt.Println("Deploying tsuru config...")
_, err := m.Host.RunSSHCommand("sudo mkdir -p /etc/tsuru/")
if err != nil {
return fmt.Errorf("failed to create tsuru config directory: %s", err)
}
remoteWriteCmdFmt := "printf '%%s' '%s' | sudo tee %s"
_, err = m.Host.RunSSHCommand(fmt.Sprintf(remoteWriteCmdFmt, string(defaultconfig.Tsuru), "/etc/tsuru/tsuru.conf"))
if err != nil {
return fmt.Errorf("failed to write remote file: %s", err)
}
return nil
}

// HACK: Sometimes docker will simply freeze while pulling the images for each
// service, adding a restart here seems to unclog the pipes.
func (i *Installer) restartDocker(coreMachines []*dockermachine.Machine) error {
Expand Down Expand Up @@ -249,10 +264,10 @@ func preInstallChecks(config *InstallOpts) error {

func (i *Installer) ProvisionPool(config *InstallOpts, hosts []*dockermachine.Machine) ([]*dockermachine.Machine, error) {
if config.Hosts.Apps.Dedicated {
return i.ProvisionMachines(config.Hosts.Apps.Size, config.Hosts.Apps.Driver.Options)
return i.ProvisionMachines(config.Hosts.Apps.Size, config.Hosts.Apps.Driver.Options, nil)
}
if config.Hosts.Apps.Size > len(hosts) {
poolMachines, err := i.ProvisionMachines(config.Hosts.Apps.Size-len(hosts), config.Hosts.Apps.Driver.Options)
poolMachines, err := i.ProvisionMachines(config.Hosts.Apps.Size-len(hosts), config.Hosts.Apps.Driver.Options, nil)
if err != nil {
return nil, fmt.Errorf("failed to provision pool hosts: %s", err)
}
Expand All @@ -261,7 +276,7 @@ func (i *Installer) ProvisionPool(config *InstallOpts, hosts []*dockermachine.Ma
return hosts[:config.Hosts.Apps.Size], nil
}

func (i *Installer) ProvisionMachines(numMachines int, configs map[string][]interface{}) ([]*dockermachine.Machine, error) {
func (i *Installer) ProvisionMachines(numMachines int, configs map[string][]interface{}, initFunc func(*dockermachine.Machine) error) ([]*dockermachine.Machine, error) {
var machines []*dockermachine.Machine
for j := 0; j < numMachines; j++ {
opts := make(map[string]interface{})
Expand All @@ -273,6 +288,11 @@ func (i *Installer) ProvisionMachines(numMachines int, configs map[string][]inte
if err != nil {
return nil, fmt.Errorf("failed to provision machines: %s", err)
}
if initFunc != nil {
if err := initFunc(m); err != nil {
return nil, fmt.Errorf("failed to initialize host: %s", err)
}
}
machines = append(machines, m)
}
return machines, nil
Expand Down

0 comments on commit 31171aa

Please sign in to comment.