Class: Boxen::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/boxen/config.rb

Overview

All configuration for Boxen, whether it’s loaded from command-line args, environment variables, config files, or the keychain.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize {|_self| ... } ⇒ Config

Create a new instance. Yields ‘self` if `block` is given.

Yields:

  • (_self)

Yield Parameters:

  • _self (Boxen::Config)

    the object that the method was called on



86
87
88
89
90
91
# File 'lib/boxen/config.rb', line 86

def initialize(&block)
  @fde  = true
  @pull = true

  yield self if block_given?
end

Instance Attribute Details

#color=(value) ⇒ Object (writeonly)

Sets the attribute color

Parameters:

  • value

    the value to set the attribute color to.



316
317
318
# File 'lib/boxen/config.rb', line 316

def color=(value)
  @color = value
end

#debug=(value) ⇒ Object (writeonly)

Sets the attribute debug

Parameters:

  • value

    the value to set the attribute debug to.



106
107
108
# File 'lib/boxen/config.rb', line 106

def debug=(value)
  @debug = value
end

#emailObject

A GitHub user’s public email.



110
111
112
# File 'lib/boxen/config.rb', line 110

def email
  @email
end

#fde=(value) ⇒ Object (writeonly)

Sets the attribute fde

Parameters:

  • value

    the value to set the attribute fde to.



125
126
127
# File 'lib/boxen/config.rb', line 125

def fde=(value)
  @fde = value
end

#future_parser=(value) ⇒ Object (writeonly)

Sets the attribute future_parser

Parameters:

  • value

    the value to set the attribute future_parser to.



176
177
178
# File 'lib/boxen/config.rb', line 176

def future_parser=(value)
  @future_parser = value
end

#ghurlObject

GitHub location (public or GitHub Enterprise)



256
257
258
# File 'lib/boxen/config.rb', line 256

def ghurl
  @ghurl || ENV["BOXEN_GITHUB_ENTERPRISE_URL"] || "https://github.com"
end

#graph=(value) ⇒ Object (writeonly)

Sets the attribute graph

Parameters:

  • value

    the value to set the attribute graph to.



192
193
194
# File 'lib/boxen/config.rb', line 192

def graph=(value)
  @graph = value
end

#homedirObject

Boxen’s home directory. Default is ‘“/opt/boxen”`. Respects the `BOXEN_HOME` environment variable.



130
131
132
# File 'lib/boxen/config.rb', line 130

def homedir
  @homedir || ENV["BOXEN_HOME"] || "/opt/boxen"
end

#logfileObject

Boxen’s log file. Default is ‘“##repodir/log/boxen.log”`. Respects the `BOXEN_LOG_FILE` environment variable. The log is overwritten on every run.



140
141
142
# File 'lib/boxen/config.rb', line 140

def logfile
  @logfile || ENV["BOXEN_LOG_FILE"] || "#{repodir}/log/boxen.log"
end

#loginObject

A GitHub user login. Default is ‘nil`.



148
149
150
# File 'lib/boxen/config.rb', line 148

def 
  @login
end

#nameObject

A GitHub user’s profile name.



152
153
154
# File 'lib/boxen/config.rb', line 152

def name
  @name
end

#pretend=(value) ⇒ Object (writeonly)

Sets the attribute pretend

Parameters:

  • value

    the value to set the attribute pretend to.



160
161
162
# File 'lib/boxen/config.rb', line 160

def pretend=(value)
  @pretend = value
end

#profile=(value) ⇒ Object (writeonly)

Sets the attribute profile

Parameters:

  • value

    the value to set the attribute profile to.



168
169
170
# File 'lib/boxen/config.rb', line 168

def profile=(value)
  @profile = value
end

#puppetdirObject

The directory where Puppet expects configuration (which we don’t use) and runtime information (which we generally don’t care about). Default is ‘/tmp/boxen/puppet`. Respects the `BOXEN_PUPPET_DIR` environment variable.



216
217
218
# File 'lib/boxen/config.rb', line 216

def puppetdir
  @puppetdir || ENV["BOXEN_PUPPET_DIR"] || "/tmp/boxen/puppet"
end

#repodirObject

