Commit Graph

185 Commits

Author SHA1 Message Date
JimGalasyn 64704a2a80 Delete extraneous H1 title
Signed-off-by: JimGalasyn <jim.galasyn@docker.com>
2017-06-02 00:11:00 +00:00
Anusha Ragunathan c9f1050226 Add pid host support
Tested using global-net-plugin-ipc which sets PidHost in config.json.

Plugins might need access to host pid namespace. Add support for that.
Tested using aragunathan/global-net-plugin-ipc which sets "pidhost" in
config.json. Observed using `readlink /proc/self/ns/pid` that plugin and
host have the same ns.

Signed-off-by: Anusha Ragunathan <anusha.ragunathan@docker.com>
2017-06-02 00:10:59 +00:00
Anusha Ragunathan 9111051d98 Add support in plugin config for accessing host ipc namespace.
Plugins might need access to host ipc namespace. A good usecase is
a volume plugin running iscsi multipath commands that need access to
host kernel locks.
Tested with a custom plugin (aragunathan/global-net-plugin-full) that's
built with `"ipchost" : true` in config.json. Observed using
`readlink /proc/self/ns/ipc` that plugin and host have the same ns.

Signed-off-by: Anusha Ragunathan <anusha.ragunathan@docker.com>
2017-06-02 00:10:59 +00:00
Jimmy Song 3e4d1cacf4 modify docker plugin sshfs entrypoint
Signed-off-by: Jimmy Song <rootsongjc@gmail.com>
2017-06-02 00:10:58 +00:00
Keith Hudgins 01468292d6 added listing for Nimble Storage's volume plugin
Signed-off-by: Keith Hudgins <greenman@greenman.org>

updated nimble plugin url
2017-06-02 00:10:57 +00:00
scjane 2c9f862eaf Update index.md
Signed-off-by: Wang Jie <wangjie5@chinaskycloud.com>
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2017-06-02 00:10:56 +00:00
Anusha Ragunathan 93344b57f3 Service creation using network plugin filters.
Signed-off-by: Anusha Ragunathan <anusha.ragunathan@docker.com>
2017-06-02 00:10:56 +00:00
Misty Stanley-Jones f36bcf1acd Fix some Liquid errors
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:55 +00:00
Misty Stanley-Jones 38ac6860eb Update plugin_volume apidocs for v2
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:55 +00:00
Anusha Ragunathan ab7522c939 Add plugin socket related debug docs.
Signed-off-by: Anusha Ragunathan <anusha.ragunathan@docker.com>
2017-06-02 00:10:55 +00:00
Anusha Ragunathan c76dcd33f7 Add plugin debug docs.
Doc fix for #30761

Signed-off-by: Anusha Ragunathan <anusha.ragunathan@docker.com>
2017-06-02 00:10:53 +00:00
Brian Goff df4e570ff4 Make propagated mount persist outside rootfs
This persists the "propagated mount" for plugins outside the main
rootfs. This enables `docker plugin upgrade` to not remove potentially
important data during upgrade rather than forcing plugin authors to hard
code a host path to persist data to.

Also migrates old plugins that have a propagated mount which is in the
rootfs on daemon startup.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:10:52 +00:00
Yong Tang ecfe6ab218 Add `capability` filter to `docker plugin ls`
This fix adds `--filter capability=[volumedriver|authz]` to `docker plugin ls`.

The related docs has been updated.

An integration test has been added.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
2017-06-02 00:10:51 +00:00
David Williamson b8df00a4b4 Provide password to volume create command
* Depending on the host configuration between the docker engine and the remote host we wish to mount using sshfs, a password may be required.
* Confirmed syntax for optional parameter with @vieux
* Verified change works as desired with engine running on Ubuntu host and mounting a volume from a file system on a Mac.

