Commit Graph

2223 Commits

Author SHA1 Message Date
Mitchell Hashimoto 5903bfb3c6 commands/push: validate configuration
/cc @sethvargo - Some weirdness here but overall should work fine. I'm
not sure if there was a GH issue this should be attached to or close. To
explain:

We just use the first machine with the default provider. A
Vagrant::Environment guarantees there is at least one machine, so
`env.machine_names.first` will always work. And we can just use the
default provider because we don't really care. Finally, it can be any
old machine we pass in because we just want the "global" config to
validate and there is no way to say "don't validate machine-specific
configs", so we might as well just pick the first machine to validate.
2015-01-04 15:43:30 -08:00
Seth Vargo f11ec8ff1a Make parent directories when uploading to FTP 2015-01-04 18:06:51 -05:00
Seth Vargo 6a3d99a9a2 Output to the UI when uploading via FTP 2015-01-04 18:06:32 -05:00
Seth Vargo 50c1c0756e Expand file paths relative to the root_path 2015-01-04 18:06:22 -05:00
Seth Vargo fd3c1c6ebb Add a logger when uploading to FTP 2015-01-04 18:06:05 -05:00
Seth Vargo e330875303 Exclude certain directories by default 2015-01-04 18:05:46 -05:00
Seth Vargo e7391359e8 Remove duplicate #parse_host method 2015-01-04 18:05:17 -05:00
Seth Vargo 944853ab47 Use 21 for the default port 2015-01-04 16:24:26 -05:00
Tomas Srnka 2620042c26 Fix catching "Start-VM" exceptions on Hyper-V during starting up VM 2015-01-04 00:05:50 +01:00
William Kolean 084d2c06de enable symlinks before adding shared folder 2015-01-01 16:00:17 -05:00
Evgeny Vereshchagin 43bb715c00 Enable provision with --provision-with flag 2014-12-30 06:10:52 +03:00
Seth Vargo 97d5a6ebfc Log chef-zero instead of chef-solo 2014-12-28 12:52:54 -05:00
evverx 1cfc5acea3 Update Chef plugin description 2014-12-24 03:53:29 +03:00
Masahiro Ono 55a90445cd Fix new-style Network Device Naming on CentOS7+VMwarefusion 2014-12-21 16:25:11 +09:00
Mikhail Zholobov e828927cee providers/virtualbox: Add 'post-comm' to the list of valid events 2014-12-21 01:09:55 +03:00
Seth Vargo 5efb30653e Merge pull request #4898 from athak/patch-solaris-rsync
rsynced folders don't work with Solaris based OS
2014-12-18 10:30:13 -05:00
Torben Knerr f2b494c2cc don't forget to pass the `installer_download_path` from the config! 2014-12-17 00:48:34 +01:00
Torben Knerr acc4e3806f pass the `download_path` parameter to the `:chef_install` capability so it is available when `Omnibus.build_command(..)` is invoked 2014-12-16 23:40:22 +01:00
Torben Knerr d7bd65b4e2 extend the omnibus command builder with an additional download_path parameter 2014-12-16 23:29:47 +01:00
Torben Knerr 9e7f705bad extend the Chef provisioner base config object with an 'installer_download_path' property 2014-12-16 22:40:19 +01:00
Shawn Neal 2785fd14db Merge pull request #4996 from mitchellh/4976-fix-guest-autodetection-with-windows-guests
4976 fix guest autodetection with windows guests
2014-12-16 11:47:05 -08:00
Seth Vargo 954289beb6 Use new Chef Omnibus URL 2014-12-16 12:16:08 -05:00
Shawn Neal c4422d7c70 Fix guest autodetection when running windows guests so Vagrant doesn't think the guest is Ubuntu 2014-12-16 08:20:01 -08:00
Barry Kelly 185740163c Don't reorder config in /etc/network/interfaces 2014-12-15 19:21:22 +00:00
Seth Vargo bce0d1acc9 Pushes are strings 2014-12-15 01:29:58 -05:00
Mitchell Hashimoto 4efb401050 kernel/v2: push config keys on strategy
/cc @sethvargo - This adds more tests that fail if this change isn't in
place.
2014-12-14 22:24:14 -08:00
Seth Vargo 8c8a92c4be Merge pull request #4896 from analyzere/salt-grains-config
Issue #4895: Support grains config for salt
2014-12-14 23:48:02 -05:00
Seth Vargo c0d4b39eea Force opts to be options
cb6f3e5 introduced a change to the method airty of machine actions to remove the
`extra_env` attribute.

