Commit Graph

53204 Commits

Author SHA1 Message Date
chenguoyan01
7062b977b7 add some period in cloud controller manager's options 2017-08-29 16:54:37 +08:00
Kubernetes Submit Queue
a1234aa28b Merge pull request #50837 from tizhou86/master
Automatic merge from submit-queue

Fix several typos in CHANGELOG.md file

**What this PR does / why we need it**:

Fixed several typos in CHANGELOG.md file.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

NONE

**Special notes for your reviewer**:

NONE

**Release note**:

```release-note

NONE

```
2017-08-17 19:58:01 -07:00
Kubernetes Submit Queue
075d209ea4 Merge pull request #50218 from dixudx/fix_GPU_resource_zero_limit_validation
Automatic merge from submit-queue

fix GPU resource validation that incorrectly allows zero limits

**What this PR does / why we need it**:

The validation logic for GPUs is not run if limits is not set for GPUs.
We need to check limits equals requests even if just request is set for GPUs.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #50182

**Special notes for your reviewer**:
/assign @vishh 
/cc @jiayingz 

**Release note**:

```release-note
fix GPU resource validation that incorrectly allows zero limits
```
2017-08-17 19:57:40 -07:00
Kubernetes Submit Queue
12ce4151ce Merge pull request #50861 from crimsonfaith91/e2e-scale
Automatic merge from submit-queue

Change API version of statefulset scale subresource e2e test to v1beta2

**What this PR does / why we need it**:
This PR changes API version of statefulset scale subresource e2e test from `v1beta1` to `v1beta2`.
`apps/v1beta2` has been enabled.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: xref #50109

**Release note**:

```release-note
NONE
```
2017-08-17 19:00:50 -07:00
Kubernetes Submit Queue
d490e2cf83 Merge pull request #50176 from Random-Liu/set-exec-timeout
Automatic merge from submit-queue (batch tested with PRs 50536, 50809, 50220, 50399, 50176)

Set ExecSync timeout in liveness prober.

Although Dockershim doesn't actually support `ExecSync` timeout (see [here](https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/dockershim/exec.go#L137)), we should set the timeout, so that the other runtime which supports the timeout could work properly.

Fixes #50389.

/cc @yujuhong @timstclair @feiskyer
2017-08-17 18:12:22 -07:00
Kubernetes Submit Queue
821445e127 Merge pull request #50399 from caesarxuchao/update-admission-plugin
Automatic merge from submit-queue (batch tested with PRs 50536, 50809, 50220, 50399, 50176)

Make admission plugin handle mutating spec of uninitialized pods

Address https://github.com/kubernetes/kubernetes/issues/47837#issuecomment-321323243.

Updated to handle mutating pod spec of uninitialized pods:
* InitialResources
* PodNodeSelector
* PodTolerationRestriction
* ServiceAccount


Doesn't change:
* NodeRestriction: this plugin only cares about the mirror pods created by nodes, and mirror pods are exempted from initializers, so no modification required
* PersistentVolumeLabel, DefaultStorageClass: It only cares about PersistentVolume. We can revisit when we relax its validation.
* InitialResource: deprecated according to https://github.com/kubernetes/kubernetes/issues/47837#issuecomment-321388879
2017-08-17 18:12:20 -07:00
Kubernetes Submit Queue
f0066597ca Merge pull request #50220 from zhangxiaoyu-zidif/delete-statefulset-test-redundant-sort
Automatic merge from submit-queue (batch tested with PRs 50536, 50809, 50220, 50399, 50176)

Refactor statefulset test with sets.String

**What this PR does / why we need it**:
Delete redundant sort. These string slices only own one element.
There is no necessary to sort them.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
2017-08-17 18:12:06 -07:00
Kubernetes Submit Queue
2210065d5b Merge pull request #50809 from nicksardo/gce-api-update
Automatic merge from submit-queue (batch tested with PRs 50536, 50809, 50220, 50399, 50176)

GCE: Update Google API dependencies

Updating `google.golang.org/api/` 

**Special notes for your reviewer**:
/assign @bowei

**Release note**:
```release-note
NONE
```
2017-08-17 18:12:04 -07:00
Kubernetes Submit Queue
f7dd477155 Merge pull request #50536 from crimsonfaith91/mark-deprecated
Automatic merge from submit-queue (batch tested with PRs 50536, 50809, 50220, 50399, 50176)

mark created-by annotation as deprecated

**What this PR does / why we need it**: This PR marks created-by annotation as deprecated in code comments.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: xref #44407 

**Special notes for your reviewer**:

**Release note**:

```release-note
The `kubernetes.io/created-by` annotation is now deprecated and will be removed in v1.9. Use [ControllerRef](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/controller-ref.md) instead to determine which controller, if any, owns an object.
```
2017-08-17 18:12:02 -07:00
Kubernetes Submit Queue
1eb04f6a2a Merge pull request #50852 from guangxuli/fix_apiserver_register
Automatic merge from submit-queue (batch tested with PRs 50281, 50747, 50347, 50834, 50852)

fix incorrect logic in admission register

**What this PR does / why we need it**:
There is no issue for this PR, just fix incorrect logic in invocation `func (ps *Plugins) Register(name string, plugin Factory) ` after browsing the code accidentally.  And apparently, the logic exits potential panic.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #
no issue
**Special notes for your reviewer**:
none
**Release note**:
none
2017-08-17 16:56:27 -07:00
Kubernetes Submit Queue
d958a35ab9 Merge pull request #50834 from zjj2wry/fix_validation_expose_port
Automatic merge from submit-queue (batch tested with PRs 50281, 50747, 50347, 50834, 50852)

fix kubectl issue(#52)kubectl run --expose continues after error (mis…

…sing port)



**What this PR does / why we need it**:
https://github.com/kubernetes/kubectl/issues/52
**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
2017-08-17 16:56:25 -07:00
Kubernetes Submit Queue
74d8d99b62 Merge pull request #50347 from cheftako/aggregator
Automatic merge from submit-queue (batch tested with PRs 50281, 50747, 50347, 50834, 50852)

Add e2e aggregator test.

What this PR does / why we need it:
This adds an e2e test for aggregation based on the sample-apiserver.
Currently is uses a sample-apiserver built as of 1.7.
This should ensure that the aggregation system works end-to-end.
It will also help detect if we break "old" extension api servers.