Signed-off-by: David Williamson <david.williamson@docker.com>
2017-06-02 00:10:51 +00:00
Anusha Ragunathan 79479e040f Add docs for service create based on plugins.
Signed-off-by: Anusha Ragunathan <anusha.ragunathan@docker.com>
2017-06-02 00:10:51 +00:00
Janonymous 7953201f9d Fix json format of plugin
Signed-off-by: Janonymous <janonymous.codevulture@gmail.com>
2017-06-02 00:10:51 +00:00
Tibor Vass f75cb34afa plugins: add example docs for a rexray plugin
Signed-off-by: Tibor Vass <tibor@docker.com>
2017-06-02 00:10:49 +00:00
Zhang Wei b5758e62de Fix some typos
Signed-off-by: Zhang Wei <zhangwei555@huawei.com>
2017-06-02 00:10:49 +00:00
Tibor Vass 8c3f18ca6d plugins: rename DeviceCreation to AllowAllDevices
Signed-off-by: Tibor Vass <tibor@docker.com>
2017-06-02 00:10:48 +00:00
Victor Vieux 63aa05d3f7 replace no-remove by sample-volume-plugin in docs
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:47 +00:00
Ovidio Mallo b839363db9 Reference new DigitalOcean plugin (Closes #29729)
Signed-off-by: Ovidio Mallo <ovidio.mallo@gmail.com>
2017-06-02 00:10:47 +00:00
zhenghenghuo a724a5d8c9 fix some typos
Signed-off-by: zhenghenghuo <zhenghenghuo@zju.edu.cn>

try to pass test

Signed-off-by: zhenghenghuo <zhenghenghuo@zju.edu.cn>

try to pass the test

Signed-off-by: zhenghenghuo <zhenghenghuo@zju.edu.cn>
2017-06-02 00:10:46 +00:00
yuexiao-wang fcb3a0e88b Update 'ID' field for 'docker plugin ls'
Signed-off-by: yuexiao-wang <wang.yuexiao@zte.com.cn>
2017-06-02 00:10:46 +00:00
Brian Goff a59544ff3d Moves graphdriver plugn docs out of experimental
Also updates some of the structures being sent so plugins are getting
all the new options.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:10:46 +00:00
Tonis Tiigi b5b3dd4c6b Implement content addressability for plugins
Move plugins to shared distribution stack with images.

Create immutable plugin config that matches schema2 requirements.

Ensure data being pushed is same as pulled/created.

Store distribution artifacts in a blobstore.

Run init layer setup for every plugin start.

Fix breakouts from unsafe file accesses.

Add support for `docker plugin install --alias`

Uses normalized references for default names to avoid collisions when using default hosts/tags.

Some refactoring of the plugin manager to support the change, like removing the singleton manager and adding manager config struct.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Signed-off-by: Derek McGowan <derek@mcgstyle.net>
2017-06-02 00:10:46 +00:00
Hongbin Lu 08ba19c291 Add Fuxi Volume Plugin to the docs
Signed-off-by: Hongbin Lu <hongbin034@gmail.com>
2017-06-02 00:10:45 +00:00
Victor Vieux 5bfa17e58b remove old media type compat for plugins
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:44 +00:00
lixiaobing10051267 2373288938 replace env description with args in extend config
Signed-off-by: lixiaobing10051267 <li.xiaobing1@zte.com.cn>
2017-06-02 00:10:44 +00:00
Tibor Vass 5a84f77819 plugins: container-rootfs-relative paths
Legacy plugins expect host-relative paths (such as for Volume.Mount).
However, a containerized plugin cannot respond with a host-relative
path. Therefore, this commit modifies new volume plugins' paths in Mount
and List to prepend the container's rootfs path.

This introduces a new PropagatedMount field in the Plugin Config.
When it is set for volume plugins, RootfsPropagation is set to rshared
and the path specified by PropagatedMount is bind-mounted with rshared
prior to launching the container. This is so that the daemon code can
access the paths returned by the plugin from the host mount namespace.

Signed-off-by: Tibor Vass <tibor@docker.com>
2017-06-02 00:10:43 +00:00
Victor Vieux b82e761088 update plugin example
Signed-off-by: Victor Vieux <victorvieux@gmail.com>

cleanup whitespace formatting

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2017-06-02 00:10:42 +00:00
Misty Stanley-Jones d5b3df0c2f Fix some redirect loops and problems
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:42 +00:00
lixiaobing10051267 be6e3311f2 modify invalid url in plugins_network.md
Signed-off-by: lixiaobing10051267 <li.xiaobing1@zte.com.cn>
2017-06-02 00:10:41 +00:00
Tibor Vass b70edf410d plugins: misc fixes
Rename variable to reflect manifest -> config renaming
Populate Description fields when computing privileges.
Refactor/reuse code from daemon/oci_linux.go

Signed-off-by: Tibor Vass <tibor@docker.com>
2017-06-02 00:10:40 +00:00
Ben Firshman 2cfcc8a8fa Rename Remote API to Engine API
Implementation of https://github.com/docker/docker/issues/28319

Signed-off-by: Ben Firshman <ben@firshman.co.uk>
2017-06-02 00:10:40 +00:00
Sebastiaan van Stijn e0ce0361ba add note that windows does not support managed plugins
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2017-06-02 00:10:40 +00:00
Riyaz Faizullabhoy 6393eac011 Edits to plugin docs after building authz plugin
Signed-off-by: Riyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>
2017-06-02 00:10:39 +00:00
Victor Vieux 410d4ce7ae move plugins out of experimental
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:37 +00:00
Victor Vieux fdfcbe778a rename plugin manifest
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:36 +00:00
Gaetan de Villele 4126b5526c fix frontmatter keywords value type (string, instead of []string)
Signed-off-by: Gaetan de Villele <gdevillele@gmail.com>
2017-06-02 00:10:31 +00:00
lixiaobing10051267 9b109cd9a7 fill all the rest invalid address because no related directory
Signed-off-by: lixiaobing10051267 <li.xiaobing1@zte.com.cn>
2017-06-02 00:10:30 +00:00
lixiaobing10051267 2603a9c1dd fill the complete address because of no userguide directory
Signed-off-by: lixiaobing10051267 <li.xiaobing1@zte.com.cn>
2017-06-02 00:10:30 +00:00
Misty Stanley-Jones 7ec82562ce Rewrites to Developing Plugins topic
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:26 +00:00
Misty Stanley-Jones 7f36c3a1a0 Sync docker/docker refs with files mistakenly edited in docker.github.io repo
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:26 +00:00
Ding Fei a16bba06fd Fix code block fences and typo.
Signed-off-by: Ding Fei <dingfei@stars.org.cn>
2017-06-02 00:10:24 +00:00
lixiaobing10051267 ba49f7bfe9 fix wrong output titile for docker volume ls
Signed-off-by: lixiaobing10051267 <li.xiaobing1@zte.com.cn>
2017-06-02 00:10:24 +00:00
Misty Stanley-Jones 2845676cc2 Convert Markdown frontmatter to YAML
Some frontmatter such as the weights, menu stuff, etc is no longer used
'draft=true' becomes 'published: false'

Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:24 +00:00
Misty Stanley-Jones 12a3920153 Add a link to the new build instructions
Signed-off-by: Misty Stanley-Jones <misty@docker.com>
2017-06-02 00:10:24 +00:00
John Mulhausen 68d252bc19 Remove old documentation, add README.md with pointer
Signed-off-by: John Mulhausen <john@docker.com>
2017-06-02 00:10:22 +00:00
Jeff Silberman 5790fa5793 Add Portworx Volume Plugin Description
Signed-off-by: Jeff Silberman <jsilberm@gmail.com>
2017-06-02 00:10:11 +00:00
Victor Vieux 0d521e018a add some plugin manifest reference doc
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:09 +00:00
unclejack be3bfbec55 docs: mention NFS support for contiv volume plugin
Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com>
2017-06-02 00:10:08 +00:00
Charles Smith 9c9cd1a439 some fixes to clean up new plugin system docs
Signed-off-by: Charles Smith <charles.smith@docker.com>
2017-06-02 00:10:07 +00:00
yuexiao-wang ed38ec18bf Replace docker command from 'docker daemon' to 'dockerd'
Signed-off-by: yuexiao-wang <wang.yuexiao@zte.com.cn>
2017-06-02 00:10:06 +00:00
yuexiao-wang 016a00dc6e Modify incorrect repository URL
Signed-off-by: yuexiao-wang <wang.yuexiao@zte.com.cn>
2017-06-02 00:10:06 +00:00
Victor Vieux ebc23f6116 fix broken link
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:06 +00:00
Charles Smith 16de3a25f4 edit plugin system doc, fix menu system
Signed-off-by: Charles Smith <charles.smith@docker.com>
2017-06-02 00:10:05 +00:00
Victor Vieux 4755904cc3 adding some documentation about the new plugin system
Signed-off-by: Victor Vieux <vieux@docker.com>
2017-06-02 00:10:05 +00:00
Liron Levin e428a09ae7 Enable to dynamically reload authorization plugins via daemon.config
Following #22729, enable to dynamically reload/remove the daemon
authorization plugins (via standard reloading mechanism).
https://docs.docker.com/engine/reference/commandline/daemon/#daemon-
configuration-file

Daemon must store a reference to the authorization middleware to refresh
the plugin on configuration changes.

Signed-off-by: Liron Levin <liron@twistlock.com>
2017-06-02 00:10:04 +00:00
Everett Toews d41421140c Fix AuthzPlugin URL fragment in docs
These docs have AuthzPlugin with a lower case 'z'. What the plugin
api is actually looking for is AuthZPlugin with an upper case 'Z'.

See 46e3a249a1/pkg/authorization/api.go (L5-L8)

Signed-off-by: Everett Toews <everett.toews@rackspace.com>
2017-06-02 00:10:02 +00:00
Yanqiang Miao c1a192293e Delete redundant content of 'docs/extend/plugins.md'
Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

Update plugins.md

Update plugins.md
2017-06-02 00:07:51 +00:00
Arnaud Porterie (icecrime) 253a5f4ea2 Rename `--net` to `--network`
Add a `--network` flag which replaces `--net` without deprecating it
yet. The `--net` flag remains hidden and supported.

Add a `--network-alias` flag which replaces `--net-alias` without deprecating
it yet. The `--net-alias` flag remains hidden and supported.

Signed-off-by: Arnaud Porterie (icecrime) <arnaud.porterie@docker.com>
2017-06-02 00:07:50 +00:00
Charles Smith aa3344679a add caveat for network plugins in swarm mode
Signed-off-by: Charles Smith <charles.smith@docker.com>
2017-06-02 00:07:49 +00:00
Vincent Demeester 6abf924253 Merge pull request #24325 from Anvil/plugins_volume.md-unqiue
Fixed typo: s/unqiue/unique/g
(cherry picked from commit 84aa074d18d2f75f54564f21c2b5c0d1bcddd23f)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2017-06-02 00:07:48 +00:00
Keith Hudgins 2b0ee276ca Added HPE volume plugin listing
Signed-off-by: Keith Hudgins <greenman@greenman.org>
2017-06-02 00:07:47 +00:00
Sven Dowideit be6f353670 Removing some url links that can be resolved using src markdown links
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2017-06-02 00:07:46 +00:00
Brian Goff a68bdf0073 Note about mountpoint being optional
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:07:43 +00:00
Ahmet Alp Balkan 02eead1a96 docs: Add Azure File Storage Volume Driver plugin
Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>
2017-06-02 00:07:43 +00:00
Kirill Kolyshkin 427f525b79 docs/extend/plugins.md: add docker-volume-ploop
Added docker-volume-ploop driver to the list of available volume plugins.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2017-06-02 00:07:42 +00:00
Brian Goff 13ef210b8b Add support for volume scopes
This is similar to network scopes where a volume can either be `local`
or `global`. A `global` volume is one that exists across the entire
cluster where as a `local` volume exists on a single engine.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:07:42 +00:00
Ritesh H Shukla cceb74311b Add VMware Docker Volume Plugin.
Add reference to https://github.com/vmware/docker-volume-vsphere to Docker's list of plugins.
This is an officially supported plugin from VMware.

Signed-off-by: Ritesh H Shukla <sritesh@vmware.com>
2017-06-02 00:07:41 +00:00
Roland Kammerer 263f9666cf Add the DRBD Docker Volume Plugin to the documentation
Signed-off-by: Roland Kammerer <roland.kammerer@linbit.com>
2017-06-02 00:07:40 +00:00
Sven Dowideit f9d80051da Fix up stale links
Signed-off-by: Sven Dowideit <SvenDowideit@home.org.au>
2017-06-02 00:07:40 +00:00
Jeremy Unruh a1cbc5a168 update URL for docker-volume-netshare
Signed-off-by: Jeremy Unruh <jeremybunruh@gmail.com>
2017-06-02 00:07:38 +00:00
Yi EungJun 0d227954c5 docs: Remove RequestStatusCode
The requests doesn't include RequestStatusCode field.

Signed-off-by: Yi EungJun <eungjun.yi@navercorp.com>
2017-06-02 00:07:38 +00:00
Brian Goff e1265df404 When calling volume driver Mount, send opaque ID
This generates an ID string for calls to Mount/Unmount, allowing drivers
to differentiate between two callers of `Mount` and `Unmount`.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:07:37 +00:00
Liron Levin 3e48f4b4ab Remove response modification sections from authorization design doc
Signed-off-by: Liron Levin <liron@twistlock.com>
2017-06-02 00:07:37 +00:00
Lorenzo Fontana 51e43d3bda Mention the fact that authz plugins are available today
Signed-off-by: Lorenzo Fontana <fontanalorenzo@me.com>
2017-06-02 00:07:37 +00:00
Sebastiaan van Stijn a24fe070bb docs: use tables for available plugins
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2017-06-02 00:07:36 +00:00
Wen Cheng Ma ddf0b9e873 Fix asa
Signed-off-by: Wen Cheng Ma <wenchma@cn.ibm.com>
2017-06-02 00:07:36 +00:00
Jared Hocutt f10add47fa Add the NetApp Docker Volume Plugin to the documentation
Signed-off-by: Jared Hocutt <jaredh@netapp.com>
2017-06-02 00:07:36 +00:00
Brian Goff a84e11aaf8 Allow volume drivers to provide a `Status` field
The `Status` field is a `map[string]interface{}` which allows the driver to pass
back low-level details about the underlying volume.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:07:36 +00:00
Yi EungJun cf2670b8ba Fix errata; s/RequestUri/ReqestURI/
Signed-off-by: Yi EungJun <eungjun.yi@navercorp.com>
2017-06-02 00:07:35 +00:00
Yi EungJun 70f932f268 Fix incorrect markdown rendering
The docker document site [1] rendered the list of plugin implements
incorrectly.

[1]: https://docs.docker.com/engine/extend/plugin_api

Signed-off-by: Yi EungJun <eungjun.yi@navercorp.com>
2017-06-02 00:07:35 +00:00
Yi EungJun b394f05fee Use 'null' instead of 'nil' for json
When describe json response, 'null' is better than 'nil' which is not in
json specification.

Signed-off-by: Yi EungJun <eungjun.yi@navercorp.com>
2017-06-02 00:07:35 +00:00
Máximo Cuadros 643715ee74 documentation: adding gce-docker plugin to plugins.md
Signed-off-by: Máximo Cuadros <mcuadros@gmail.com>
2017-06-02 00:07:35 +00:00
Liron Levin 1db38dfe21 Add short description about default authentication method in authorization docs
Following the discussion in #21556, adding a short description of the
default user authentication mechanism (without requiring authentication
plugins)
Signed-off-by: Liron Levin <liron@twistlock.com>
2017-06-02 00:07:35 +00:00
Yong Tang 1f7e8ae84c Update plugin docs for the covering of remote plugins (#20188).
This fix updates the Plugin API docs to cover the case of remote
plugins which could be deployed on a host different from the
docker host, through spec or json files.

This fix closes #20188.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
2017-06-02 00:07:32 +00:00
Antonio Murdaca b20a425cd9 docs: extend: plugins: mention the sdk + systemd socket activation
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
2017-06-02 00:07:31 +00:00
Linus Heckemann acc094305b Remove experimental GraphDriver plugin type
Signed-off-by: Linus Heckemann <anonymouse2048@gmail.com>
2017-06-02 00:07:30 +00:00
Linus Heckemann 54afb61288 Document interfaces a plugin can implement
Signed-off-by: Linus Heckemann <lheckemann@twig-world.com>
2017-06-02 00:07:30 +00:00
Cameron Spear aa86373f28 Add the Local Persist plugin
I wasn't 100% sure if it was appropriate to add plugin here, but @thaJeztah invited me to do so, so here it is!

(see https://github.com/CWSpear/local-persist/issues/17#issuecomment-188523784)

Signed-off-by: Cameron Spear <cameronspear@gmail.com>
2017-06-02 00:07:30 +00:00
Muthukumar R a9dd907004 Add Horcrux volume plugin to plugins.md
Signed-off-by: Muthukumar R <muthur@gmail.com>
2017-06-02 00:07:28 +00:00
Mohammad Banikazemi bb1e32b5e1 Add Kuryr Network Plugin to the docs
Signed-off-by: Mohammad Banikazemi <mb@us.ibm.com>
2017-06-02 00:07:28 +00:00
Vincent Demeester e8ba17c379 Add docker-volume-ipfs plugin to the list.
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-06-02 00:07:27 +00:00
Felix Hupfeld 17cba03948 Added link to Quobyte's volume plugin.
Signed-off-by: Felix Hupfeld <felix@quobyte.com>
2017-06-02 00:07:27 +00:00
Mary Anthony 7910f01804 Creating Engine specific menu
Fixing the links
Updating with Seb's comments
Adding weight
Fixing the engine aliases
Updating after Arun pushed
Removing empty file

Signed-off-by: Mary Anthony <mary@docker.com>
2017-06-02 00:07:26 +00:00
Joe Doliner 07d04dcea6 Remove Pachyderm storage driver.
Signed-off-by: Joe Doliner <jdoliner@gmail.com>
2017-06-02 00:07:24 +00:00
Tibor Vass 7f6a7ed8d1 Rename authz to authorization for greater clarity
Signed-off-by: Tibor Vass <tibor@docker.com>
2017-06-02 00:07:23 +00:00
Brian Goff f06e5cb692 Add docs for volume plugin ls/get
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2017-06-02 00:07:22 +00:00
Clinton Kitson 2ea504510c Updated docs for consolidated list of REX-Ray providers
This commit includes the correct project link and also
includes a consolidated list of drivers that are supported.

Signed-off-by: Clinton Kitson <clintonskitson@gmail.com>
2017-06-02 00:07:22 +00:00