The directory of the custom Boxen repo for an org. Default is ‘Dir.pwd`. Respects the `BOXEN_REPO_DIR` environment variable.



225
226
227
# File 'lib/boxen/config.rb', line 225

def repodir
  @repodir || ENV["BOXEN_REPO_DIR"] || Dir.pwd
end

#reponameObject

The repo on GitHub to use for error reports and automatic updates, in ‘owner/repo` format. Default is the `origin` of a Git repo in `repodir`, if it exists and points at GitHub. Respects the `BOXEN_REPO_NAME` environment variable.



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# File 'lib/boxen/config.rb', line 236

def reponame
  override = @reponame || ENV["BOXEN_REPO_NAME"]
  return override unless override.nil?

  if File.directory? repodir
    ghuri = URI(ghurl)
    url = Dir.chdir(repodir) { `git config remote.origin.url`.strip }

    # find the path and strip off the .git suffix
    repo_exp = Regexp.new Regexp.escape(ghuri.host) + "[/:]([^/]+/[^/]+)"
    if $?.success? && repo_exp.match(url)
      @reponame = $1.sub /\.git$/, ""
    end
  end
end

#report=(value) ⇒ Object (writeonly)

Sets the attribute report

Parameters:

  • value

    the value to set the attribute report to.



184
185
186
# File 'lib/boxen/config.rb', line 184

def report=(value)
  @report = value
end

#repotemplateObject

Repository URL template (required for GitHub Enterprise)



264
265
266
267
# File 'lib/boxen/config.rb', line 264

def repotemplate
  default = 'https://github.com/%s'
  @repotemplate || ENV["BOXEN_REPO_URL_TEMPLATE"] || default
end

#s3bucketObject

The S3 bucket name. Default is ‘“boxen-downloads”`. Respects the `BOXEN_S3_BUCKET` environment variable.



330
331
332
# File 'lib/boxen/config.rb', line 330

def s3bucket
  @s3bucket || ENV["BOXEN_S3_BUCKET"] || "boxen-downloads"
end

#s3hostObject

The S3 host name. Default is ‘“s3.amazonaws.com”`. Respects the `BOXEN_S3_HOST` environment variable.



321
322
323
# File 'lib/boxen/config.rb', line 321

def s3host
  @s3host || ENV["BOXEN_S3_HOST"] || "s3.amazonaws.com"
end

#srcdirObject

The directory where repos live. Default is ‘“/Users/##user/src”`.



280
281
282
# File 'lib/boxen/config.rb', line 280

def srcdir
  @srcdir || ENV["BOXEN_SRC_DIR"] || "/Users/#{user}/src"
end

#stealth=(value) ⇒ Object (writeonly)

Sets the attribute stealth

Parameters:

  • value

    the value to set the attribute stealth to.



293
294
295
# File 'lib/boxen/config.rb', line 293

def stealth=(value)
  @stealth = value
end

#tokenObject

A GitHub OAuth token. Default is ‘nil`.



297
298
299
# File 'lib/boxen/config.rb', line 297

def token
  @token
end

#userObject

A local user login. Default is the ‘USER` environment variable.



306
307
308
# File 'lib/boxen/config.rb', line 306

def user
  @user || ENV["USER"]
end

Class Method Details

.load(&block) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/boxen/config.rb', line 14

def self.load(&block)
  new do |config|
    file = "#{config.homedir}/config/boxen/defaults.json"

    if File.file? file
      attrs = JSON.parse File.read file

      attrs.each do |key, value|
        if !value.nil? && config.respond_to?(selector = "#{key}=")
          config.send selector, value
        end
      end
    end

    if Boxen::Util.osx?
      keychain     = Boxen::Keychain.new config.user
      config.token = keychain.token
    else
      config.token = ''
    end

    if config.enterprise?
      # configure to talk to GitHub Enterprise
      Octokit.configure do |c|
        c.api_endpoint = "#{config.ghurl}/api/v3"
        c.web_endpoint = config.ghurl
      end
    end

    yield config if block_given?
  end
end

.save(config) ⇒ Object

