Commit Graph

285 Commits (1dfd6ab0c11d95ef5d5352509c90fdab5ce4ed29)

Author SHA1 Message Date
deads2k fd1c8e096a eliminate cross-namespace HPA escalation attack 2015-11-03 08:05:26 -05:00
Janet Kuo cb2466c50f Remove invalid blank line when printing jobs 2015-10-26 17:23:56 -07:00
Daniel Smith 075d760ad4 Merge pull request #16016 from mqliang/uselessDel
remove useless function
2015-10-26 17:06:42 -07:00
Janet Kuo 013096cb6e Handle the case when min pods is nil for "kubectl get hpa" 2015-10-21 16:43:13 -07:00
mqliang e1b73ed481 delete useless function 2015-10-21 15:38:52 +08:00
Janet Kuo bc16642e6b Fix the incorrect min pods when "kubectl get hpa" 2015-10-19 16:18:27 -07:00
Jerzy Szczepkowski df732f061a HorizontalPodAutoscaler API: removal of ResourceConsumption target, introduction of CPU request utilization & other cleanups. 2015-10-16 07:15:50 +02:00
Mike Danese a7a54cac74 move job to generalized label selector 2015-10-15 07:42:58 -07:00
Janet Kuo b9c8b76b6b address comments 2015-10-13 18:48:27 -07:00
Janet Kuo f39fe2056d Keep Flatten() and format output earlier in kubectl get 2015-10-13 18:48:27 -07:00
Chao Xu 7c9f4cc42f experimental. -> extensions. 2015-10-09 15:49:10 -07:00
Chao Xu 67f316dd19 apis/experimental->apis/extensions 2015-10-09 15:04:41 -07:00
Mike Danese 73f7242027 rename JobStatus.Unsuccessful => JobStatus.Failed, JobStatus.Successful => JobStatus.Succeeded 2015-10-08 10:41:22 -07:00
Eric Tune b4ca15dfce Print namespace when asked for job.
Also print multiple containers if there happen to be multiple.
2015-10-05 10:32:14 -07:00
k8s-merge-robot e330b1197e Merge pull request #14459 from bprashanth/l7_ingress_resource_refactor
Auto commit by PR queue bot
2015-10-02 10:20:48 -07:00
Prashanth Balasubramanian 99b0e051fc Kubectl printer 2015-09-29 18:51:24 -07:00
Jerzy Szczepkowski a5194c5ff4 HorizontalPodAutoscaler.Status kept by value, not by pointer.
HorizontalPodAutoscaler.Status kept by value, not by pointer. Fixes #14567.
2015-09-29 14:25:46 +02:00
k8s-merge-robot c2f76e4ce7 Merge pull request #14106 from jszczepkowski/hpa-api
Auto commit by PR queue bot
2015-09-19 22:23:06 -07:00
Daniel Martí 586cb9126a Move pkg/util.Time to pkg/api/unversioned.Time
Along with our time.Duration wrapper, as suggested by @lavalamp.
2015-09-17 17:51:27 -07:00
Kris f4ad00d9ae Moving Status object to a common package 2015-09-17 14:09:53 -07:00
Jerzy Szczepkowski 7fcf7f1177 Cleanups in HorizontalPodAutoscaler API.
Cleanups in HorizontalPodAutoscaler API: renamed Min/MaxCount to Min/MaxReplicas as Replicas is the proper name used in other objects.
2015-09-17 14:16:43 +02:00
Mike Danese 54b0faf39a rebase onto head 2015-09-15 18:13:28 -07:00
Ananya Kumar 30f5b93d2f Add Kubectl support for Daemon 2015-09-15 18:11:12 -07:00
Maciej Szulik 1b46bc010a Job clients, printer and describer 2015-09-15 13:54:51 +02:00
Daniel Smith ccd9e3e247 Run all automated tools 2015-09-11 16:11:08 -07:00
Daniel Smith 4c2adabf42 move; sed replace 2015-09-11 16:03:22 -07:00
k8s-merge-robot b67aa39c73 Merge pull request #13626 from feihujiang/getTerminatedPodByName
Auto commit by PR queue bot
2015-09-11 12:57:03 -07:00
k8s-merge-robot e46c940cae Merge pull request #13545 from brendandburns/kubectl
Auto commit by PR queue bot
2015-09-10 17:23:11 -07:00
Brendan Burns 56a1cd76cb Address changes. 2015-09-10 13:05:32 -07:00
Brendan Burns b485821bb1 Enable custom columns printing in kubectl 2015-09-10 13:05:32 -07:00
tummychow 78ce5da988 Move util.StringSet into its own package
A lot of packages use StringSet, but they don't use anything else from
the util package. Moving StringSet into another package will shrink
their dependency trees significantly.
2015-09-10 12:04:15 -07:00
feihujiang 008a26f690 Get the terminated pod by name 2015-09-08 14:15:36 +08:00
Dai Zuozhuo 2e2ef3e830 change -o template to -o go-template=... 2015-09-05 22:30:47 +08:00
Quinton Hoole ded8569524 Merge pull request #12908 from mwielgus/kubectl_get_hpa
HorizontalPodAutoscaler in kubectl get
2015-09-04 09:07:08 -07:00
Quinton Hoole e5e2bc9580 Merge pull request #10833 from markturansky/loosen_binding
Allow PV/Claim matching on inexact access modes
2015-09-04 09:06:31 -07:00
Marcin Wielgus 3f21071064 HorizontalPodAutoscaler in kubectl get 2015-09-03 13:49:06 +02:00
Abhi Shah 13784bf9ca Merge pull request #13047 from JanetKuo/kubectl-label-bash-completion
Enable kubectl label resource type bash completion
2015-09-02 15:16:54 -07:00
Brendan Burns 31454d0f46 Merge pull request #12705 from brendandburns/kubectl
Add a printer that knows how to print user-defined columns
2015-09-02 09:47:34 -07:00
Janet Kuo b673920ccf Get printer from factory to retrieve handled resources 2015-09-01 10:20:51 -07:00
Brendan Burns de14623775 Add a printer that knows how to print user-defined columns 2015-09-01 10:11:13 -07:00
nikhiljindal ac0b060e62 Adding a kubectl resource printer for deployments 2015-08-31 14:57:02 -07:00
markturansky 0b6030f50c added better matching for PV access modes 2015-08-27 15:34:07 -04:00
hurf d2d96ff6e1 Add -o name for commands which use printer to output results
Added a new printer which prints 'resource/name' pair of a given
object.
2015-08-26 17:04:23 +08:00
hurf 36987e9dce Move formatLabels function to labels package
As the TODO above the function instructed, move formatLables
function to labels package.
2015-08-23 18:27:48 +08:00
Brendan Burns 5d664892f2 Add a storage implementation for thirdpartyresources. 2015-08-21 17:21:40 -07:00
k8s-merge-robot 44c76d5319 Merge pull request #12957 from smarterclayton/handle_terminating_pods
Auto commit by PR queue bot
2015-08-20 21:47:00 -07:00
Abhishek Shah b6b8e99393 External IPs support. 2015-08-20 16:10:01 -07:00
Saad Ali 489e75e073 Merge pull request #12202 from daizuozhuo/kubectl
add jsonpath to kubectl
2015-08-20 14:31:45 -07:00
Clayton Coleman 2aaf8bddc2 Update controllers and client to handle terminating pods 2015-08-20 11:04:39 -04:00
Wojciech Tyczynski 44fa48e5af Merge pull request #12635 from hurf/null_age
fix AGE error when resource has no creationTimeStamp
2015-08-20 13:09:41 +02:00
Dai Zuozhuo b61a905b19 add jsonpath to kubectl 2015-08-20 08:57:24 +08:00
Saad Ali d42864b0ad Merge pull request #12112 from JanetKuo/update-kubectl-get-pods-running
Hide terminated pods in 'kubectl' Printer by default
2015-08-19 12:51:18 -07:00
hurf c20ed0344a Enhance shortHumanDuration to handle more situation
Allow 2 seconds deviation of current time. For time more than 2
seconds from current time, output as '<invalid>'.
2015-08-19 16:34:15 +08:00
hurf 501594f8c7 fix AGE error when resource has no creationTimeStamp
If the resource doesn't contain creationTimeStamp, report AGE as
unknown. This usually happens when the resouces is created locally
or is not accually created at server side.
2015-08-19 16:08:36 +08:00
Robert Bailey 08e6a43c1d Revert "Merge pull request #9165 from smarterclayton/graceful"
This reverts commit 4f856b595d, reversing
changes made to d78525a83b.