- Fixes #4960
2014-12-14 23:46:39 -05:00
Seth Vargo 214a79e057 Pushes are hashed by name, not strategy.
@mitchellh this is a partial revert of 84ae22e. It took me a little bit
to figure out why this broke everything, but then I finally realized it.

84ae22e changes the finalize! function to lookup pushes by strategy
type, but pushes are keyed by push strategy name. In other words, given:

    config.push.define("foo", strategy: "bar")

the `push_configs` has will look like:


    { :foo => [:bar, #<PushConfig>] }

This is important, because if we key by strategy, the user cannot 
specify the same push strategy more than once:

    config.push.define("foo", strategy: "bar")
    config.push.define("zip", strategy: "bar")

If we keyed off of the strategy, this would be impossible.
2014-12-14 23:32:32 -05:00
Douézan-Grard Guillaume 9d1834a3c9 Fix line breaks 2014-12-13 21:08:31 +01:00
Mitchell Hashimoto fdd7bc3ffd commands/login: append access token to vagrantcloud => atlas URLs 2014-12-12 14:53:05 -08:00
Mitchell Hashimoto 84ae22e976 kernel/v2: fix push strategy config lookup 2014-12-12 01:36:39 -08:00
Mitchell Hashimoto 669c9fc013 commands/push: push strategy should be string 2014-12-12 01:27:22 -08:00
Mitchell Hashimoto e212b31394 Merge pull request #4905 from mitchellh/gc-fix-docker-agent-forwarding
providers/docker: fix support of agent forwarding
2014-12-11 17:21:59 -08:00
Mitchell Hashimoto a3a41fe3bc Merge pull request #4906 from mitchellh/gc-4071-docker-ansible
provisioners/ansible: use Docker proxy when needed
2014-12-11 17:20:41 -08:00
Seth Vargo 6596f7f29d Merge pull request #4937 from mitchellh/sethvargo/error_format
Use the new Rails error format
2014-12-11 16:54:45 -08:00
Max Lincoln 3e8fdc0ca4 WinRM SSL support 2014-12-11 15:07:34 -05:00
Max Lincoln 0b30dcd078 Merge branch 'winrmssl' into winrm_error_handling
Conflicts:
	test/unit/plugins/communicators/winrm/shell_test.rb
2014-12-11 14:11:06 -05:00
Max Lincoln 234adaae63 WinRM SSL support 2014-12-11 14:09:17 -05:00
Max Lincoln b5a9477405 Fix default forwarded ports 2014-12-11 13:39:24 -05:00
Max Lincoln e7e50d39d9 Fix tests - all pass but auth retry test is extremely slow 2014-12-11 13:23:40 -05:00
Max Lincoln 24de8a1fb7 Just use ready? 2014-12-11 13:22:39 -05:00
Max Lincoln ba7b964b1e Better error handling for WinRM (using winrm v1.3.0.dev.2) 2014-12-11 13:22:39 -05:00
Max Lincoln 24f919c4d3 Fix accessors used by in communicator.rb 2014-12-11 13:22:39 -05:00
Max Lincoln 62ddd92768 Only forward one port for winrm 2014-12-11 13:22:39 -05:00
Max Lincoln 2caaf82ae0 Change default transport back to :plaintext, for backwards compatibility 2014-12-11 13:21:58 -05:00
Max Lincoln 02f4adc895 Fix broken variable references 2014-12-11 13:21:58 -05:00
Max Lincoln 072bb26a30 Change @ssl to @transport 2014-12-11 13:21:58 -05:00
Max Lincoln b3480049ad DRY the Shell: Don't duplicate the Config, especially since there were differing default values 2014-12-11 13:21:58 -05:00
Max Lincoln 1beb221bf3 Rename no_ssl_peer_verification to ssl_peer_verification, and make it configurable 2014-12-11 13:21:58 -05:00
Peter Ericson 243cc5dc37 config.rb: set default port based on @ssl 2014-12-11 13:20:22 -05:00
Peter Ericson 52d8fddf38 shell.rb: fix precedence 2014-12-11 13:20:22 -05:00
Peter Ericson 2f52a9c15c Add winrmssl port forward (port 5986) 2014-12-11 13:20:22 -05:00
Peter Ericson 4455d2401b Add ssl option to winrm config.rb 2014-12-11 13:19:09 -05:00
Peter Ericson a99d32f60a Add WinRM over SSL support 2014-12-11 13:19:09 -05:00
Seth Vargo 9a575a79ec Use the new Rails error format 2014-12-11 01:21:46 -08:00
Seth Vargo 0506e17778 Update Atlas Push to use new vagrant-login API 2014-12-10 15:11:04 -08:00
Seth Vargo 7d6a6cd263 Read the ATLAS_TOKEN in vagrant-login 2014-12-10 15:08:43 -08:00
Mitchell Hashimoto ed688ec775 Merge pull request #4929 from kalifg/master
Add back creation of mount point
2014-12-10 09:18:42 -08:00
Mitchell Hashimoto 2a285d7655 hosts/bad: escape regexp properly [GH-4922] 2014-12-10 09:16:45 -08:00
Michael Dwyer e65ae7b543 Add back creation of mount point
Accidentally removed in ad4b30dd
2014-12-10 10:56:30 -06:00
Mitchell Hashimoto 02a615a646 Merge remote-tracking branch 'upcoming/master' 2014-12-09 16:18:18 -08:00
Seth Vargo bb7b954a5f Use the new namespace in Atlas config 2014-12-08 22:06:41 -08:00
Seth Vargo 62065e013a Read and return login errors from Atlas 2014-12-08 18:26:36 -08:00
Seth Vargo 3d8a1ec3fc Fix some rename shit 2014-12-08 18:26:36 -08:00
Seth Vargo b973186cb5 Add vagrant-login to core ;) 2014-12-08 18:26:36 -08:00
Seth Vargo 2e4f854725 Vagrant Cloud -> Atlas 2014-12-08 17:42:29 -08:00
Seth Vargo fa7cd37e42 Send the Atlas token 2014-12-08 16:54:19 -08:00
Gilles Cornu 118e223c33 provisioners/ansible: use Docker proxy when needed
Close #4071

Credits and best thanks to @jabclab
2014-12-08 21:43:21 +01:00
Gilles Cornu 15679f76f8 Merge pull request #4883 from mitchellh/gc-vagrant-1.7-ansible-provisioner
Non-trivial changes and bug fixes for the Ansible provisioner
2014-12-08 21:29:24 +01:00
Seth Vargo 9e5b587e66 Re-add TODO 2014-12-08 11:35:15 -08:00
Seth Vargo 70b61047c7 Do not support multiple strategies right now 2014-12-08 11:35:15 -08:00
Seth Vargo 6b48199346 Infer push name when only one strategy is defined, support multiple strategies 2014-12-08 11:35:15 -08:00
Mitchell Hashimoto 4a64da5663 Fix some issues around push, fix tests, add missing translations 2014-12-08 11:35:15 -08:00
Mitchell Hashimoto 44e6ec6df8 pushes/atlas: support custom server address 2014-12-08 11:35:15 -08:00
Mitchell Hashimoto 998c5688e8 pushes/atlas: Look for the uploader bin in the embedded dir 2014-12-08 11:35:15 -08:00
Seth Vargo ede14d7daa Separate local-exec push `script` from `inline` 2014-12-08 11:35:14 -08:00
Seth Vargo 612eeb2265 Add local-exec push 2014-12-08 11:35:14 -08:00
Seth Vargo 9d1a43c766 Interpret the app from the CWD 2014-12-08 11:35:14 -08:00
Seth Vargo 7e3de3951e Do not check for a branch until after we have found git 2014-12-08 11:35:14 -08:00
Seth Vargo b9e8f6e892 Interpret the current branch to push to Heroku 2014-12-08 11:35:14 -08:00
Seth Vargo 1f49b7ef62 Remove branch option (it should be interpreted) 2014-12-08 11:35:14 -08:00
Seth Vargo ce380a3b12 Remove safe_exec (not being used) 2014-12-08 11:35:13 -08:00
Seth Vargo 4282fcf55e Add heroku push plugin file 2014-12-08 11:35:13 -08:00
Seth Vargo c16dc5c9c9 Add heroku push implementation 2014-12-08 11:35:13 -08:00
Seth Vargo d4058130e4 Add heroku config 2014-12-08 11:35:13 -08:00
Seth Vargo fb05563762 Load the translations in Atlas 2014-12-08 11:35:13 -08:00
Seth Vargo 1d7f4f26be Provide a better error message for the FTP push 2014-12-08 11:35:13 -08:00
Seth Vargo dc8b36b31d Allow = methods for include and exclude 2014-12-08 11:35:13 -08:00
Seth Vargo ed605c9aac Rename Harmony to Atlas, minor config changes 2014-12-08 11:35:13 -08:00
Seth Vargo c8bdf53c7e Rename push environment to env 2014-12-08 11:35:12 -08:00
Seth Vargo 8aaf5dc578 Add the FTP push 2014-12-08 11:35:12 -08:00
Seth Vargo 80851a887f Create an Adapter to bridge the APIs between SFTP and FTP libraries 2014-12-08 11:35:12 -08:00
Seth Vargo eb5cecc782 Create ftp push plugin with custom i18n loading 2014-12-08 11:35:12 -08:00
Seth Vargo b90253ea8c Create ftp push config 2014-12-08 11:35:12 -08:00
Mitchell Hashimoto 913dafd3aa pushes/harmony: remove unneceessary if 2014-12-08 11:35:12 -08:00
Mitchell Hashimoto 81f748347e pushes/harmony: fixes from @sethvargo 2014-12-08 11:35:12 -08:00
Mitchell Hashimoto fefaa8da71 pushes/harmony: use to_s.strip.empty? to check if app is set 2014-12-08 11:35:12 -08:00
Mitchell Hashimoto 1705460880 pushes/harmony: expand dir relative to Vagrantfile root path 2014-12-08 11:35:12 -08:00
Mitchell Hashimoto f3f4f4aeb6 pushes/harmony: stub I18n 2014-12-08 11:35:12 -08:00
Mitchell Hashimoto efffc5f2f7 push/harmony: basic push implementation 2014-12-08 11:35:11 -08:00
Mitchell Hashimoto 168715ad7d push/harmony: ability to set uploader path 2014-12-08 11:35:11 -08:00
Mitchell Hashimoto e7b0661a93 pushes/harmony: boilerplate, config 2014-12-08 11:35:11 -08:00
Seth Vargo 9af7675bd3 Use a more readable version for setter 2014-12-08 11:35:11 -08:00
Seth Vargo 1121e96cf7 Remove TODO comment about duplicate code 2014-12-08 11:35:11 -08:00
Seth Vargo 411c7d6f75 Define finalize! and __compiled_pushes for Push config 2014-12-08 11:35:11 -08:00
Seth Vargo 190da26404 Push does not have access to @machine 2014-12-08 11:35:10 -08:00
Seth Vargo 03b8105571 Super primitive implementation of Environment#push 2014-12-08 11:35:10 -08:00
Seth Vargo b6c5ca6b7a Add Push command and tests 2014-12-08 11:35:10 -08:00
Seth Vargo 0e824cc471 Rename file push to noop push 2014-12-08 11:35:09 -08:00
Seth Vargo 8a7e546972 Add preliminary File pusher (incomplete) 2014-12-08 11:35:09 -08:00
Atha Kouroussis 9e9362d976 Fix broken rsync cap for Solaris guests 2014-12-08 09:42:13 -05:00
Gilles Cornu 3800103228 provisioners/ansible: improve comment wording
Get rid of the Joker, thanks to @maspwr :)
2014-12-07 22:34:19 +01:00
Gilles Cornu 40a22ff99a providers/docker: fix support of agent forwarding 2014-12-07 11:02:50 +01:00
Jeff Quast c6cce57ff4 Avoid double-newlines in salt-call output
When using the salt provisioner with verbose=true, most lines read with an extra newline:
```
[INFO    ] Syncing modules for environment 'base'

[INFO    ] Loading cache from salt://_modules, for base)

```