Which issue this PR fixes (optional, in fixes #<issue number>(, fixes
fixes #43714

**Special notes for your reviewer**:

**Release note**: NONE
2017-08-17 16:56:22 -07:00
Kubernetes Submit Queue
804c17766c Merge pull request #50747 from m1093782566/proxy-util
Automatic merge from submit-queue (batch tested with PRs 50281, 50747, 50347, 50834, 50852)

[proxy] Move IsLocalIP() and ShouldSkipService() to pkg/proxy/util

**What this PR does / why we need it**:

Move function `IsLocalIP()` and `ShouldSkipService()` to pkg/proxy/util package so that they can be consumed among different proxiers. 

Besides, add some UTs for `ShouldSkipService()`.

**Which issue this PR fixes**: fixes #50744

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
2017-08-17 16:56:19 -07:00
Kubernetes Submit Queue
7c13d65134 Merge pull request #50281 from FengyunPan/mark-detached-vsphere
Automatic merge from submit-queue

Mark volume as detached when node does not exist for vsphere

If node does not exist, node's volumes will be detached
automatically and become available. So mark them detached and
return false without error.
Fix #50266

**Special notes for your reviewer**:
/assign @jingxu97

**Release note**:
```release-note
NONE
```
2017-08-17 16:33:26 -07:00
crimsonfaith91
71b477bd6b Change API version of statefulset scale subresource e2e test to v1beta2 2017-08-17 15:11:10 -07:00
Kubernetes Submit Queue
ca89308227 Merge pull request #48228 from danehans/kubeadm_v6masterep
Automatic merge from submit-queue

Updates Kubeadm Master Endpoint for IPv6

**What this PR does / why we need it**:
Previously, kubeadm would use ip:port to construct a master
endpoint. This works fine for IPv4 addresses, but not for IPv6.
Per [RFC 3986](https://www.ietf.org/rfc/rfc3986.txt), IPv6 requires the ip to be encased in brackets
when being joined to a port with a colon.

This patch updates kubeadm to support wrapping a v6 address with
[] to form the master endpoint url. Since this functionality is
needed in multiple areas, a dedicated util function was created
for this purpose.

**Which issue this PR fixes**
Fixes Issue https://github.com/kubernetes/kubeadm/issues/334

**Special notes for your reviewer**:
As part of a bigger effort to add IPv6 support to Kubernetes:
Issue #1443
Issue #47666

**Release note**:
```NONE
```
/area kubeadm
/area ipv6
/sig network
/sig cluster-ops
2017-08-17 14:35:05 -07:00
Lantao Liu
ef29b836c0 Set ExecSync timeout in liveness prober. 2017-08-17 21:09:45 +00:00
Kubernetes Submit Queue
8404244d7d Merge pull request #50671 from zjj2wry/selector
Automatic merge from submit-queue

fix issue(#49883) Add selector example

**What this PR does / why we need it**:
fixes #49883

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
2017-08-17 13:41:07 -07:00
Chao Xu
bf6155b08c make admission plugins handle mutating spec of uninitialized pods 2017-08-17 12:51:09 -07:00
Kubernetes Submit Queue
e86f43bcab Merge pull request #50796 from yguo0905/hc
Automatic merge from submit-queue (batch tested with PRs 50563, 50698, 50796)

Disable Docker's health check until we officially support it

Ref: https://github.com/kubernetes/kubernetes/issues/50703

Tested locally.

Without this PR:

```
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS                     PORTS               NAMES
afdd796ddddc        gcr.io/ygg-gke-dev/nginx-healthcheck                   "nginx -g 'daemon ..."   5 minutes ago       Up 5 minutes (healthy)                       k8s_test-container_test-pod_default_8a1ad225-82bf-11e7-becb-480fcf514648_0
```

With this PR:
```
e3fb2437555f        gcr.io/ygg-gke-dev/nginx-healthcheck                   "nginx -g 'daemon ..."   10 seconds ago      Up 9 seconds                            k8s_test-container_test-pod_default_de82e83c-82c0-11e7-b3fc-480fcf514648_0
```

**Release note**:

```
Disable Docker's health check until we officially support it.
```

/assign @yujuhong 
/assign @dchen1107
2017-08-17 12:18:33 -07:00
Kubernetes Submit Queue
9d302ecffa Merge pull request #50698 from liyinan926/cr-v1beta2
Automatic merge from submit-queue (batch tested with PRs 50563, 50698, 50796)

Add ControllerRevision to apps/v1beta2

**What this PR does / why we need it**:
This PR added `ControllerRevision` currently in `apps/v1beta1` to `apps/v1beta2`.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #50696.

**Special notes for your reviewer**:
@kow3ns @janetkuo 

**Release note**:
```release-note
Add ControllerRevision to apps/v1beta2
```
2017-08-17 12:18:29 -07:00
Kubernetes Submit Queue
ee4cc08de9 Merge pull request #50563 from alindeman/sudo-mkdir-var-lib-kubelet
Automatic merge from submit-queue (batch tested with PRs 50563, 50698, 50796)

Creates /var/lib/kubelet as root

**What this PR does / why we need it**: `hack/local-cluster-up.sh` does not currently use sudo to create `/var/lib/kubelet`, so it fails unless the entire script is run with sudo.

**Release note**:

```release-note
NONE
```
2017-08-17 12:18:26 -07:00
Daneyon Hansen
3390bc3cbc Updates Kubeadm Master Endpoint for IPv6
Previously, kubeadm would use <ip>:<port> to construct a master
endpoint. This works fine for IPv4 addresses, but not for IPv6.
IPv6 requires the ip to be encased in brackets when being joined
to a port with a colon.

This patch updates kubeadm to support wrapping a v6 address with
[] to form the master endpoint url. Since this functionality is
needed in multiple areas, a dedicated util function was created.

Fixes: https://github.com/kubernetes/kubernetes/issues/48227
2017-08-17 10:57:54 -07:00
Kubernetes Submit Queue
5e5b586e55 Merge pull request #50325 from p0lyn0mial/sample_server_ban_flunder_plugin_get_name
Automatic merge from submit-queue

Small improvement in ban flunder admission plugin.

**What this PR does / why we need it**:
After the changes a name will be taken directly from meta field.
Previously a name was taken via attributes.GetName() method,
which in turns derived a name from a URL address.
This didn't work as we don't allow to pass a name when POSTing a resource.

#47868

**Release note**:

```
NONE
```
2017-08-17 10:56:47 -07:00
Walter Fender
cb28f0f34f Add e2e aggregator test.
What this PR does / why we need it:
This adds an e2e test for aggregation based on the sample-apiserver.
Currently is uses a sample-apiserver built as of 1.7.
This should ensure that the aggregation system works end-to-end.
It will also help detect if we break "old" extension api servers.

Which issue this PR fixes (optional, in fixes #<issue number>(, fixes
fixes #43714
Fixed bazel for the change.
Fixed # of args issue from govet.
Added code to test dynamic.Client.
2017-08-17 10:56:43 -07:00
Nick Sardo
a0e95f9475 Fix e2e_node for changes to /api/compute/v0.beta package 2017-08-17 10:29:58 -07:00
Nick Sardo
c5f672a0d5 Update GCP API package 2017-08-17 09:47:16 -07:00
Wojciech Tyczynski
89cd583ec3 Update CHANGELOG.md for v1.7.4. 2017-08-17 18:33:52 +02:00
Kubernetes Submit Queue
858d9d4857 Merge pull request #50783 from luxas/kubeadm_self_hosting_fix_race
Automatic merge from submit-queue

kubeadm: Fix self-hosting race condition

**What this PR does / why we need it**:

Splitted out from: https://github.com/kubernetes/kubernetes/pull/50766

Waits for the Static Pod to be deleted before proceeding with checking the API health.
Otherwise there is a race condition where we're checking the health on the static pod API server; not the self-hosted one that we expect.
Also improves the logging output and adds reasonable timeouts for the process

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

**Special notes for your reviewer**:

Dependency for
 - https://github.com/kubernetes/kubernetes/pull/50766
 - https://github.com/kubernetes/kubernetes/pull/50631
 - https://github.com/kubernetes/kubernetes/pull/48899

**Release note**:

```release-note
NONE
```
@kubernetes/sig-cluster-lifecycle-pr-reviews
2017-08-17 08:20:34 -07:00
guangxuli
d4b41afe59 fix incorrect logic 2017-08-17 22:59:45 +08:00
p0lyn0mial
3a00be1f66 Small improvement in ban flunder admission plugin.
After the changes a name will be also taken directly from meta field.
Previously a name was taken only via attributes.GetName() method,
which in turns derived a name from a URL address.
This didn't work as we don't allow to pass a name when POSTing a resource.
2017-08-17 16:22:36 +02:00
Kubernetes Submit Queue
8dea17d99b Merge pull request #50731 from guangxuli/fix_e2e_test_sig_prefix
Automatic merge from submit-queue

Migrate sig-apimachinery and sig-servicecatalog e2e tests

**What this PR does / why we need it**:
Migrate sig-apimachinery and sig-servicecatalog e2e tests

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

Ref Umbrella issue #49161
1. Move generated_clientset.go to sig-apimachinary
2. Move podpreset.go to sig-servicecatalog by creating new directory.

**Special notes for your reviewer**:

**Release note**:

none

/cc @liggitt
2017-08-17 07:06:23 -07:00
Lucas Käldström
c08091699c
kubeadm: Fix self-hosting race condition 2017-08-17 16:07:04 +03:00
zhengjiajin
43e3044b73 fix issue(#49883) Add selector example 2017-08-17 20:27:11 +08:00
Kubernetes Submit Queue
9aa04c755f Merge pull request #50826 from huzhengchuan/fix/delete-deadcode
Automatic merge from submit-queue

remove unused function in openstack cloud provider

**What this PR does / why we need it**:
List function not used in openstack cloud provider, and useless, I think need remove it.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

**Special notes for your reviewer**:

**Release note**:

```
NONE
```
2017-08-17 04:45:56 -07:00
Kubernetes Submit Queue
b67b0ad7eb Merge pull request #50768 from shyamjvs/fix-scheduler-metric-in-gke
Automatic merge from submit-queue (batch tested with PRs 50550, 50768)

Don't SSH to master for metrics in case of GKE

cc @kubernetes/sig-scalability-misc @crassirostris
2017-08-17 03:13:59 -07:00
Kubernetes Submit Queue
a4acc38c96 Merge pull request #50550 from atlassian/cleanup-configz
Automatic merge from submit-queue (batch tested with PRs 50550, 50768)

Cleanup locking in configz

**What this PR does / why we need it**:
- Reduce scope of lock in `write()` method
- Use the read lock in `write()` method

**Release note**:
```release-note
NONE
```
/kind cleanup

@mikedanese 

p.s. looks like the `Set()` method could be removed if the value is accepted as an argument to `New()`. I.e. looks like to code re-sets the value.
2017-08-17 03:13:57 -07:00
Ti Zhou
589c90a439 Fixed several typos in CHANGELOG.md. 2017-08-17 16:48:26 +08:00
Kubernetes Submit Queue
402e48b072 Merge pull request #50583 from liggitt/endpoints-empty-noop
Automatic merge from submit-queue (batch tested with PRs 49869, 47987, 50211, 50804, 50583)

Make endpoints controller update based on semantic equality

Fixes #50828
Split from https://github.com/kubernetes/kubernetes/pull/45294 for separate review

Currently, endpoints objects containing no subsets are decoded by the go client as subsets:[] (when requested individually) or as subsets:null (when requested in a list of endpoints).

Because the endpoints controller is fed via a lister/watcher, it gets the `subsets:null` version fed to it. The subsets computation then returns an empty slice, which fails reflect.DeepEqual, which triggers a write attempt.

This PR makes the comparison use semantic.DeepEqual to avoid spurious writes.

https://github.com/kubernetes/kubernetes/pull/45294 would remove the inconsistency between lists and individual gets.
2017-08-17 01:32:25 -07:00
Kubernetes Submit Queue
90fad2d111 Merge pull request #50804 from ixdy/bump-repo-infra
Automatic merge from submit-queue (batch tested with PRs 49869, 47987, 50211, 50804, 50583)

Bump repo-infra/kazel dependency

**What this PR does / why we need it**: `kazel` shouldn't be looking under skipped paths (like `_output`) for openapi files. This was fixed in https://github.com/kubernetes/repo-infra/pull/32 and now should be included here.

I've tested locally that this now ignores everything under `_output`.

**Release note**:

```release-note
NONE
```

/assign @mikedanese @spxtr
2017-08-17 01:32:23 -07:00
Kubernetes Submit Queue
c8cfc5f723 Merge pull request #50211 from NuxiNL/util-freebsd
Automatic merge from submit-queue (batch tested with PRs 49869, 47987, 50211, 50804, 50583)

Make socket address parsing work on FreeBSD.

**What this PR does / why we need it**:

I am currently in the process of porting Kubernetes to work on FreeBSD. What is interesting is that I am not interested in using Kubernetes to run Docker containers in this case. I happen to be the author of CloudABI, a sandboxing framework that is available on FreeBSD (and other systems). I want to have a cluster management tool for scheduling these sandboxed processes.

Anyway, right now `kubelet` crashes on startup when passing in CRI command line flags, for the reason that it's not able to parse `unix:...` socket addresses. This change fixes this by making the respective Linux-only source file work on FreeBSD as well.
2017-08-17 01:32:21 -07:00
Kubernetes Submit Queue
9c8f74e45c Merge pull request #47987 from wongma7/reclaimpolicy
Automatic merge from submit-queue (batch tested with PRs 49869, 47987, 50211, 50804, 50583)

Add ReclaimPolicy field to StorageClass

fix https://github.com/kubernetes/kubernetes/issues/38192, enough people want this imo so going ahead and adding it according to initial suggested design

some considerations:
* No Recycle allowed, Retain (& Delete) only.
* Do we need to gate the field.
* E2E test where a Retain PV is dynamically provisioned is TODO if we agree we want this & this is the way to do it.
* Need a feature repo issue to track docs and stuff for 1.8

**Release note**:

```release-note
StorageClass has a new field to configure reclaim policy of dynamically provisioned PVs.
```
2017-08-17 01:32:18 -07:00
Kubernetes Submit Queue
e5b68f0e69 Merge pull request #49869 from wanghaoran1988/add_e2e_node_authz
Automatic merge from submit-queue

add some e2e for node authz

**What this PR does / why we need it**:
fix #47174
**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #47174

**Special notes for your reviewer**:

**Release note**:
```
None
```
2017-08-17 00:58:45 -07:00
Di Xu
75258b2763 update testcase err msg 2017-08-17 15:42:05 +08:00
Di Xu
fc0bdb5622 auto-gen 2017-08-17 15:42:05 +08:00
Di Xu
a8742a0643 fix GPU resource validation incorrectly allows zero limits 2017-08-17 15:41:59 +08:00
Kubernetes Submit Queue
4d7e41d895 Merge pull request #50788 from aveshagarwal/master-scheduling-cleanup
Automatic merge from submit-queue

Remove duplicate unused function.

This function has been moved to https://github.com/kubernetes/kubernetes/blob/master/test/e2e/framework/util.go#L4592

@kubernetes/sig-scheduling-bugs @bsalamat
2017-08-17 00:08:49 -07:00
m1093782566
992f618343 move IsLocalIP() and ShouldSkipService() to pkg/proxy/util 2017-08-17 14:32:05 +08:00
zhengjiajin
c11a9fc95d fix kubectl issue(#52)kubectl run --expose continues after error (missing port) 2017-08-17 14:30:46 +08:00
Kubernetes Submit Queue
baa6b2ff20 Merge pull request #50777 from apelisse/useful-error
Automatic merge from submit-queue (batch tested with PRs 49342, 50581, 50777)

apimachinery: Print unknown transport type

The current error message prints a pointer value rather than the actual
type, which is really not useful.

e.g.:

```
# Old:
unknown transport type: &{0xc42044a7b0 0xc4208d6dc0}

# New:
unknown transport type: *gcp.conditionalTransport
```

**What this PR does / why we need it**: Makes an error message more useful.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: related to #50775 

**Special notes for your reviewer**:

**Release note**:

```release-note
NONE
```
2017-08-16 23:08:17 -07:00