Conflicts:
	pkg/kubelet/status_manager.go
2015-08-18 17:34:49 -07:00
Janet Kuo 44a7a52a94 Hide failed/succeeded pods in 'kubectl get pods' by default 2015-08-18 13:47:19 -07:00
Clayton Coleman b842a7dd15 Revert "Revert "Gracefully delete pods from the Kubelet""
This reverts commit 98115facfd.
2015-08-18 08:57:02 -04:00
markturansky f37113aa25 Improved CLI for PVClaims 2015-08-12 11:31:54 -04:00
Filip Grzadkowski 9dd3cac82e Merge pull request #12423 from brendandburns/service
Make services print on a single line.
2015-08-11 10:29:23 +02:00
Alex Robinson 4593478c65 Merge pull request #12461 from hurf/humanize_time2
Print human readable time for event
2015-08-10 11:52:33 -07:00
Brendan Burns 79fb674679 Fix the service printer to be a single line per service 2015-08-10 10:57:45 -07:00
hurf dd647db5ac Print human readable time for event
Reduce the length of event time as AGE column does.
2015-08-10 15:00:24 +08:00
Veres Lajos 9f77e49109 typofix - https://github.com/vlajos/misspell_fixer 2015-08-08 22:31:48 +01:00
hurf e450c3b771 Add age column for all resources when using kubect get
Dispaly human readable creation time like age column do in `kubectl
get po` for all resources.
2015-08-07 21:18:30 +08:00
Mike Danese 17defc7383 run gofmt on everything we touched 2015-08-05 17:52:56 -07:00
Mike Danese 8e33cbfa28 rewrite go imports 2015-08-05 17:30:03 -07:00
markturansky 4b601a80fe added formatLabel to pvclaims 2015-07-11 09:47:03 -04:00
Joe Beda 31de03c18a Fix up #10851 to be golang 1.3 compatible.
See also #11016
2015-07-09 14:53:57 -07:00
Joe Beda 0426ab3290 Update list of resources for 'kubectl get' help output. 2015-07-09 08:59:32 -07:00
Joe Beda c15953662e Fix up alignment of columns w/ namespaces.
Fixes #10842