because the line read has a newline, and emitting the log entry again includes an additional newline.
2014-12-03 21:48:30 -08:00
Ken Crowell 72afdce630 Issue #4895: Support grains config for salt 2014-12-02 18:01:09 -04:00
Paul Hinze 25ff636ee2 providers/virtualbox: cleanup default vbox dhcp server
fixes #3083

Detect the presence of the default DHCP server that comes in a fresh
VirtualBox install and clean it up to prevent it from colliding with
Vagrant-managed network config.

In order to accomplish this, we:

 - add a `remove_dhcp_server` call to the virtualbox driver
 - fix dhcp options parsing to allow `:dhcp_{ip,lower,upper}`
   configuration options to make it through (so a user can override the
   removal behavior with some explicit configuration)
 - add the full `:network_name` to the details returned from
   `:read_dhcp_servers`, so we can have a durable value to pass to
   `:remove_dhcp_server`

Note that we do have to eat one more `VBoxManage list dhcpservers` for
each network interface to support this, but this seemed like a nominal
cost
2014-11-30 22:03:52 -06:00
Paul Hinze 24b6f21d1d providers/virtualbox: extract reading dhcpservers from hostonlyifs
This is just a refactor, no behavior change.

Instead of stitching together dhcpserver info in the structure returned
from `read_host_only_interfaces`, sprout a new driver method called
`read_dhcp_servers` to return that information separately.