Save ‘config`. Returns `config`. Note that this only saves data, not flags. For example, `login` will be saved, but `stealth?` won’t.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/boxen/config.rb', line 51

def self.save(config)
  attrs = {
    :email        => config.email,
    :fde          => config.fde?,
    :homedir      => config.homedir,
    :login        => config.,
    :name         => config.name,
    :puppetdir    => config.puppetdir,
    :repodir      => config.repodir,
    :reponame     => config.reponame,
    :ghurl        => config.ghurl,
    :srcdir       => config.srcdir,
    :user         => config.user,
    :repotemplate => config.repotemplate,
    :s3host       => config.s3host,
    :s3bucket     => config.s3bucket
  }

  file = "#{config.homedir}/config/boxen/defaults.json"
  FileUtils.mkdir_p File.dirname file

  File.open file, "wb" do |f|
    f.write JSON.generate Hash[attrs.reject { |k, v| v.nil? }]
  end

  if Boxen::Util.osx?
    keychain       = Boxen::Keychain.new config.user
    keychain.token = config.token
  end

  config
end

Instance Method Details

#apiObject

Create an API instance using the current user creds. A new instance is created any time ‘token` changes.



96
97
98
# File 'lib/boxen/config.rb', line 96

def api
  @api ||= Octokit::Client.new :login => token, :password => 'x-oauth-basic'
end

#color?Boolean

Returns:

  • (Boolean)


312
313
314
# File 'lib/boxen/config.rb', line 312

def color?
  @color
end

#debug?Boolean

Spew a bunch of debug logging? Default is ‘false`.

Returns:

  • (Boolean)


102
103
104
# File 'lib/boxen/config.rb', line 102

def debug?
  !!@debug
end

#enterprise?Boolean

Does this Boxen use a GitHub Enterprise instance?

Returns:

  • (Boolean)


273
274
275
# File 'lib/boxen/config.rb', line 273

def enterprise?
  ghurl != "https://github.com"
end

#envfileObject

The shell script that loads Boxen’s environment.



114
115
116
# File 'lib/boxen/config.rb', line 114

def envfile
  "#{homedir}/env.sh"
end

#fde?Boolean

Is full disk encryption required? Default is ‘true`. Respects the `BOXEN_NO_FDE` environment variable.

Returns:

  • (Boolean)


121
122
123
# File 'lib/boxen/config.rb', line 121

def fde?
  !ENV["BOXEN_NO_FDE"] && @fde
end

#future_parser?Boolean

Enable the Puppet future parser? Default is ‘false`.

Returns:

  • (Boolean)


172
173
174
# File 'lib/boxen/config.rb', line 172

def future_parser?
  !!@future_parser
end

#graph?Boolean

Enable generation of dependency graphs.

Returns:

  • (Boolean)


188
189
190
# File 'lib/boxen/config.rb', line 188

def graph?
  !!@graph
end

#pretend?Boolean

Just go through the motions? Default is ‘false`.

Returns:

  • (Boolean)


156
157
158
# File 'lib/boxen/config.rb', line 156

def pretend?
  !!@pretend
end

#profile?Boolean

Run a profiler on Puppet? Default is ‘false`.

Returns:

  • (Boolean)


164
165
166
# File 'lib/boxen/config.rb', line 164

def profile?
  !!@profile
end

#projectsObject

An Array of Boxen::Project entries, one for each project Boxen knows how to manage.

FIX: Revisit this once we restructure template projects. It’s broken for several reasons: It assumes paths that won’t be right, and it assumes projects live in the same repo as this file.



202
203
204
205
206
207
208
209
# File 'lib/boxen/config.rb', line 202

def projects
  files = Dir["#{repodir}/modules/projects/manifests/*.pp"]
  names = files.map { |m| File.basename m, ".pp" }.sort

  names.map do |name|
    Boxen::Project.new "#{srcdir}/#{name}"
  end
end

#report?Boolean

Enable puppet reports ? Default is ‘false`.

Returns:

  • (Boolean)


180
181
182
# File 'lib/boxen/config.rb', line 180

def report?
  !!@report
end

#stealth?Boolean

Don’t auto-create issues on failure? Default is ‘false`. Respects the `BOXEN_NO_ISSUE` environment variable.

Returns:

  • (Boolean)


289
290
291
# File 'lib/boxen/config.rb', line 289

def stealth?
  !!ENV["BOXEN_NO_ISSUE"] || @stealth
end