All issues for types that use "extra lines" for extended information.  Two issues fixed: (1) When namespaces are listed an extra column isn't inserted for extra lines and (2) trailing tabs aren't inserted when label columns are specified.

This code should probably move to a more explicit model of putting data into "cells".

The test for this hits https://github.com/golang/go/issues/6416 and so I introduced a "LineDelimiter" writer filter to make white space more visible.
2015-07-09 08:59:32 -07:00
Yu-Ju Hong 4d86127098 Merge pull request #10644 from erictune/noslash
NAMESPACE in own column: kubectl --all-namespaces
2015-07-06 11:40:02 -07:00
Eric Tune 88fa471d06 NAMESPACE in own column: kubectl --all-namespaces 2015-07-02 22:23:52 -07:00
Eric Tune 21bbde46d4 Error: kubectl --all-namespaces get {node|ev|cs}
Report an error if someone asks for --all-namespaces
when getting a thing that is not namespaced.

This is in preparation for a subsequent commit which prints namespace
as its own column.

Restructured test to expect an error for non-namespaced things.
Dropped the part where it was trying to test that not printing
namespace didn't contain namespace.  Some other test can cover that.
2015-07-01 16:35:55 -07:00
Anastasis Andronidis 7480077f2b Rename REASON column to STATUS for kubectl get
Fixes #10560
2015-07-01 17:38:27 +02:00
Janet Kuo 682734bcc7 Implement 'kubectl get ... -o wide' 2015-06-30 14:06:47 -07:00
Jeff Lowdermilk d0fc0d884d Merge pull request #9876 from andronat/9631_labelcolumn
Printing resource labels as columns
2015-06-22 11:55:26 -07:00
Anastasis Andronidis b06ef70057 Print resource labels as columns 2015-06-22 00:44:51 +02:00
Anastasis Andronidis 101739a6be Added Reason in PodStatus 2015-06-21 17:05:34 +02:00
Mike Danese c9bd90a5df Merge pull request #9032 from andronat/fix_7843
Decrease columns and refactor get pods layout
2015-06-05 15:06:53 -07:00
Anastasis Andronidis 68d9313d69 Refactor get pods layout 2015-06-05 22:28:17 +02:00
markturansky 2829fadfad PV Recycling API 2015-06-04 15:39:34 -04:00
Filip Grzadkowski 98115facfd Revert "Gracefully delete pods from the Kubelet" 2015-06-02 23:40:05 +02:00
Clayton Coleman ce3a6a666d Show terminating pods in get/describe 2015-06-01 19:24:01 -04:00
Chao Xu 2f6e5e2e08 Update ContainerState.Termination to ContainerState.Terminated in pkg/api/types.go and pkg/api/v1/types.go 2015-05-28 17:18:24 -07:00
Tim Hockin 4318ca5a8b Rename 'portal IP' to 'cluster IP' most everywhere
This covers obvious transforms, but not --portal_net, $PORTAL_NET and
similar.
2015-05-28 16:10:44 -07:00
Tim Hockin 081ab3abac Merge pull request #8853 from caesarxuchao/HostToNodeName
update PodSpec.Host to PodSpec.NodeName
2015-05-28 15:50:12 -07:00
Chao Xu 9c1153322e update PodSpec.Host to PodSpec.NodeName in /pkg/api/types.go and /pkg/api/v1beta3/types.go 2015-05-28 14:10:06 -07:00
kargakis 93669a6bb5 Show pods number when describing services 2015-05-28 11:24:47 +02:00
Justin Santa Barbara 3884d5fc59 Add LoadBalancer status to ServiceStatus
This will replace publicIPs
2015-05-22 18:27:05 -04:00
Masahiro Sano c2514a7524 print namespace with name in single column if withNamespace specified 2015-05-22 23:25:12 +09:00
Masahiro Sano 8ce64ec69e add --all-namespaces flag to request across all namespaces 2015-05-22 23:25:12 +09:00
Brendan Burns a197b24fb7 Add a test for status message generation. Fix a bug in reason message handling. 2015-05-15 20:45:16 +01:00
markturansky 0191574f7e Bi-directional bind between pv.Spec.ClaimRef and pvc.Spec.VolumeName 2015-05-13 14:05:21 -04:00
Jordan Liggitt 53d55f4192 Add ServiceAccount API type, client 2015-05-11 17:18:05 -04:00
Kenjiro Nakayama 5a0acecc54 Delete status from displayable resources 2015-05-10 19:28:02 +09:00
Wojciech Tyczynski a020e054d8 Merge pull request #7662 from jlowdermilk/services-printer
Change IP to IP(S) in service columns for kubectl get
2015-05-04 13:35:09 +02:00
Jeff Lowdermilk cd9e7fbc4f Change IP to IP(S) in service columns for kubectl get 2015-05-01 16:47:21 -07:00
Eric Paris 6b3a6e6b98 Make copyright ownership statement generic
Instead of saying "Google Inc." (which is not always correct) say "The
Kubernetes Authors", which is generic.
2015-05-01 17:49:56 -04:00
Paul Morie 8fa21ebd62 Merge pull request #7419 from liggitt/secrets_etcd
Convert Secret registry to use update/create strategy, allow filtering by Type
2015-04-29 09:59:22 -04:00
Jordan Liggitt ac67fff1cf Convert Secret registry to use update/create strategy, allow filtering by Type 2015-04-28 15:00:20 -04:00
Tim Hockin eea949b3a3 Print named ports in 'describe service'
Also in 'describe service'.  This got missed in all the multiport work.
2015-04-27 22:17:51 -07:00
Clayton Coleman e6e034af4f Rename PodTemplate.Spec to PodTemplate.Template 2015-04-22 12:54:27 -04:00
Clayton Coleman 10c2ace6bf Pod Templates 2015-04-22 12:54:25 -04:00
Yu-Ju Hong 06125f37d3 Print container statuses in `kubectl get pods`
`kubectl get pod` already prints one container per line. This change fills in
the status for each container listed. This aims to help users quickly identify
unhealthy pods (e.g. in a crash loop) at a glance.

 - The first row of every pod would display the pod information and status
 - Each row of the subsequent rows corresponds to a container in that pod:
    * STATUS refers to the container status (Running, Waiting, Terminated).
    * CREATED refers to the elapsed time since the last start time of the
      container.
    * MESSAGE is a string which explains the last termination reason, and/or
      the reason behind the waiting status.
