(opts *SyncthingOpts)
| 45 | } |
| 46 | |
| 47 | func (self *Syncthing) Install(opts *SyncthingOpts) error { |
| 48 | var err error |
| 49 | err = opts.SetDefault(self.Name) |
| 50 | if err != nil { |
| 51 | return err |
| 52 | } |
| 53 | |
| 54 | var ports []string |
| 55 | |
| 56 | for i := 0; i < 3; i++ { |
| 57 | p, err := core.GetFreePort() |
| 58 | if err != nil { |
| 59 | return err |
| 60 | } |
| 61 | ports = append(ports, p) |
| 62 | } |
| 63 | |
| 64 | opts.hashPassword() |
| 65 | |
| 66 | log.WithFields(log.Fields{ |
| 67 | "plugin": self.Name, |
| 68 | "data_folder": opts.DataFolder, |
| 69 | "config_folder": opts.ConfigFolder, |
| 70 | "username": opts.Username, |
| 71 | "password": opts.Password, |
| 72 | "encrypted_password": opts.EncPassword, |
| 73 | }).Debug("Syncthing options") |
| 74 | |
| 75 | err = os.MkdirAll(opts.ConfigFolder, 0755) |
| 76 | if err != nil { |
| 77 | return err |
| 78 | } |
| 79 | |
| 80 | err = self.WriteTemplate("plugins/syncthing/data/config.xml", opts.ConfigFolder+"/config.xml", opts) |
| 81 | if err != nil { |
| 82 | return err |
| 83 | } |
| 84 | |
| 85 | log.Debugln("Pulling docker image", self.imageName) |
| 86 | err = self.DockerClient.PullImage(docker.PullImageOptions{Repository: self.imageName}, docker.AuthConfiguration{}) |
| 87 | if err != nil { |
| 88 | return err |
| 89 | } |
| 90 | |
| 91 | portBindings := map[docker.Port][]docker.PortBinding{ |
| 92 | "8384/tcp": []docker.PortBinding{docker.PortBinding{HostPort: opts.WebPort}}, |
| 93 | "22000/tcp": []docker.PortBinding{docker.PortBinding{HostPort: ports[1]}}, |
| 94 | "21025/udp": []docker.PortBinding{docker.PortBinding{HostPort: ports[2]}}, |
| 95 | } |
| 96 | |
| 97 | hostConfig := docker.HostConfig{ |
| 98 | PortBindings: portBindings, |
| 99 | Binds: plugins.DefaultBindings(opts), |
| 100 | } |
| 101 | |
| 102 | conf := docker.Config{Env: []string{"PUID=" + opts.User.Uid}, Image: self.imageName} |
| 103 | |
| 104 | log.Infoln("Creating docker container") |
nothing calls this directly
no test coverage detected