Commit Graph

978 Commits

Author SHA1 Message Date
k8s-ci-robot 5dce6b1e6f
Merge pull request #5875 from seanson/5700_add_flag_for_no_subnet_tags
#5700: Add command line flag for disabling Subnet ELB tags
2018-11-09 13:05:48 -08:00
xichengliudui 9979549050 Remove unnecessary code 2018-11-08 12:40:13 -05:00
Erik Stidham 79940f6644 Update bazel 2018-11-08 08:00:10 -06:00
Erik Stidham 3da3b415e0 Adding Calico V3
- Add Calico configuration field to specify MajorVersion
- Add Calico V3 manifest
- Default new installations to Calico V3
  - Set etcd to V3 when calico is specified for networking
- Validate that etcd is V3 when Calico MajorVersion is v3
- Using Calico v3.2.1
2018-11-07 14:00:54 -06:00
Chris Phillips af7377d530 fix use of --networking in create cluster 2018-11-07 08:08:44 -08:00
Chris Phillips 2b9a56f8e6 rename to LyftVPC. Removes all the settings from the NetworkingSpec 2018-11-07 08:08:44 -08:00
Chris Phillips 3a8078763a Adds support for Lyft's cni-ipvlan-vpc-k8s
https://github.com/lyft/cni-ipvlan-vpc-k8s

This cni solution is slightly different in that it doesn't require running a daemonset

It requires:
  * a config file in /etc/cni/net.d
  * the binaries in /opt/cni/bin
  * adding the --node-ip param to the kubelet

This code is modeled after the AmazonVPC cni bits.

I've left the setup of the required subnets as an exercise to the reader.
2018-11-07 08:08:13 -08:00
xichengliudui 5826e4f361 Remove unnecessary code 2018-11-07 00:57:10 -05:00
mooncake 364834107e Fix some typos
Signed-off-by: mooncake <xcoder@tenxcloud.com>
2018-11-06 23:43:29 +08:00
Ian Hoegen 312813e4c5 Add stdin input for secrets 2018-10-23 11:38:45 -07:00
k8s-ci-robot 4c9b06739c
Merge pull request #5971 from Raffo/master
Fixed issue when specifying ACM cert and no load balancer is defined
2018-10-23 06:27:15 -07:00
Ariel Mashraki 7dca8a78d2 terraform: Fix resource formatting for IPv6 CIDRs
Solved #5976
2018-10-20 15:58:42 +03:00
SataQiu 0550d8d4e8 fix the typos 2018-10-19 17:35:26 +08:00
Raffaele Di Fazio 455d6e850b
Fixed issue when specifying ACM cert and no load balancer is defined 2018-10-19 10:29:13 +02:00
AdamDang 097df8d176
Update main.go 2018-10-16 10:21:50 +08:00
k8s-ci-robot 1fbc6331c6
Merge pull request #5922 from spotinst/feature-spotinst-aws
New integration: Spotinst
2018-10-15 09:26:13 -07:00
mooncake d75dc2745d Fix typos in files
Signed-off-by: mooncake <xcoder@tenxcloud.com>
2018-10-14 21:44:44 +08:00
Liran Polak 4ecc03ad99 fix: add product descriptions to the help output 2018-10-14 11:37:31 +03:00
Liran Polak 9f94c06e67 fix: rename spotinst's feature flag 2018-10-14 11:37:31 +03:00
Liran Polak 7654a923f1 feature: new integration: spotinst 2018-10-14 11:37:31 +03:00
Justin Santa Barbara afe51aad54 Optimize kops get cluster with a cluster name
We don't need to fetch all the clusters just to throw them all away -
a get suffices.

We don't optimize the (much rarer) case where a user specifies more
than one cluster name.
2018-10-11 06:17:29 -07:00
Sean Johnson 737a7a2cb8 5700: Add command line flag for disabling Subnet ELB tags 2018-10-10 12:48:06 +11:00
k8s-ci-robot 87808fb489
Merge pull request #5854 from posquit0/patch-2
Fix mis-typing in CLI command documentations
2018-10-08 22:40:34 -07:00
Justin Santa Barbara 01d188af38 Sync up CLI args help
Follow on to #5425; another flag and we need to update the source code
as well as the output.