2015-04-21 15:42:18 -07:00
Brendan Burns e079e23e47 Merge pull request #6597 from fabioy/kubectl-validate
Add "kubectl validate" command to do a cluster health check.
2015-04-20 11:21:06 -07:00
Avesh Agarwal a2ac72c4e7 This commit fixes "kubectl get nodes" output and makes it more sane, and also adds new unit test cases for SchedulingDisabled. 2015-04-20 00:12:18 -04:00
Fabio Yeon 951a125751 Add "componentstatus" to API for easier cluster health check. 2015-04-17 11:58:23 -07:00
Eric Paris c75ecbd8e3 bash_completions: annotate kubectl get with resources which can be 'gotten'
A user types:
  kubectl get $resource

This will cause the bash completions to suggest the possible objects the
user can ask for.  The complete list right now is:

endpoints
event
limitrange
namespace
node
persistentvolume
persistentvolumeclaim
pod
replicationcontroller
resourcequota
secret
service
status

But this list should stay up2date as api objects are added or deleted
2015-04-13 19:11:26 -04:00
gmarek ef56dca6b6 Remove ConditionSchedulable 2015-04-07 17:01:07 +02:00
markturansky 95bd170ca2 PV & PVC Client implementation 2015-04-06 08:46:43 -04:00
Jeff Lowdermilk 96bdee8c28 Merge pull request #6312 from brendandburns/services
Make expose use introspection to grab the port value if possible.
2015-04-02 13:32:50 -07:00
Brendan Burns 674efe6de8 Make expose use introspection to grab the port value if possible.
Also improve service printing to include public IP addresses.
2015-04-02 13:08:47 -07:00
Piotr Szczesniak 5c6439d449 Removed PodStatus.Host
Fixes #6165
2015-04-02 16:38:45 +02:00
Deyuan Deng 6bb9701489 Remove Reachable Condition 2015-04-01 13:56:43 -04:00
Tim Hockin 186818d787 WIP: Implement multi-port Services 2015-03-30 19:28:11 -07:00
Sam Ghods f8d8b09a0a Reduce some tab spacing in kubectl 2015-03-27 18:05:20 -07:00
Tim Hockin 8ae203825b Implement multi-port endpoints
Instead of endpoints being a flat list, it is now a list of "subsets"
where each is a struct of {Addresses, Ports}.  To generate the list of
endpoints you need to take union of the Cartesian products of the
subsets.  This is compact in the vast majority of cases, yet still
represents named ports and corner cases (e.g. each pod has a different
port number).

