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



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

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.



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

def color=(value)
  @color = value
end

#debug=(value) ⇒ Object (writeonly)

Sets the attribute debug

Parameters:

  • value

    the value to set the attribute debug to.



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

def debug=(value)
  @debug = value
end

#emailObject

A GitHub user’s public email.



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

def email
  @email
end

#fde=(value) ⇒ Object (writeonly)

Sets the attribute fde

Parameters:

  • value

    the value to set the attribute fde to.



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

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.



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

def future_parser=(value)
  @future_parser = value
end

#ghurlObject

GitHub location (public or GitHub Enterprise)



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

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.



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

def graph=(value)
  @graph = value
end

#homedirObject

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



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

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.



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

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

#loginObject

A GitHub user login. Default is ‘nil`.



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

def 
  @login
end

#nameObject

A GitHub user’s profile name.



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

def name
  @name
end

#pretend=(value) ⇒ Object (writeonly)

Sets the attribute pretend

Parameters:

  • value

    the value to set the attribute pretend to.



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

def pretend=(value)
  @pretend = value
end

#profile=(value) ⇒ Object (writeonly)

Sets the attribute profile

Parameters:

  • value

    the value to set the attribute profile to.



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

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.



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

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.



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

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.



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

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.



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

def report=(value)
  @report = value
end

#repotemplateObject

Repository URL template (required for GitHub Enterprise)



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

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.



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

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.



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

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

#srcdirObject

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



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

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.



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

def stealth=(value)
  @stealth = value
end

#tokenObject

A GitHub OAuth token. Default is ‘nil`.



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

def token
  @token
end

#userObject

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



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

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
# 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

    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.



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

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.



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

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

#color?Boolean

Returns:

  • (Boolean)


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

def color?
  @color
end

#debug?Boolean

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

Returns:

  • (Boolean)


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

def debug?
  !!@debug
end

#enterprise?Boolean

Does this Boxen use a GitHub Enterprise instance?

Returns:

  • (Boolean)


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

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

#envfileObject

The shell script that loads Boxen’s environment.



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

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)


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

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

#future_parser?Boolean

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

Returns:

  • (Boolean)


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

def future_parser?
  !!@future_parser
end

#graph?Boolean

Enable generation of dependency graphs.

Returns:

  • (Boolean)


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

def graph?
  !!@graph
end

#pretend?Boolean

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

Returns:

  • (Boolean)


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

def pretend?
  !!@pretend
end

#profile?Boolean

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

Returns:

  • (Boolean)


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

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.



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

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)


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

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)


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

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