Follow on also to #5721 and #4687
2018-10-08 17:03:00 -07:00
Byungjin Park 543d12bd22 Fix mis-typing in CLI command documentations 2018-10-04 11:33:33 +09:00
Rodrigo Menezes ac38ecde6e fix typos 2018-10-03 16:04:36 -07:00
k8s-ci-robot 646fee8a9d
Merge pull request #5857 from justinsb/strict_cloudformation_output_checking
Stop cloudformation output switching to literal quotes
2018-10-02 22:53:19 -07:00
k8s-ci-robot 3fe0287ff8
Merge pull request #5862 from justinsb/follow_on_5744
Follow on for #5744
2018-10-02 17:22:03 -07:00
k8s-ci-robot b3d61542cd
Merge pull request #5820 from justinsb/etcd_manager_channels_step1
etcd: introduce field to specify whether we are using etcd-manager or legacy mode
2018-10-02 14:20:37 -07:00
Justin Santa Barbara 076742f528 Still materialize terraform output in tests
If we skip it, we can't test it.  We do expect that most users will
use a lifecycle that only warns though.
2018-10-02 11:53:39 -07:00
Rodrigo Menezes a82f548ff8 Allow using existing/shared Security Groups
Verbosely log when a user overwrites LB or IG security groups

Change SecurityGroup to SecurityGroupOverride

Allow using existing/shared Security Groups

Update tests
2018-10-02 00:51:39 -07:00
Justin Santa Barbara 1ad7a84d53 Stop cloudformation output switching to literal quotes
yaml can't store the \r character, so we strip the \r characters in
the expected output to keep the yaml output in block-quote style.

Also don't Fatalf out of an error, rather Errorf so we print all
problems.
2018-10-01 20:44:19 -07:00
Justin Santa Barbara 54c499fe9b Introduce field to specify whether we are using etcd-manager or legacy mode
Splitting this out from the bigger bundle PR
2018-10-01 15:36:24 -07:00
Justin Santa Barbara 62e8e17077 Code fixes for k8s 1.11 API changes 2018-09-28 20:14:45 -04:00
k8s-ci-robot 2319db8f59
Merge pull request #4797 from justinsb/check_no_legacy_tags_on_shared
lifecycle tests: check no legacy tags on shared resources
2018-09-03 15:28:26 -07:00
k8s-ci-robot 94d960ca87
Merge pull request #5513 from ripta/load-client-auth-plugins
Load client-auth plugins
2018-07-29 01:34:56 -07:00
Justin Santa Barbara 288c5aaf01 Add error handling (logging) when we fail to close a file
More missing error handling

Follows on from #5543
2018-07-28 16:50:13 -04:00
k8s-ci-robot 6bb8d451dd
Merge pull request #5542 from justinsb/fix_missing_errors_1
Add missing error handling when reading stdin
2018-07-27 23:20:57 -07:00
Justin Santa Barbara 6505dc08f6 Add error handling for failed deletion of tempfiles
We create a helper package `try`
2018-07-27 15:14:08 -04:00
Justin Santa Barbara 8433e67891 Add missing error handling when reading stdin
I'm guessing that if a pipe breaks that we wouldn't handle it
correctly otherwise.
2018-07-27 14:50:33 -04:00
Justin Santa Barbara 78c81e39a7 Add HACK_UPDATE_EXPECTED_IN_PLACE for cloudformation output 2018-07-27 00:57:45 -04:00
Ripta Pasay 217136039d Load client-auth plugins
Without this change, for example, kops connections using OIDC to the
cluster will receive this error message:

> cannot build kube client for "$CLUSTER_NAME": No Auth Provider found
> for name "oidc"

