Class: Boxen::Config
- Inherits:
-
Object
- Object
- Boxen::Config
- 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
-
#color ⇒ Object
writeonly
Sets the attribute color.
-
#debug ⇒ Object
writeonly
Sets the attribute debug.
-
#email ⇒ Object
A GitHub user’s public email.
-
#fde ⇒ Object
writeonly
Sets the attribute fde.
-
#future_parser ⇒ Object
writeonly
Sets the attribute future_parser.
-
#ghurl ⇒ Object
GitHub location (public or GitHub Enterprise).
-
#graph ⇒ Object
writeonly
Sets the attribute graph.
-
#homedir ⇒ Object
Boxen’s home directory.
-
#logfile ⇒ Object
Boxen’s log file.
-
#login ⇒ Object
A GitHub user login.
-
#name ⇒ Object
A GitHub user’s profile name.
-
#pretend ⇒ Object
writeonly
Sets the attribute pretend.
-
#profile ⇒ Object
writeonly
Sets the attribute profile.
-
#puppetdir ⇒ Object
The directory where Puppet expects configuration (which we don’t use) and runtime information (which we generally don’t care about).
-
#repodir ⇒ Object
The directory of the custom Boxen repo for an org.
-
#reponame ⇒ Object
The repo on GitHub to use for error reports and automatic updates, in ‘owner/repo` format.
-
#report ⇒ Object
writeonly
Sets the attribute report.
-
#repotemplate ⇒ Object
Repository URL template (required for GitHub Enterprise).
-
#s3bucket ⇒ Object
The S3 bucket name.
-
#s3host ⇒ Object
The S3 host name.
-
#srcdir ⇒ Object
The directory where repos live.
-
#stealth ⇒ Object
writeonly
Sets the attribute stealth.
-
#token ⇒ Object
A GitHub OAuth token.
-
#user ⇒ Object
A local user login.
Class Method Summary collapse
- .load(&block) ⇒ Object
-
.save(config) ⇒ Object
Save ‘config`.
Instance Method Summary collapse
-
#api ⇒ Object
Create an API instance using the current user creds.
- #color? ⇒ Boolean
-
#debug? ⇒ Boolean
Spew a bunch of debug logging? Default is ‘false`.
-
#enterprise? ⇒ Boolean
Does this Boxen use a GitHub Enterprise instance?.
-
#envfile ⇒ Object
The shell script that loads Boxen’s environment.
-
#fde? ⇒ Boolean
Is full disk encryption required? Default is ‘true`.
-
#future_parser? ⇒ Boolean
Enable the Puppet future parser? Default is ‘false`.
-
#graph? ⇒ Boolean
Enable generation of dependency graphs.
-
#initialize {|_self| ... } ⇒ Config
constructor
Create a new instance.
-
#pretend? ⇒ Boolean
Just go through the motions? Default is ‘false`.
-
#profile? ⇒ Boolean
Run a profiler on Puppet? Default is ‘false`.
-
#projects ⇒ Object
An Array of Boxen::Project entries, one for each project Boxen knows how to manage.
-
#report? ⇒ Boolean
Enable puppet reports ? Default is ‘false`.
-
#stealth? ⇒ Boolean
Don’t auto-create issues on failure? Default is ‘false`.
Constructor Details
#initialize {|_self| ... } ⇒ Config
Create a new instance. Yields ‘self` if `block` is given.
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
310 311 312 |
# File 'lib/boxen/config.rb', line 310 def color=(value) @color = value end |
#debug=(value) ⇒ Object (writeonly)
Sets the attribute debug
100 101 102 |
# File 'lib/boxen/config.rb', line 100 def debug=(value) @debug = value end |
#email ⇒ Object
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
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
170 171 172 |
# File 'lib/boxen/config.rb', line 170 def future_parser=(value) @future_parser = value end |
#ghurl ⇒ Object
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
186 187 188 |
# File 'lib/boxen/config.rb', line 186 def graph=(value) @graph = value end |
#homedir ⇒ Object
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 |
#logfile ⇒ Object
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 |
#login ⇒ Object
A GitHub user login. Default is ‘nil`.
142 143 144 |
# File 'lib/boxen/config.rb', line 142 def login @login end |
#name ⇒ Object
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
154 155 156 |
# File 'lib/boxen/config.rb', line 154 def pretend=(value) @pretend = value end |
#profile=(value) ⇒ Object (writeonly)
Sets the attribute profile
162 163 164 |
# File 'lib/boxen/config.rb', line 162 def profile=(value) @profile = value end |
#puppetdir ⇒ Object
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 |
#repodir ⇒ Object
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 |
#reponame ⇒ Object
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
178 179 180 |
# File 'lib/boxen/config.rb', line 178 def report=(value) @report = value end |
#repotemplate ⇒ Object
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 |
#s3bucket ⇒ Object
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 |
#s3host ⇒ Object
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 |
#srcdir ⇒ Object
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
287 288 289 |
# File 'lib/boxen/config.rb', line 287 def stealth=(value) @stealth = value end |
#token ⇒ Object
A GitHub OAuth token. Default is ‘nil`.
291 292 293 |
# File 'lib/boxen/config.rb', line 291 def token @token end |
#user ⇒ Object
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.login, :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
#api ⇒ Object
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
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`.
96 97 98 |
# File 'lib/boxen/config.rb', line 96 def debug? !!@debug end |
#enterprise? ⇒ Boolean
Does this Boxen use a GitHub Enterprise instance?
267 268 269 |
# File 'lib/boxen/config.rb', line 267 def enterprise? ghurl != "https://github.com" end |
#envfile ⇒ Object
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.
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`.
166 167 168 |
# File 'lib/boxen/config.rb', line 166 def future_parser? !!@future_parser end |
#graph? ⇒ Boolean
Enable generation of dependency graphs.
182 183 184 |
# File 'lib/boxen/config.rb', line 182 def graph? !!@graph end |
#pretend? ⇒ Boolean
Just go through the motions? Default is ‘false`.
150 151 152 |
# File 'lib/boxen/config.rb', line 150 def pretend? !!@pretend end |
#profile? ⇒ Boolean
Run a profiler on Puppet? Default is ‘false`.
158 159 160 |
# File 'lib/boxen/config.rb', line 158 def profile? !!@profile end |
#projects ⇒ Object
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`.
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.
283 284 285 |
# File 'lib/boxen/config.rb', line 283 def stealth? !!ENV["BOXEN_NO_ISSUE"] || @stealth end |