This also stores subsets in a deterministic order (sorted by hash) to
avoid spurious updates and comparison problems.

This is a fully compatible change - old objects and clients will
keepworking as long as they don't need the new functionality.

This is the prep for multi-port Services, which will add API to produce
endpoints in this new structure.
2015-03-27 12:36:32 -07:00
Deyuan Deng ca68f4a9d1 Rename ConditionFull->ConditionTrue, ConditionNone->ConditionFalse 2015-03-24 17:28:59 -04:00
Ravi Sankar Penta f6ecec5880 Allow admin user to explicitly unschedule the node
Setting Unschedulable on the node will not touch any existing pods
on the node but will block scheduling of new pods on the node.
2015-03-12 14:27:27 -07:00
derekwaynecarr 7de138a9bb Add a NamespacePhase to Namespace 2015-03-10 14:11:54 -04:00
Clayton Coleman b799e8cd3a Enumerate all versions when looking for an output conversion
Ensures that all objects can be printed, even if they don't
match output-version (because they are only implemented in
a newer API version).
2015-03-04 10:48:05 -05:00
Brendan Burns ceac670eae Add a human readable created since column to kubectl. 2015-02-26 22:16:23 -08:00
Rohit Jnagal a0722376ee Merge pull request #4760 from ddysher/kubectl-endpoint-list
kubectl print endpoint list
2015-02-24 10:11:23 -08:00
Mike Danese 5267127af1 api: rename conditionkind -> conditiontype 2015-02-23 22:13:21 -08:00
Deyuan Deng 515314fb8a Fix kubectl print endpoint list 2015-02-23 21:20:10 -05:00
Daniel Smith 650f6cb826 Revert "Multi-port Endpoints" 2015-02-23 13:53:21 -08:00
Daniel Smith 502f040129 Merge pull request #4712 from thockin/plural_30_endpoints
Multi-port Endpoints
2015-02-23 13:48:37 -08:00
Rohit Jnagal efc4db280d Merge pull request #4703 from smarterclayton/describe_portal_on_service
Add PortalIP to Service describe
2015-02-23 10:07:51 -08:00
Tim Hockin 160f288832 Implement multi-port Endpoints
This is a part of multi-port services.
2015-02-22 09:35:12 -08:00
Clayton Coleman 36f19f77ec Add PortalIP to Service describe 2015-02-22 01:07:33 -05:00
Deyuan Deng aec068f7ef Add pod name to node describe 2015-02-21 12:07:09 -05:00
Tim Hockin ae0062d001 Part 2 of plural ports: make endpoints a struct
Includes conversions for v1b[12] and tests and fixups for call sites.
2015-02-18 19:54:15 -08:00
Paul Morie fb001ada21 Secret API resource 2015-02-18 11:54:56 -05:00
saadali 033577efa2 Optimize etcd storage by compressing recurring events in to a single event 2015-02-11 22:57:44 -08:00
derekwaynecarr 0bd0e12bbc Add support for Namespace as Kind
Add example for using namespaces
2015-02-10 09:50:50 -05:00
saadali 79cbcf918e Modify Event struct to allow compressing multiple recurring events in to a single event.
# *** ERROR: *** Some API files are missing the required field descriptions
# Add description tags to all non-inline fields in the following files:
#   pkg/api/v1beta1/types.go
#   pkg/api/v1beta2/types.go
#
# Your commit will be aborted unless you fix these.
#   COMMIT_BLOCKED_ON_DESCRIPTION
2015-02-05 21:50:29 -08:00
Clayton Coleman 698e8dd06f Kubectl should be able to display endpoints directly and for service
kubectl get endpoints <servicename>
    kubectl describe service <servicename>