kubernetes/client-go#345 suggests importing the package path
`plugin/pkg/client/auth/oidc` from `client-go`, but looking at the code
`plugin/pkg/client/auth` will actually handle loading all known auth
plugins for us.
2018-07-25 22:36:21 +00:00
Justin Santa Barbara 2d76046f85 kops set: fix example
The example included an incorrect field specifier.
2018-07-24 23:22:42 -04:00
Justin Santa Barbara 630ea429ae
Merge pull request #4677 from usabilla/external-load-balancers
Add the ability to specify external loadbalancers for instancegroups
2018-07-19 21:54:00 -04:00
k8s-ci-robot 9d7b2d17b0
Merge pull request #5108 from usabilla/set-values
Adds ability to set template context values on command line
2018-07-19 13:11:17 -07:00
k8s-ci-robot 266b764d7b
Merge pull request #5466 from justinsb/more_test_autofix
More autofix of expected test output
2018-07-19 10:00:54 -07:00
Justin Santa Barbara af867403f9 More autofix of expected test output
Rename to HACK_UPDATE_EXPECTED_IN_PLACE as it isn't just terraform any more.
2018-07-19 12:11:38 -04:00
k8s-ci-robot 54cbe492cb
Merge pull request #5414 from Raffo/master
[WIP] Initial implementation of ACM certificate for API server ELB
2018-07-19 08:34:54 -07:00
Christian Kampka ed08820909 Generate random weave password it none is supplied 2018-07-18 19:41:57 +02:00
Christian Kampka 3bf8a8fcd2 Add weave network encryption secret 2018-07-13 16:57:48 +02:00
Gijs Kunze 0ccaf4fd8e Fixes complex --set parsing 2018-07-11 16:46:32 +02:00
Gijs Kunze 295aeb9197 Added dependency on k8sio/helm/pkg/strvals 2018-07-11 16:46:32 +02:00
Gijs Kunze 381c30ea4a Added the ability to set individual values for the toolbox template command 2018-07-11 16:45:26 +02:00
Raffaele Di Fazio f820deb2e7 clarify message for cli argument 2018-07-06 10:06:43 +02:00
Raffaele Di Fazio b72393947a remove useless empty line 2018-07-06 09:37:19 +02:00
Raffaele Di Fazio d477e96c38 Added initial implementation of ACM cert for Kubernetes API ELB 2018-07-06 09:29:54 +02:00
Gijs Kunze 8256c3cc73 Fixed integration tests after rebasing 2018-06-29 12:42:06 +02:00
Gijs Kunze 2c5edfe992 Added integration test for external load balancers 2018-06-29 11:39:21 +02:00
Kashif Saadat 7b5cb2dc33 Update rolling update ig roles flag to be case insensitive 2018-06-27 10:26:48 +01:00
Justin Santa Barbara 1af610a6c4 Use fast-retry and cleanup task options for tests
The launch configuration test exposed that our integration tests don't
retry for very long, and wait a long time in between retries.

Create a RunTasksOptions type to hold the parameters, in particular
max task time, and the amount of time we wait when all tasks have
failed.
2018-06-18 00:04:23 -04:00
k8s-ci-robot 127e031948
Merge pull request #5256 from justinsb/dont_autoload_key_on_gce
Don't autoload SSH key on GCE
2018-06-17 08:38:29 -07:00
Justin Santa Barbara 1549b6e961 Don't autoload SSH key on GCE
This lets us merge #5056
2018-06-17 09:11:06 -04:00
k8s-ci-robot 264ca4c2e8
Merge pull request #5324 from justinsb/viper_explicit
Use less viper discovery
2018-06-14 22:03:28 -07:00
k8s-ci-robot 6fe589fdfc
Merge pull request #5323 from justinsb/dont_always_print_state_store
Don't always print state store path
2018-06-14 07:04:28 -07:00
Justin Santa Barbara 4ed47d632b kops set cluster: honor --name flag
We were not using the regular method to get the cluster name, and this
meant that the `--name` flag was being ignored.
2018-06-14 02:13:47 -04:00
Justin Santa Barbara fdc358f903 Use less viper discovery
Tweaks so that we are stricter about how we use viper config file
discovery.  By being more explicit we are less dependent on its
specific behaviour.
2018-06-13 23:55:32 -04:00
Justin Santa Barbara 55efe61fa7 Don't always print state store path
We can log it at V(2), but it is just too noisy otherwise.