This means that driver clients (well there's really only _one_ client in
`ProviderVirtualBox::Action::Network`) have to do a bit more work to get
interface and DHCP server information.

But this gives us (a) a cleaner and more consistent driver interface and
(b) groundwork for a fix for #3083, which will require interacting with
DHCP servers outside of the context of host-only interfaces.
2014-11-30 22:03:52 -06:00
Gilles Cornu f96636587a provisioners/ansible: don't read/write known_hosts
Like Vagrant's default SSH behaviors (e.g ssh or ssh-config commands),
the Ansible provisioner should by default not modify or read the user
known host file (e.g. ~/.ssh/known_hosts).

Given that `UserKnownHostsFile=/dev/null` SSH option is usually combined
with `StrictHostKeyChecking=no`, it seems quite reasonable to bind the
activation/disactivation of both options to `host_key_checking`
provisioner attribute.

For the records, a discussion held in Ansible-Development mailing list
clearly confirmed that there is no short-term plan to adapt Ansible to
offer an extra option or change the behavior of
ANSIBLE_HOST_KEY_CHECKING. For this reason, the current implementation
seems reasonable and should be stable on the long run.

Close #3900

Related References:

- https://groups.google.com/forum/#!msg/ansible-devel/iuoZs1oImNs/6xrj5oa1CmoJ
- https://github.com/ansible/ansible/issues/9442
2014-11-30 09:55:48 +01:00
Gilles Cornu 178942cf27 provisioners/ansible: change arguments arrangement
- force `--connection=ssh` (any other modes like paramiko or smart are not
  supported)
