Skip to content

Commit

Permalink
feat(cmd.Init): set init args via ENV variables
Browse files Browse the repository at this point in the history
this is a staring point, but I think all command arguments should
have a corresponding enviornment variable that's prefixed with
QRI_.
  • Loading branch information
b5 committed Dec 14, 2017
1 parent 79371c0 commit 878e7cb
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ RUN mkdir -p $IPFS_PATH && mkdir -p $QRI_PATH \
# VOLUME $QRI_PATH

# Set binary as entrypoint, initalizing ipfs repo if none is mounted
CMD ["qri", "server", "--init-ipfs"]
CMD ["qri", "server", "--init"]
2 changes: 1 addition & 1 deletion api/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func New(r repo.Repo, options ...func(*Config)) (s *Server, err error) {
return nil, fmt.Errorf("error starting P2P service: %s", err.Error())
}
if cfg.PostP2POnlineHook != nil {
cfg.PostP2POnlineHook(s.qriNode)
go cfg.PostP2POnlineHook(s.qriNode)
}
// p2p.PrintSwarmAddrs(qriNode)
return s, nil
Expand Down
35 changes: 33 additions & 2 deletions cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ var (
initIPFSConfigFile string
initIdentityData string
initProfileData string
initDatasetsData string
)

// initCmd represents the init command
Expand All @@ -32,6 +33,13 @@ var initCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
var cfgData []byte

envVars := map[string]*string{
"QRI_INIT_IDENTITY_DATA": &initIdentityData,
"QRI_INIT_PROFILE_DATA": &initProfileData,
"QRI_INIT_DATASETS_DATA": &initDatasetsData,
}
mapEnvVars(envVars)

if QRIRepoInitialized() && !initOverwrite {
// use --overwrite to overwrite this repo, erasing all data and deleting your account for good
ErrExit(fmt.Errorf("repo already initialized."))
Expand All @@ -51,6 +59,17 @@ var initCmd = &cobra.Command{
err := yaml.Unmarshal(cfgData, cfg)
ExitIfErr(err)

if initDatasetsData != "" {
err = readAtFile(&initDatasetsData)
ExitIfErr(err)

datasets := map[string]string{}
err = json.Unmarshal([]byte(initDatasetsData), &datasets)
ExitIfErr(err)

cfg.DefaultDatasets = datasets
}

if err := os.MkdirAll(QriRepoPath, os.ModePerm); err != nil {
ErrExit(fmt.Errorf("error creating home dir: %s\n", err.Error()))
}
Expand All @@ -69,7 +88,7 @@ var initCmd = &cobra.Command{
ExitIfErr(err)

path := filepath.Join(os.TempDir(), "config")
data, err := json.Marshal(DefaaultIPFSConfig(id))
data, err := json.Marshal(DefaultIPFSConfig(id))
ExitIfErr(err)

err = ioutil.WriteFile(path, data, os.ModePerm)
Expand Down Expand Up @@ -109,6 +128,7 @@ func init() {
// initCmd.Flags().StringVarP(&initIPFSConfigFile, "ipfs-config", "", "", "config file for initialization")
initCmd.Flags().StringVarP(&initIdentityData, "id", "", "", "json-encoded identity data, specify a filepath with '@' prefix")
initCmd.Flags().StringVarP(&initProfileData, "profile", "", "", "json-encoded user profile data, specify a filepath with '@' prefix")
initCmd.Flags().StringVarP(&initDatasetsData, "datasets", "", "", "json-encoded object of default datasets")
}

// QRIRepoInitialized checks to see if a repository has been initialized at $QRI_PATH
Expand All @@ -118,6 +138,17 @@ func QRIRepoInitialized() bool {
return !os.IsNotExist(err)
}

func mapEnvVars(vars map[string]*string) {
for envVar, value := range vars {
envVal := os.Getenv(envVar)
fmt.Println("%s=%s", envVar, envVal)
if envVal != "" {
fmt.Println("reading %s from env", envVar)
*value = envVal
}
}
}

func initRepoIfEmpty(repoPath, configPath string) error {
if repoPath != "" {
if _, err := os.Stat(filepath.Join(repoPath, "config")); os.IsNotExist(err) {
Expand Down Expand Up @@ -148,7 +179,7 @@ func readAtFile(data *string) error {
}

// TODO - this is a bit of a hack for the moment, will be removed later
func DefaaultIPFSConfig(identity config.Identity) *config.Config {
func DefaultIPFSConfig(identity config.Identity) *config.Config {
return &config.Config{
Identity: identity,
Datastore: config.Datastore{
Expand Down
14 changes: 9 additions & 5 deletions cmd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ import (
)

var (
serverCmdPort string
serverMemOnly bool
serverOffline bool
serverInitIpfs bool
serverCmdPort string
serverMemOnly bool
serverOffline bool
serverInit bool
)

// serverCmd represents the run command
Expand All @@ -32,6 +32,10 @@ var serverCmd = &cobra.Command{
err error
)

if serverInit && !QRIRepoInitialized() {
initCmd.Run(&cobra.Command{}, []string{})
}

if serverMemOnly {
// TODO - refine, adding better identity generation
// or options for BYO user profile
Expand Down Expand Up @@ -95,7 +99,7 @@ func addDefaultDatasets(node *p2p.QriNode) {

func init() {
serverCmd.Flags().StringVarP(&serverCmdPort, "port", "p", api.DefaultPort, "port to start server on")
// serverCmd.Flags().BoolVarP(&serverInitIpfs, "init-ipfs", "", false, "initialize a new default ipfs repo if empty")
serverCmd.Flags().BoolVarP(&serverInit, "init", "", false, "initialize if necessary, reading options from enviornment variables")
serverCmd.Flags().BoolVarP(&serverMemOnly, "mem-only", "", false, "run qri entirely in-memory, persisting nothing")
serverCmd.Flags().BoolVarP(&serverOffline, "offline", "", false, "disable networking")
RootCmd.AddCommand(serverCmd)
Expand Down

0 comments on commit 878e7cb

Please sign in to comment.