We also don't want to change the stdout format!
2018-06-13 23:17:06 -04:00
Justin Santa Barbara b334650c68
Merge branch 'master' into feature-2435-s3configfile 2018-06-11 11:53:23 -04:00
k8s-ci-robot 1b29b54d5b
Merge pull request #4171 from rifelpet/rifelpet_iam
Add support for external IAM Instance Profiles
2018-06-10 14:54:00 -07:00
k8s-ci-robot a57a6de4a8
Merge pull request #5139 from justinsb/fix_subnet_egress_indexing
Fix issue where we assumed that private zone were in order
2018-06-09 09:27:01 -07:00
Peter Rifel 5f0b63100d Add support for using existing instance profiles 2018-06-08 10:33:09 -07:00
k8s-ci-robot 0afac24a4f
Merge pull request #5284 from noinarisak/kops_edit_instancegroup_correction
Update kops_edit_instancegroup.go and kops_edit_instancegroup.md
2018-06-06 14:28:24 -07:00
Noi Narisak 4bc3155edb Update kops_edit_instancegroup.go and kops_edit_instancegroup.md
Update the Example section. Was trying to use command example and discovered that `node` gave any error. Changing it `node` to `nodes` resolve it.
2018-06-06 15:02:57 -05:00
k8s-ci-robot b552743d69
Merge pull request #5282 from mirake/fix-typos
Fix some typos
2018-06-06 11:31:26 -07:00
k8s-ci-robot 1fe29cf962
Merge pull request #5277 from gambol99/misspelling
Verify Spelling
2018-06-06 08:57:26 -07:00
ruicao 3e365149fe Fix some typos 2018-06-06 20:40:49 +08:00
Rohith 67296c2db9 - fixing up the spelling mistakes found 2018-06-06 10:03:51 +01:00
k8s-ci-robot c3a5477b4a
Merge pull request #5270 from rdrgmnzs/fix_additionalCIDR
Implement AdditionalCIDR configuration.
2018-06-05 12:19:56 -07:00
k8s-ci-robot f1f782fca3
Merge pull request #5275 from rdrgmnzs/clarify_state_flag
Clarify the usage of the --state flag.
2018-06-05 11:33:56 -07:00
Rodrigo Menezes 11b3da7a87 Clarify the usage of the --state flag. 2018-06-05 09:48:14 -07:00
k8s-ci-robot 4aa844d81b
Merge pull request #5265 from justinsb/integration_tests_self_healing
Allow integration tests to update expected TF output
2018-06-05 02:01:55 -07:00
Rodrigo Menezes 4a131f2a50 Implement AdditionalCIDR configuration on non-shared VPCs 2018-06-05 01:12:06 -07:00
Justin Santa Barbara 7ab79f5915 Clean up variable naming in integration test 2018-06-04 11:23:09 -07:00
Justin Santa Barbara 05010e4e9a Allow integration tests to update expected TF output
This means we don't have to manually go and fix up the terraform
expected output when it changes (but we should still be careful to
validate it!)

To use: `HACK_UPDATE_TF_IN_PLACE=1 go test ./cmd/kops`
2018-06-04 10:54:28 -07:00
Justin Santa Barbara a9111e00ac Use STABLE_ prefixes for bazel workspace vars
This ensures that we rebuild when they change.
2018-06-03 13:13:33 -07:00
k8s-ci-robot 6741158c97
Merge pull request #5056 from povilasv/gce-ssh
Add public ssh keys for GCE
2018-06-03 10:59:53 -07:00
Justin Santa Barbara 4cea00ea75 Use HomeDir from client-go to get home directory
Works on windows & linux

