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



78
79
80
81
82
83
# File 'lib/boxen/config.rb', line 78

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

  yield self if block_given?
end

Instance Attribute Details

#color=(value) ⇒ Object (writeonly)

Sets the attribute color



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

def color=(value)
  @color = value
end

#debug=(value) ⇒ Object (writeonly)

Sets the attribute debug



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

def debug=(value)
  @debug = value
end

#emailObject

A GitHub user’s public email.



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

def email
  @email
end

#fde=(value) ⇒ Object (writeonly)

Sets the attribute fde



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

def fde=(value)
  @fde = value
end

#future_parser=(value) ⇒ Object (writeonly)

Sets the attribute future_parser



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

def future_parser=(value)
  @future_parser = value
end

#ghurlObject

GitHub location (public or GitHub Enterprise)



240
241
242
# File 'lib/boxen/config.rb', line 240

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

#homedirObject

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



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

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.



132
133
134
# File 'lib/boxen/config.rb', line 132

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

#loginObject

A GitHub user login. Default is nil.



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

def 
  @login
end

#nameObject

A GitHub user’s profile name.



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

def name
  @name
end

#pretend=(value) ⇒ Object (writeonly)

Sets the attribute pretend



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

def pretend=(value)
  @pretend = value
end

#profile=(value) ⇒ Object (writeonly)

Sets the attribute profile



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

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.



200
201
202
# File 'lib/boxen/config.rb', line 200

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.



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

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.



220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'lib/boxen/config.rb', line 220

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



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

def report=(value)
  @report = value
end

#repotemplateObject

Repository URL template (required for GitHub Enterprise)



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

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

#srcdirObject

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



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

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

#stealth=(value) ⇒ Object (writeonly)

Sets the attribute stealth



277
278
279
# File 'lib/boxen/config.rb', line 277

def stealth=(value)
  @stealth = value
end

#tokenObject

A GitHub OAuth token. Default is nil.



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

def token
  @token
end

#userObject

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



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

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

  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.



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

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

#color?Boolean



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

def color?
  @color
end

#debug?Boolean

Spew a bunch of debug logging? Default is false.



94
95
96
# File 'lib/boxen/config.rb', line 94

def debug?
  !!@debug
end

#enterprise?Boolean

Does this Boxen use a GitHub Enterprise instance?



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

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

#envfileObject

The shell script that loads Boxen’s environment.



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

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

#fde?Boolean

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



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

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

#future_parser?Boolean

Enable the Puppet future parser? Default is false.



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

def future_parser?
  !!@future_parser
end

#pretend?Boolean

Just go through the motions? Default is false.



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

def pretend?
  !!@pretend
end

#profile?Boolean

Run a profiler on Puppet? Default is false.



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

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.



186
187
188
189
190
191
192
193
# File 'lib/boxen/config.rb', line 186

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.



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

def report?
  !!@report
end

#stealth?Boolean

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



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

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