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



81
82
83
84
85
86
# File 'lib/boxen/config.rb', line 81

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.



323
324
325
# File 'lib/boxen/config.rb', line 323

def color=(value)
  @color = value
end

#debug=(value) ⇒ Object (writeonly)

Sets the attribute debug

Parameters:

  • value

    the value to set the attribute debug to.



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

def debug=(value)
  @debug = value
end

#emailObject

A GitHub user’s public email.



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

def email
  @email
end

#fde=(value) ⇒ Object (writeonly)

Sets the attribute fde

Parameters:

  • value

    the value to set the attribute fde to.



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

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.



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

def future_parser=(value)
  @future_parser = value
end

#ghurlObject

GitHub location (public or GitHub Enterprise)



251
252
253
# File 'lib/boxen/config.rb', line 251

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.



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

def graph=(value)
  @graph = value
end

#homedirObject

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



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

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.



135
136
137
# File 'lib/boxen/config.rb', line 135

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

#loginObject

A GitHub user login. Default is nil.



143
144
145
# File 'lib/boxen/config.rb', line 143

def 
  @login
end

#nameObject

A GitHub user’s profile name.



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

def name
  @name
end

#pretend=(value) ⇒ Object (writeonly)

Sets the attribute pretend

Parameters:

  • value

    the value to set the attribute pretend to.



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

def pretend=(value)
  @pretend = value
end

#profile=(value) ⇒ Object (writeonly)

Sets the attribute profile

Parameters:

  • value

    the value to set the attribute profile to.



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

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.



211
212
213
# File 'lib/boxen/config.rb', line 211

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.



220
221
222
# File 'lib/boxen/config.rb', line 220

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.



231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# File 'lib/boxen/config.rb', line 231

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.



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

def report=(value)
  @report = value
end

#repotemplateObject

Repository URL template (required for GitHub Enterprise)



259
260
261
262
# File 'lib/boxen/config.rb', line 259

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.



337
338
339
# File 'lib/boxen/config.rb', line 337

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.



328
329
330
# File 'lib/boxen/config.rb', line 328

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

#srcdirObject

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



275
276
277
# File 'lib/boxen/config.rb', line 275

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.



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

def stealth=(value)
  @stealth = value
end

#tokenObject

A GitHub OAuth token. Default is nil.



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

def token
  @token
end

#userObject

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



301
302
303
# File 'lib/boxen/config.rb', line 301

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

Class Method Details

.load(&block) ⇒ Object



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
# File 'lib/boxen/config.rb', line 15

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

    keychain        = Boxen::Keychain.new config.user
    config.token    = keychain.token

    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.



48
49
50
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
# File 'lib/boxen/config.rb', line 48

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

  keychain          = Boxen::Keychain.new config.user
  keychain.token    = config.token

  config
end

Instance Method Details

#apiObject

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



91
92
93
# File 'lib/boxen/config.rb', line 91

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

#color?Boolean

Returns:

  • (Boolean)


319
320
321
# File 'lib/boxen/config.rb', line 319

def color?
  @color
end

#debug?Boolean

Spew a bunch of debug logging? Default is false.

Returns:

  • (Boolean)


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

def debug?
  !!@debug
end

#enterprise?Boolean

Does this Boxen use a GitHub Enterprise instance?

Returns:

  • (Boolean)


268
269
270
# File 'lib/boxen/config.rb', line 268

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

#envfileObject

The shell script that loads Boxen’s environment.



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

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)


116
117
118
# File 'lib/boxen/config.rb', line 116

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

#future_parser?Boolean

Enable the Puppet future parser? Default is false.

Returns:

  • (Boolean)


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

def future_parser?
  !!@future_parser
end

#graph?Boolean

Enable generation of dependency graphs.

Returns:

  • (Boolean)


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

def graph?
  !!@graph
end

#groupObject



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

def group
  @group || Etc.getgrgid(Etc.getpwnam(user).gid).name
end

#pretend?Boolean

Just go through the motions? Default is false.

Returns:

  • (Boolean)


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

def pretend?
  !!@pretend
end

#profile?Boolean

Run a profiler on Puppet? Default is false.

Returns:

  • (Boolean)


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

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.



197
198
199
200
201
202
203
204
# File 'lib/boxen/config.rb', line 197

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)


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

def report?
  !!@report
end

#rootgroupObject



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

def rootgroup
  @rootgroup || Etc.getgrgid(0).name
end

#rootuserObject



309
310
311
# File 'lib/boxen/config.rb', line 309

def rootuser
  @rootuser || Etc.getpwuid(0).name
end

#stealth?Boolean

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

Returns:

  • (Boolean)


284
285
286
# File 'lib/boxen/config.rb', line 284

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