Fixes #4523
2018-06-02 15:17:23 -04:00
k8s-ci-robot 1157789a63
Merge pull request #4723 from sroylance/testing-windows
hacks for tests on windows
2018-06-02 11:22:57 -07:00
Ian Hoegen 88b8fd46b5 Add proper autoloading for kops autocomplete 2018-05-31 09:53:12 -07:00
k8s-ci-robot 195dee380b
Merge pull request #5150 from ihoegen/master
Add stdin support for create -f and replace -f
2018-05-26 15:09:31 -07:00
k8s-ci-robot f7243a933b
Merge pull request #5123 from justinsb/harmonize_override_and_set_cluster
Unify create-create overrides and set-cluster fields
2018-05-19 12:56:50 -07:00
Ian Hoegen ae8bdf08c5 Add stdin support for create -f and replace -f 2018-05-14 13:29:37 -07:00
k8s-ci-robot cbf7b0886e
Merge pull request #5122 from justinsb/rolling_update_by_role
Allow rolling-update to filter on roles
2018-05-11 10:50:30 -07:00
k8s-ci-robot 2644e6c0eb
Merge pull request #4991 from AliyunContainerService/network
Implement network task for AlibabaCloud
2018-05-11 10:09:28 -07:00
Justin Santa Barbara bc79f0a69b tests: failing test when multiple egress
Also requires that the subnets be out of order, which is likely why we
didn't hit it in practice.
2018-05-10 13:28:05 -04:00
k8s-ci-robot 02ab1f90be
Merge pull request #5133 from relu/support-ec2-instance-nat-egresses
Add ability to use ec2 nat instance as egress
2018-05-10 08:22:53 -07:00
k8s-ci-robot 7d3bcb3260
Merge pull request #5112 from AdamDang/patch-31
Typo fix in returned message: formated->formatted
2018-05-09 19:26:04 -07:00
Aurel Canciu cc8371cb31
Add ability to use ec2 nat instance as egress 2018-05-09 23:04:54 +03:00
Justin Santa Barbara ffd57062aa Allow rolling-update to filter on roles
This is important for the e2e upgrade tests
2018-05-09 12:00:12 -04:00
Justin Santa Barbara 81d5f06a58 Unify create-create overrides and set-cluster fields
Supports e2e upgrade tests
2018-05-09 11:55:44 -04:00
AdamDang ad8de4abd3
Update validate.go 2018-05-09 23:33:48 +08:00
AdamDang a7f89416b6
Typo fix: formated->formatted
formated->formatted
2018-05-06 23:22:44 +08:00
AdamDang d8bf642e0d
Update create_cluster.go 2018-05-03 20:20:46 +08:00
k8s-ci-robot 7ff94b6f6a
Merge pull request #4668 from usabilla/deep-merge
Perform deep merge for template values
2018-05-02 12:23:17 -07:00
Julien SENON 1408fc9aca
Remove unecessary println, add comment for /Users/julien and windows, update docs 2018-04-22 16:50:14 +02:00
Julien SENON 6425032795
Add feature with config file, flags, and env order 2018-04-22 16:45:46 +02:00
Julien SENON 9c9a65c53e
Add feature state store 2018-04-22 16:45:45 +02:00
Povilas Versockas 8bfa93c304 Add public ssh keys for GCE 2018-04-21 20:15:29 +03:00
Mike Splain ccb688c468 Add Replace and delete for SSH Secret YAML 2018-04-19 21:39:39 -04:00
xh4n3 2bdb9ede97 add user-agent for statistic purpose, add dep 2018-04-19 20:57:56 +08:00
LilyFaFa ad9cf7d3e2 init ALICloud and add network Model 2018-04-19 20:48:40 +08:00
mahuihuang 42a7606cf8 fix typo 2018-04-09 11:26:18 +08:00
Gijs Kunze 50f411f51a Removes unneccessary if block 2018-04-03 11:04:26 +02:00
sunlintong dc388698a0 Ouput --> Output 2018-04-03 16:07:52 +08:00
k8s-ci-robot fc1bed4353
Merge pull request #4224 from nebril/cilium-support
Add Cilium as CNI plugin
2018-03-26 07:49:02 -07:00
Gijs Kunze adf12b516a Added new file to bazel and ran gofmt 2018-03-26 10:13:34 +02:00
Gijs Kunze 821cdf32ab Updated copyright header and added link to original source 2018-03-26 10:13:34 +02:00
Gijs Kunze 0ae059227a Perform deep merge for template values 2018-03-26 10:13:34 +02:00
Justin Santa Barbara 51cc74c783 lifecycle tests: check no legacy tags on shared resources 2018-03-26 00:20:07 -04:00
Justin Santa Barbara a34792d3a5 Add lifecycle tests for legacy tags 2018-03-25 16:21:29 -04:00
Justin Santa Barbara afa0577749 Check tags in lifecycle tests
We want to make sure that everything owned is tagged as such, and that
some shared resources (in particular subnets) are tagged as such.
2018-03-25 15:55:44 -04:00
Justin Santa Barbara 1edd7d49fa Add deletion to lifecycle test 2018-03-24 16:30:40 -04:00
k8s-ci-robot bc56319d35
Merge pull request #4739 from szemek/fix/typos
Fixed typos
2018-03-21 08:59:03 -07:00
Przemysław Dąbek a94eee33c8 cluser => cluster 2018-03-21 07:35:12 +01:00
Justin Santa Barbara 63e51337c0 Validation: treat as error if insufficient nodes
We switch to use the rolling update logic, which gives us nodes by
InstanceGroup.
2018-03-20 23:28:27 -04:00
Justin Santa Barbara 3f8edb34a9 Validation: simplify output rendering 2018-03-20 22:01:47 -04:00
Justin Santa Barbara 02d9819785 Move DNS validation into validation 2018-03-20 19:56:36 -04:00
k8s-ci-robot 717eb4f6c5
Merge pull request #4734 from justinsb/int_validation_fix_3
Validation: Take a cluster object, not just the name
2018-03-20 13:25:02 -07:00
k8s-ci-robot 963eb0d512
Merge pull request #4733 from justinsb/int_validation_fix_2
Validation: clean up unused node status functions
2018-03-20 11:01:02 -07:00
Maciej Kwiek bca52dede9 Add Cilium as CNI plugin
Signed-off-by: Maciej Kwiek <maciej@covalent.io>
2018-03-20 13:07:26 +01:00
Justin Santa Barbara 1b0f5a4101 Validation: clean up unused node status functions 2018-03-20 01:16:48 -04:00
Justin Santa Barbara 55e3a5f212 Validation: Take a cluster object, not just the name 2018-03-20 01:12:07 -04:00
Justin Santa Barbara 07309d4824 Validation: start to differentiate between validation failure and errors during validation 2018-03-20 00:55:59 -04:00
Stephen Roylance 70815ebaf9 hacks for tests on windows 2018-03-19 16:34:36 -04:00
Justin Santa Barbara 6ff56e2f05 Fix shared network objects
RouteTables should be created (and owned) only for non-shared subnets.
2018-03-18 17:09:30 -04:00
Justin Santa Barbara 8a476a6981 Fix cluster name for phases test 2018-03-15 20:11:54 -04:00
Justin Santa Barbara 342bb766c9 Enable some shared tests scenarios 2018-03-15 20:11:54 -04:00
Justin Santa Barbara 7af6f42e8b Tests: create vpc-12345678 & nat-12345678 2018-03-15 20:11:54 -04:00
k8s-ci-robot 4ad014647b
Merge pull request #4654 from justinsb/private_topology_roundtrip_test
More mocks - sufficient for privatecalico to roundtrip
2018-03-12 22:59:11 -07:00
Justin Santa Barbara 5d36f9e37d Update kops version in tests
We need to satisfy the new minimum supported version.
2018-03-12 02:17:49 -04:00
Justin Santa Barbara ab7439b360 More mocks - sufficient for privatecalico to roundtrip 2018-03-11 23:12:22 -04:00
Justin Santa Barbara 85b972bc28 Fill out cloudmock to do a basic lifecycle test 2018-03-11 17:04:30 -04:00
Justin Santa Barbara c121e7f14e Create lifecycle test against AWS mocks
We create a cluster, run kops update, then run kops update again.  We
expect no changes on the second update.
2018-03-11 17:04:30 -04:00
Kyle Rockman b80cab6d87 change based on PR feedback 2018-03-09 10:17:18 -06:00
Kyle Rockman 3b9384a23c Add cluster name environment variable
- Add an environment variable to configure cluster name
- Expose envionrment variable in CLI documentation
2018-03-09 10:14:00 -06:00
chrislovecnm 1927d2be7e Updates for Bazel tests and cleaning up go sdk
Enabling sharded tests for our slower tests, and removing the go
commands to download a specific sdk.
2018-03-01 17:14:10 -07:00
k8s-ci-robot 1c75f47510
Merge pull request #4526 from mad01/custom-ca
custom ca new implementation of #2924
2018-03-01 12:52:28 -08:00
Alexander Brandstedt 62ab65e8e3 implementation custom ca cert and key #2924
- implementing as new subcommand keypair to secret
- rename of LoadPEMCertificate to ParsePEMCertificate to have
  the same naming of parsing of certificate/private key bytes in
  the same package result is
    pki.ParsePEMPrivateKey(privateKeyBytes)
    pki.ParsePEMCertificate(certBytes)
2018-03-01 09:50:04 +01:00
k8s-ci-robot 0ff7d4de99
Merge pull request #4452 from duboisf/support-bastion-user-data
Add support for bastion aws user-data
2018-02-28 03:54:45 -08:00
k8s-ci-robot 0ab8b57c2a
Merge pull request #4493 from justinsb/vfs_streaming
VFS: WriteFile takes an io.ReadSeeker
2018-02-26 15:50:45 -08:00