Skip to content

Commit

Permalink
installer: enables replacing part of the iaas config
Browse files Browse the repository at this point in the history
  • Loading branch information
andrestc committed Jun 30, 2017
1 parent 63c4029 commit 3c3bcff
Show file tree
Hide file tree
Showing 11 changed files with 78 additions and 51 deletions.
9 changes: 4 additions & 5 deletions tsuru/installer/components.go
Expand Up @@ -20,11 +20,10 @@ import (
var defaultTsuruAPIPort = 8080

type ComponentsConfig struct {
InstallDashboard bool `yaml:"install-dashboard,omitempty"`
TargetName string `yaml:"-"`
RootUserEmail string `yaml:"-"`
RootUserPassword string `yaml:"-"`
IaaSConfig iaasConfig `yaml:"-"`
InstallDashboard bool `yaml:"install-dashboard,omitempty"`
TargetName string `yaml:"-"`
RootUserEmail string `yaml:"-"`
RootUserPassword string `yaml:"-"`
Tsuru tsuruComponent
}

Expand Down
8 changes: 0 additions & 8 deletions tsuru/installer/compose.go
@@ -1,7 +1,6 @@
package installer

import (
"encoding/json"
"fmt"
"io/ioutil"
"strings"
Expand Down Expand Up @@ -29,17 +28,10 @@ func resolveConfig(baseConfig string, customConfigs map[string]string) (string,
}

func composeDeploy(c ServiceCluster, installConfig *InstallOpts) error {
componentsConfig := installConfig.ComponentsConfig
manager := c.GetManager()
componentsConfig.IaaSConfig.Dockermachine.InsecureRegistry = fmt.Sprintf("%s:5000", dm.GetPrivateIP(manager))
iaasConfig, err := json.Marshal(componentsConfig.IaaSConfig)
if err != nil {
return fmt.Errorf("failed to marshal iaas config: %s", err)
}
configs := map[string]string{
"CLUSTER_ADDR": manager.Base.Address,
"CLUSTER_PRIVATE_ADDR": dm.GetPrivateIP(manager),
"IAAS_CONF": string(iaasConfig),
}
config, err := resolveConfig(installConfig.ComposeFile, configs)
if err != nil {
Expand Down
1 change: 0 additions & 1 deletion tsuru/installer/defaultconfig/compose.yml
Expand Up @@ -63,7 +63,6 @@ services:
- REGISTRY_PORT=5000
- TSURU_ADDR=http://{{CLUSTER_ADDR}}
- TSURU_PORT=8080
- IAAS_CONF={{IAAS_CONF}}

networks:
tsuru:
Expand Down
2 changes: 1 addition & 1 deletion tsuru/installer/defaultconfig/config.go
Expand Up @@ -3,7 +3,7 @@ package defaultconfig
import (
"fmt"

yaml "gopkg.in/yaml.v1"
yaml "gopkg.in/yaml.v2"
)

//go:generate bash -c "rm -f configs.go && go run ./generator/main.go -o configs.go"
Expand Down
8 changes: 3 additions & 5 deletions tsuru/installer/defaultconfig/configs.go

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

7 changes: 3 additions & 4 deletions tsuru/installer/defaultconfig/tsuru.yml
@@ -1,5 +1,5 @@
listen: "0.0.0.0:$TSURU_PORT"
host: $TSURU_ADDR:$TSURU_PORT
listen: "0.0.0.0:8080"
host: $TSURU_ADDR:8080
use-tls: false
tls:
cert-file: /certs/cert.pem
Expand Down Expand Up @@ -46,5 +46,4 @@ quota:
apps-per-user: 2
log:
disable-syslog: true
use-stderr: true
iaas: $IAAS_CONF
use-stderr: true
4 changes: 4 additions & 0 deletions tsuru/installer/dm/drivers.go
Expand Up @@ -92,3 +92,7 @@ func DefaultDriverOpts(driverName string) map[string]interface{} {
}
return opts
}

func IaaSCompatibleDriver(driverName string) bool {
return driverName != "virtualbox" && driverName != "generic"
}
34 changes: 27 additions & 7 deletions tsuru/installer/install.go
Expand Up @@ -100,7 +100,7 @@ func (c *Install) Run(context *cmd.Context, cli *cmd.Client) error {
}

func parseConfigFile(file string) (*InstallOpts, error) {
installConfig := defaultInstallOpts
installConfig := DefaultInstallOpts()
if file == "" {
return installConfig, nil
}
Expand All @@ -112,12 +112,32 @@ func parseConfigFile(file string) (*InstallOpts, error) {
if err != nil {
return nil, err
}
installConfig.ComponentsConfig.TargetName = installConfig.Name
conf := &installConfig.ComponentsConfig.IaaSConfig.Dockermachine
conf.CaPath = "/certs"
conf.Driver.Name = installConfig.DriverOpts.Name
conf.Driver.Options = installConfig.DriverOpts.Options
config.ReadConfigFile(file)
installConfig.ComponentsConfig.TargetName = installConfig.Name
defaultIaas := iaasConfig{
Dockermachine: iaasConfigInternal{
CaPath: "/certs",
InsecureRegistry: "$REGISTRY_ADDR:$REGISTRY_PORT",
},
}
if dm.IaaSCompatibleDriver(installConfig.DriverOpts.Name) {
defaultIaas.Dockermachine.Driver = iaasConfigDriver{
Name: installConfig.DriverOpts.Name,
Options: installConfig.DriverOpts.Options,
}
}
conf := installConfig.ComponentsConfig.Tsuru.Config
if _, ok := conf["iaas"]; ok {
customIaas, err := yaml.Marshal(conf["iaas"])
if err != nil {
return nil, err
}
err = yaml.Unmarshal(customIaas, &defaultIaas)
if err != nil {
return nil, err
}
}
conf["iaas"] = defaultIaas
return installConfig, nil
}

Expand Down Expand Up @@ -478,7 +498,7 @@ func (c *InstallConfigInit) Run(context *cmd.Context, cli *cmd.Client) error {
if err != nil {
return errors.Errorf("failed to write compose file: %s", err)
}
out, err := yaml.Marshal(defaultInstallOpts)
out, err := yaml.Marshal(DefaultInstallOpts())
if err != nil {
return errors.Errorf("failed to generate config file: %s", err)
}
Expand Down
38 changes: 24 additions & 14 deletions tsuru/installer/install_test.go
Expand Up @@ -28,7 +28,7 @@ import (
func (s *S) TestParseConfigDefaultConfig(c *check.C) {
dmConfig, err := parseConfigFile("")
c.Assert(err, check.IsNil)
c.Assert(dmConfig, check.DeepEquals, defaultInstallOpts)
c.Assert(dmConfig, check.DeepEquals, DefaultInstallOpts())
}

func (s *S) TestParseConfigFileNotExists(c *check.C) {
Expand All @@ -38,6 +38,19 @@ func (s *S) TestParseConfigFileNotExists(c *check.C) {

func (s *S) TestParseConfigFile(c *check.C) {
expectedTsuruConf := defaultconfig.DefaultTsuruConfig()
expectedTsuruConf["iaas"] = iaasConfig{
Dockermachine: iaasConfigInternal{
CaPath: "/certs",
InsecureRegistry: "$REGISTRY_ADDR:$REGISTRY_PORT",
Driver: iaasConfigDriver{
Name: "amazonec2",
Options: map[string]interface{}{
"opt1": "option1-value",
"opt2": "option2-newvalue",
},
},
},
}
expectedTsuruConf["debug"] = true
expectedTsuruConf["repo-manager"] = "gandalf"
expected := &InstallOpts{
Expand All @@ -47,6 +60,7 @@ func (s *S) TestParseConfigFile(c *check.C) {
Name: "amazonec2",
Options: map[string]interface{}{
"opt1": "option1-value",
"opt2": "option2-newvalue",
},
},
CAPath: "/tmp/certs",
Expand All @@ -57,18 +71,7 @@ func (s *S) TestParseConfigFile(c *check.C) {
TargetName: "tsuru-test",
RootUserEmail: "admin@example.com",
RootUserPassword: "admin123",
IaaSConfig: iaasConfig{
Dockermachine: iaasConfigInternal{
CaPath: "/certs",
Driver: iaasConfigDriver{
Name: "amazonec2",
Options: map[string]interface{}{
"opt1": "option1-value",
},
},
},
},
Tsuru: tsuruComponent{Config: expectedTsuruConf},
Tsuru: tsuruComponent{Config: expectedTsuruConf},
},
Hosts: hostGroups{
Apps: hostGroupConfig{
Expand Down Expand Up @@ -257,5 +260,12 @@ func (s *S) TestInstallConfigInit(c *check.C) {
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)
expected := DefaultInstallOpts()
expected.Tsuru.Config["iaas"] = iaasConfig{
Dockermachine: iaasConfigInternal{
CaPath: "/certs",
InsecureRegistry: "$REGISTRY_ADDR:$REGISTRY_PORT",
},
}
c.Assert(opts, check.DeepEquals, expected)
}
10 changes: 5 additions & 5 deletions tsuru/installer/installer.go
Expand Up @@ -14,7 +14,7 @@ import (
"strings"
"time"

yaml "gopkg.in/yaml.v1"
yaml "gopkg.in/yaml.v2"

"github.com/docker/machine/libmachine/mcnutils"
"github.com/docker/machine/libmachine/provision"
Expand All @@ -26,8 +26,8 @@ import (
"github.com/tsuru/tsuru/iaas/dockermachine"
)

var (
defaultInstallOpts = &InstallOpts{
func DefaultInstallOpts() *InstallOpts {
return &InstallOpts{
Name: "tsuru",
DockerMachineConfig: dm.DockerMachineConfig{
DriverOpts: &dm.DriverOpts{Name: "virtualbox"},
Expand All @@ -45,7 +45,7 @@ var (
Core: hostGroupConfig{Size: 1},
},
}
)
}

type InstallOpts struct {
dm.DockerMachineConfig `yaml:",inline"`
Expand Down Expand Up @@ -206,7 +206,7 @@ func (i *Installer) BootstrapTsuru(opts *InstallOpts, target string, coreMachine
InstallDashboard: opts.ComponentsConfig.InstallDashboard,
}
var installMachines []*dockermachine.Machine
if opts.DriverOpts.Name == "virtualbox" || opts.DriverOpts.Name == "generic" {
if !dm.IaaSCompatibleDriver(opts.DriverOpts.Name) {
appsMachines, errProv := i.ProvisionPool(opts, coreMachines)
if errProv != nil {
return nil, errProv
Expand Down
8 changes: 7 additions & 1 deletion tsuru/installer/testdata/hosts.yml
Expand Up @@ -16,8 +16,14 @@ driver:
name: amazonec2
options:
opt1: option1-value
opt2: option2-value
components:
tsuru:
config:
debug: true
repo-manager: gandalf
repo-manager: gandalf
iaas:
dockermachine:
driver:
options:
opt2: option2-newvalue

0 comments on commit 3c3bcff

Please sign in to comment.