- give the highest priority to `raw_arguments` for sake of simplicity (in
  usage, in code and in documentation)
- fix position of the `--limit` argument (the generated inventory could be
  shadowed by `raw_arguments`, while ansible.limit was able to override
  `raw_arguments`

ref #3396
2014-11-30 09:50:50 +01:00
Gilles Cornu 306c4f7eda provisioners/ansible: force --connection=ssh
When `--connection` argument is not specified, Ansible will use the
'smart' mode, which can either use `ssh` or `paramiko` transports,
depending of the version of OpenSSH available. If OpenSSH version is new
enough to support ControlPersist technology, `ssh` will be used.
See also http://docs.ansible.com/intro_configuration.html#transport.

In order to support some advanced features of Vagrant (e.g. multiple ssh
private key identities or ssh forwarding), the Ansible provisioner
already must force `ssh` connection mode.

Having to deal with the possible fallback to `paramiko` increase the
burden of special cases that Ansible provisioner must handle, without
any added value, as Vagrant is based on OpenSSH and its users are
usually using modern operating systems.

With this change, the Ansible provisioner will officially only support
`ssh`. It will still be possible to switch to another connection mode
via `raw_arguments`, but it will breach the "contract", and no
(community) support can be expected in such use case.

ref #3900, #3396
2014-11-30 09:50:50 +01:00
Gilles Cornu 1c884fa4e5 provisioners/ansible: Show Ansible command when VAGRANT_LOG=debug 2014-11-25 08:12:43 +01:00
Daniel Klockenkämper 8066c38881 Update configure_networks.rb for funtoo
fixed name of temporary network configuration file to work with the further process of copying file to configuration directory
2014-11-11 15:12:48 +01:00
Seth Vargo f86189a2fe Add Env.with_clean_env for resetting the Ruby and Rubygems environment 2014-11-10 12:00:23 -05:00
Seth Vargo f232dc38c9 Automatically install Chef when provisioning with Chef 2014-11-07 15:56:22 -05:00
Seth Vargo a8fa4bccc7 Add Chef::Config#install and Chef::Config#version options 2014-11-07 15:56:21 -05:00
Seth Vargo 8f35ecaa6f Extract runner-specific Chef configs into their own subclass
This separates the truly basic pieces of Chef (like install url and
log_level) from the runner pieces of Chef (like provisioning_path). This
is necessary because the Chef Apply provisioner does not actually need
most of the Chef configuration options.
2014-11-07 15:56:21 -05:00
Chris Jones b19abebdf0 Grammar fix to the network interface bridge question 2014-10-31 15:16:02 -04:00
Seth Vargo 59eb0ad2e8 Add Chef Apply provisioner 2014-10-30 15:32:15 -04:00
Seth Vargo 514101816b Fix alignment in the Chef Client config 2014-10-30 15:32:10 -04:00
Seth Vargo af9177550a Properly handle empty/nil values in Chef Solo config 2014-10-30 13:43:26 -04:00
Seth Vargo 7e71d72db8 Check for empty chef_server_url and validation_key_path 2014-10-30 13:43:25 -04:00
Seth Vargo 721edf70b9 Make Chef Zero lowercase in validation (conforms to other keys) 2014-10-30 13:43:25 -04:00
Seth Vargo 1169c80a72 Use require_relative for faster loading
require_relative is an order of magnitude faster on Windows
2014-10-30 13:43:25 -04:00
Teemu Matilainen dec5dcdda3 provisioners/chef: Add `chef_zero` provisioner
Add Chef Zero provisioner using `local_mode` configuration for
chef-solo/chef-client.
2014-10-30 13:43:24 -04:00
Adam Spiers 6af715b0db silence warnings about unescaped '-' in re char class
Eliminate warnings like this:

vagrant/plugins/hosts/linux/cap/nfs.rb:74: warning: character class has '-' without escape: /^# VAGRANT-BEGIN:( 1000)? ([\.\/A-Za-z0-9-_]+?)$/
2014-10-25 15:38:13 +01:00
Tarrant eeb11ec653 Merge branch 'master' of github.com:tarrant/vagrant 2014-10-24 13:54:16 -07:00
Tarrant 70fece7a99 Add support for DHCP on tinycore 2014-10-24 13:52:35 -07:00
Tarrant ba994baa65 Revert "guests/tinycore: error if DHCP [GH-4699]"
This reverts commit 64139f2158.
2014-10-24 13:52:06 -07:00
Mitchell Hashimoto ea983e32c8 hosts/*: NFS prune regexp matches file paths [GH-3815] 2014-10-24 12:16:53 -07:00
Mitchell Hashimoto 64139f2158 guests/tinycore: error if DHCP [GH-4699] 2014-10-24 11:24:16 -07:00
Mitchell Hashimoto 5418e6b85e guests: add remove_public_key to most guests 2014-10-24 10:05:01 -07:00
Mitchell Hashimoto 94b2a8a56b communicators/ssh: insert random key, remove insecure key 2014-10-24 09:58:18 -07:00
Mitchell Hashimoto 37a4000722 providers/virtualbox: more descriptive error if empty version [GH-4657] 2014-10-24 09:20:08 -07:00
Mitchell Hashimoto da91741b7c provisioners/shell: fix typo 2014-10-23 22:49:26 -07:00
Mitchell Hashimoto a7d3458abc provisioners/shell: retry getting SSH info a few times [GH-3924] 2014-10-23 22:48:48 -07:00
Mitchell Hashimoto cc01f01684 hosts/linux: don't use sudo to write NFS if writable [GH-2643] 2014-10-23 22:25:38 -07:00
Mitchell Hashimoto 6ea8dc8e20 core: cleaner output of what provisioner is running if named 2014-10-23 18:47:03 -07:00
Mitchell Hashimoto 97f9948fce core: provisioners are defined differently now 2014-10-23 18:40:14 -07:00
Mitchell Hashimoto aa981cf4ec hosts/bsd: only use sudo if we can't write /etc/exports [GH-2643] 2014-10-23 17:43:58 -07:00