kplay 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +143 -17
- data/kplay.gemspec +6 -6
- data/lib/kplay/config.rb +1 -0
- data/lib/kplay/pod.rb +11 -0
- data/lib/kplay/version.rb +1 -1
- metadata +20 -26
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 448f93f598e3390c0357bf92d85f41dbb69bb8a83951c9b78c0e4a2d3227aab2
|
|
4
|
+
data.tar.gz: 16e8791c0594021303f0dd222af720dd59f933d247015d596b970b4d43e78a92
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 02c3b9b9207c935e4fdb38a318cdfb9f9f879c9066952d6201a2af508ce375bbf199219d6a5c64840ef46778a8bb82651b611659852eb64993c331fac3fbd6e2
|
|
7
|
+
data.tar.gz: 221f485fcbff701b9c5bac451faeda8b3bcfdd2dc3b98eaa4c3f2991ddf93170fd7492c545751a63f33fff58209b25e07ba27b505cff3b14b65fb60a0f374cc5
|
data/README.md
CHANGED
|
@@ -1,38 +1,164 @@
|
|
|
1
|
-
#
|
|
1
|
+
# kplay
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Run your project in a container inside a `minikube` k8s cluster.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
## Prerequisites
|
|
7
|
+
|
|
8
|
+
To use `kplay` you need to have the following set up on your machine:
|
|
9
|
+
|
|
10
|
+
* Ruby 2.7+
|
|
11
|
+
* [minikube](https://minikube.sigs.k8s.io/docs/)
|
|
12
|
+
* Docker image(s) with your development environment,
|
|
13
|
+
e.g. [like this one](https://github.com/kukushkin/devenv/tree/master/images/dev)
|
|
6
14
|
|
|
7
15
|
## Installation
|
|
8
16
|
|
|
9
|
-
|
|
17
|
+
Install `kplay` gem for your user only:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
gem i kplay
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or system-wide:
|
|
24
|
+
```bash
|
|
25
|
+
sudo gem i kplay
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## How to use
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
Run `kplay help` to list all available commands:
|
|
32
|
+
```bash
|
|
33
|
+
$ kplay help
|
|
10
34
|
|
|
11
|
-
|
|
12
|
-
|
|
35
|
+
Commands:
|
|
36
|
+
kplay config # Displays local configuration
|
|
37
|
+
kplay help [COMMAND] # Describe available commands or one specific command
|
|
38
|
+
kplay info # Displays environment info
|
|
39
|
+
kplay open # Opens a shell session into the container
|
|
40
|
+
kplay play # (default) Starts the container and opens a shell session into it
|
|
41
|
+
kplay pod_config # Displays the pod config
|
|
42
|
+
kplay start # Starts a container (pod) with the local folder mounted inside
|
|
43
|
+
kplay status # Displays the cluster and container (pod) status
|
|
44
|
+
kplay stop # Stops the container (pod) associated with the local folder
|
|
45
|
+
|
|
46
|
+
Options:
|
|
47
|
+
v, [--verbose], [--no-verbose]
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### `kplay play` or `kplay` (with no arguments)
|
|
52
|
+
|
|
53
|
+
Starts a development container, mounts your project in it
|
|
54
|
+
and opens a shell into it.
|
|
55
|
+
|
|
56
|
+
Change to your projects directory on your machine and run `kplay` with no arguments:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
username:~ $ cd projects/hello
|
|
60
|
+
username:hello $ kplay
|
|
61
|
+
pod/hello configured
|
|
62
|
+
hello:/hello $
|
|
13
63
|
```
|
|
14
64
|
|
|
15
|
-
|
|
65
|
+
This runs a container using `dev` as the default name of the development
|
|
66
|
+
Docker image. You can pass an argument to use a different Docker image:
|
|
16
67
|
|
|
17
|
-
|
|
68
|
+
```bash
|
|
69
|
+
kplay -i my-dev-image
|
|
70
|
+
```
|
|
18
71
|
|
|
19
|
-
|
|
72
|
+
When you exit the shell, the container is automatically stopped.
|
|
20
73
|
|
|
21
|
-
|
|
74
|
+
### `kplay start` and `kplay open`
|
|
22
75
|
|
|
23
|
-
|
|
76
|
+
The default behaviour (`kplay play`) opens a shell for you, but after your exit it the container is automatically stopped. This can be a limitation: you may want to keep the container running or you may need to open more than one shell into that container.
|
|
24
77
|
|
|
25
|
-
|
|
78
|
+
In this case you can separately start the container in a "detached" mode:
|
|
26
79
|
|
|
27
|
-
|
|
80
|
+
```bash
|
|
81
|
+
username:~ $ cd projects/hello
|
|
82
|
+
username:hello $ kplay start
|
|
83
|
+
pod/hello configured
|
|
84
|
+
username:hello $
|
|
85
|
+
```
|
|
28
86
|
|
|
29
|
-
|
|
87
|
+
The container should be running now, which you can verify by listing the k8s pods:
|
|
30
88
|
|
|
31
|
-
|
|
89
|
+
```bash
|
|
90
|
+
username:hello $ kubectl get pods
|
|
91
|
+
NAME READY STATUS RESTARTS AGE
|
|
92
|
+
hello 1/1 Running 0 9s
|
|
93
|
+
```
|
|
32
94
|
|
|
33
|
-
|
|
95
|
+
Now to open a shell into it, run `kplay open` from the project folder:
|
|
34
96
|
|
|
35
|
-
|
|
97
|
+
```bash
|
|
98
|
+
username:hello $ kplay open
|
|
99
|
+
hello:hello $
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
This way you can open several sessions into the same container!
|
|
103
|
+
Simply run `kplay open` from the project folder in a different terminal
|
|
104
|
+
window or tab.
|
|
105
|
+
|
|
106
|
+
When you exit the shell in the container, it will still keep running.
|
|
107
|
+
If you are done with it, you will need to stop the container explicitly
|
|
108
|
+
by running `kplay stop` from your project folder:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
username:hello $ kplay stop
|
|
112
|
+
pod "hello" deleted
|
|
113
|
+
username:hello $
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Configuration
|
|
117
|
+
|
|
118
|
+
You can pass some parameters as arguments to `kplay` commands, but much
|
|
119
|
+
more convenient is to configure the global or project specific defaults.
|
|
120
|
+
|
|
121
|
+
`kplay` looks for the configuration files in:
|
|
122
|
+
* `~/.kplay/config` for global defaults
|
|
123
|
+
* `.kplay` in the local (current) folder for project-specific defaults
|
|
124
|
+
|
|
125
|
+
Settings in the `.kplay` in the local folder supercede the settings
|
|
126
|
+
found the global config file.
|
|
127
|
+
|
|
128
|
+
Each `kplay` configuration file is a YAML document with the following
|
|
129
|
+
structure:
|
|
130
|
+
|
|
131
|
+
```yaml=
|
|
132
|
+
|
|
133
|
+
# Name of the Docker image to use for the development container
|
|
134
|
+
image: ruby-dev
|
|
135
|
+
|
|
136
|
+
# Path inside the container where the project folder is going to be mounted
|
|
137
|
+
mount_path: "/${name}"
|
|
138
|
+
|
|
139
|
+
# Size of the shared memory volume (/dev/shm) inside the container
|
|
140
|
+
shm_size: 64Mi
|
|
141
|
+
|
|
142
|
+
# Command and its args to run inside the container
|
|
143
|
+
# when opening a shell into it
|
|
144
|
+
shell: "/bin/bash"
|
|
145
|
+
shell_args:
|
|
146
|
+
- "-c"
|
|
147
|
+
- cd /${name}; exec "${SHELL:-sh}"
|
|
148
|
+
|
|
149
|
+
# Grace period (seconds) to respect when stopping containers
|
|
150
|
+
stop_grace_period: 15
|
|
151
|
+
|
|
152
|
+
# Custom entries to add to the /etc/hosts file inside the container
|
|
153
|
+
etc_hosts:
|
|
154
|
+
- "1.1.1.1 test-host-alpha"
|
|
155
|
+
- "2.2.2.2 test-host-beta"
|
|
156
|
+
|
|
157
|
+
# Additional volumes/files to be mounted inside the container
|
|
158
|
+
volumes:
|
|
159
|
+
- "~/.ssh/id_rsa:/root/.ssh/id_rsa"
|
|
160
|
+
- "~/.gitconfig:/root/.gitconfig"
|
|
161
|
+
```
|
|
36
162
|
|
|
37
163
|
|
|
38
164
|
## License
|
data/kplay.gemspec
CHANGED
|
@@ -30,11 +30,11 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
31
31
|
spec.require_paths = ['lib']
|
|
32
32
|
|
|
33
|
-
spec.add_dependency 'thor', '~>
|
|
34
|
-
spec.add_dependency 'rainbow', '~> 3.
|
|
33
|
+
spec.add_dependency 'thor' , '~> 1.2'
|
|
34
|
+
spec.add_dependency 'rainbow' , '~> 3.1'
|
|
35
35
|
|
|
36
|
-
spec.add_development_dependency 'bundler', '~>
|
|
37
|
-
spec.add_development_dependency 'rake', '~>
|
|
38
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
|
39
|
-
spec.add_development_dependency 'pry', '~> 0.11'
|
|
36
|
+
spec.add_development_dependency 'bundler', '~> 2.4'
|
|
37
|
+
spec.add_development_dependency 'rake' , '~> 13.0'
|
|
38
|
+
spec.add_development_dependency 'rspec', '~> 3.12'
|
|
39
|
+
spec.add_development_dependency 'pry' # , '~> 0.11'
|
|
40
40
|
end
|
data/lib/kplay/config.rb
CHANGED
data/lib/kplay/pod.rb
CHANGED
|
@@ -7,6 +7,9 @@ module Kplay
|
|
|
7
7
|
# Pod represents a pod associated with a folder on a host machine
|
|
8
8
|
#
|
|
9
9
|
class Pod
|
|
10
|
+
DEFAULT_SHM_VOLUME_NAME = "pod-shm-volume"
|
|
11
|
+
DEFAULT_SHM_VOLUME_PATH = "/dev/shm"
|
|
12
|
+
|
|
10
13
|
attr_reader :name, :config, :volume_name, :path_host, :path_vm, :mount_path, :options
|
|
11
14
|
|
|
12
15
|
# Creates a Pod from a path on host
|
|
@@ -54,6 +57,7 @@ module Kplay
|
|
|
54
57
|
],
|
|
55
58
|
'volumeMounts' => [
|
|
56
59
|
{ 'mountPath' => config[:mount_path], 'name' => volume_name },
|
|
60
|
+
{ 'mountPath' => DEFAULT_SHM_VOLUME_PATH, 'name' => DEFAULT_SHM_VOLUME_NAME },
|
|
57
61
|
# <-- ssh forwarding socket should be mounted a CONTAINER here
|
|
58
62
|
]
|
|
59
63
|
}
|
|
@@ -62,6 +66,13 @@ module Kplay
|
|
|
62
66
|
{
|
|
63
67
|
'name' => volume_name,
|
|
64
68
|
'hostPath' => { 'path' => path_vm.to_s }
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
'name' => DEFAULT_SHM_VOLUME_NAME,
|
|
72
|
+
'emptyDir' => {
|
|
73
|
+
'medium' => 'Memory',
|
|
74
|
+
'sizeLimit' => config[:shm_size]
|
|
75
|
+
}
|
|
65
76
|
}
|
|
66
77
|
# <-- ssh forwarding socket in VM mounted here
|
|
67
78
|
]
|
data/lib/kplay/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kplay
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alex Kukushkin
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-10-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -16,90 +16,84 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '1.2'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '1.2'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rainbow
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '3.
|
|
33
|
+
version: '3.1'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '3.
|
|
40
|
+
version: '3.1'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '2.4'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '2.4'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rake
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
62
|
-
- - ">="
|
|
63
|
-
- !ruby/object:Gem::Version
|
|
64
|
-
version: 12.3.3
|
|
61
|
+
version: '13.0'
|
|
65
62
|
type: :development
|
|
66
63
|
prerelease: false
|
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
68
65
|
requirements:
|
|
69
66
|
- - "~>"
|
|
70
67
|
- !ruby/object:Gem::Version
|
|
71
|
-
version: '
|
|
72
|
-
- - ">="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: 12.3.3
|
|
68
|
+
version: '13.0'
|
|
75
69
|
- !ruby/object:Gem::Dependency
|
|
76
70
|
name: rspec
|
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
|
78
72
|
requirements:
|
|
79
73
|
- - "~>"
|
|
80
74
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '3.
|
|
75
|
+
version: '3.12'
|
|
82
76
|
type: :development
|
|
83
77
|
prerelease: false
|
|
84
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
85
79
|
requirements:
|
|
86
80
|
- - "~>"
|
|
87
81
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: '3.
|
|
82
|
+
version: '3.12'
|
|
89
83
|
- !ruby/object:Gem::Dependency
|
|
90
84
|
name: pry
|
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
|
92
86
|
requirements:
|
|
93
|
-
- - "
|
|
87
|
+
- - ">="
|
|
94
88
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0
|
|
89
|
+
version: '0'
|
|
96
90
|
type: :development
|
|
97
91
|
prerelease: false
|
|
98
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
99
93
|
requirements:
|
|
100
|
-
- - "
|
|
94
|
+
- - ">="
|
|
101
95
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0
|
|
96
|
+
version: '0'
|
|
103
97
|
description: A tool to start a container in minikube and mount your project folder
|
|
104
98
|
into it
|
|
105
99
|
email:
|
|
@@ -135,7 +129,7 @@ licenses:
|
|
|
135
129
|
- MIT
|
|
136
130
|
metadata:
|
|
137
131
|
allowed_push_host: https://rubygems.org
|
|
138
|
-
post_install_message:
|
|
132
|
+
post_install_message:
|
|
139
133
|
rdoc_options: []
|
|
140
134
|
require_paths:
|
|
141
135
|
- lib
|
|
@@ -150,8 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
150
144
|
- !ruby/object:Gem::Version
|
|
151
145
|
version: '0'
|
|
152
146
|
requirements: []
|
|
153
|
-
rubygems_version: 3.
|
|
154
|
-
signing_key:
|
|
147
|
+
rubygems_version: 3.4.10
|
|
148
|
+
signing_key:
|
|
155
149
|
specification_version: 4
|
|
156
150
|
summary: Starts your project within a container in minikube
|
|
157
151
|
test_files: []
|