should have printers for endpoints
2015-02-05 18:46:09 -05:00
derekwaynecarr 829fa69527 Introduce a ResourceQuota object 2015-01-28 15:03:19 -05:00
derekwaynecarr 091cbe5fa2 Add a limit range resource 2015-01-27 16:41:27 -05:00
Dawn Chen a71588dc89 Merge pull request #3504 from ddysher/kubectl-node-status
Include node status in kubectl get output
2015-01-16 12:01:29 -08:00
Deyuan Deng 616feac25b Include node status in kubectl get output 2015-01-16 14:28:35 -05:00
Dawn Chen 7b457fd33f Separate colume for PodIP from kubectl get pods 2015-01-16 11:10:30 -08:00
saadali 90dfdcecd5 Remove CONDITION from event object completely
# *** ERROR: *** Some files have not been gofmt'd.  To fix these
# errors, run gofmt -s -w <file>, or cut and paste the following:
#   gofmt -s -w pkg/kubecfg/resource_printer.go pkg/proxy/config/config.go pkg/runtime/types.go
#
# Your commit will be aborted unless you override this warning. To
# commit in spite of these format errors, delete the following line:
#   COMMIT_BLOCKED_ON_GOFMT
2015-01-14 14:17:16 -08:00
Clayton Coleman b5c33e1c8c Prevent internal conversion in the printer directly (as per implicit contract) 2015-01-13 18:51:33 -05:00
bgrant0607 bb140d636a Merge pull request #3004 from smarterclayton/allow_get_to_span_resources
Allow kubectl get to fetch multiple resource types by label
2015-01-13 11:07:34 -08:00
Dawn Chen a7ad7f8207 Print PodIP along with Pod.Name for kubectl get pod <id> 2015-01-09 14:18:10 -08:00
Clayton Coleman 2151afe334 Allow kubectl get to fetch multiple resource types
Like Delete, which can now run over multiple types:

    kubectl delete pods,services -l name=foo

Get should be able to span items for label selection

    kubectl get pods,services -l name=foo
2015-01-09 13:30:14 -05:00
Dawn Chen 2b91c1417c Create selfLink for pods from config files and indicate hostname as part of event source. 2015-01-06 16:08:20 -08:00
saadali e8d30f019d Modify "kubectl get events" to print FieldPath so BoundPod events for the same Pod but different containers can be differentiated 2014-12-29 21:32:49 -08:00
Daniel Smith 7f46d420dd add existence func and unit test 2014-12-23 14:05:26 -08:00