Skip to content

Commit b3ce7dd

Browse files
authored
Merge pull request #49 from renoki-co/feature/secret-volume
[feature] Mount secrets for Volumes
2 parents 8fd304c + 26f0b90 commit b3ce7dd

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

docs/instances/Volumes.md

+16
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,22 @@ $container->addMountedVolumes([$volume->mountTo('/some-path/file.txt', 'some-key
2828
$pod->addVolumes([$volume]);
2929
```
3030

31+
## Secret
32+
33+
```php
34+
$secret = K8s::secret()
35+
->setName('some-secret')
36+
->setData([
37+
'some-key' => 'value-for-file',
38+
]);
39+
40+
$volume = K8s::volume()->fromSecret($secret);
41+
42+
$container->addMountedVolumes([$volume->mountTo('/some-path/file.txt', 'some-key')]);
43+
44+
$pod->addVolumes([$volume]);
45+
```
46+
3147
## GCE Persistent Disk
3248

3349
```php

src/Instances/Volume.php

+13
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace RenokiCo\PhpK8s\Instances;
44

55
use RenokiCo\PhpK8s\Kinds\K8sConfigMap;
6+
use RenokiCo\PhpK8s\Kinds\K8sSecret;
67
use stdClass;
78

89
class Volume extends Instance
@@ -31,6 +32,18 @@ public function fromConfigMap(K8sConfigMap $configmap)
3132
->setAttribute('configMap', ['name' => $configmap->getName()]);
3233
}
3334

35+
/**
36+
* Attach a volume from a secret file.
37+
*
38+
* @param \RenokiCo\PhpK8s\Kinds\K8sSecret $secret
39+
* @return $this
40+
*/
41+
public function fromSecret(K8sSecret $secret)
42+
{
43+
return $this->setAttribute('name', "{$secret->getName()}-secret-volume")
44+
->setAttribute('secret', ['secretName' => $secret->getName()]);
45+
}
46+
3447
/**
3548
* Create a GCE Persistent Disk instance.
3649
*

tests/VolumeTest.php

+38
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,44 @@ public function test_volume_config_map()
7777
$this->assertEquals($mysql->getMountedVolumes()[0]->toArray(), $mountedVolume->toArray());
7878
}
7979

80+
public function test_volume_secret()
81+
{
82+
$secret = K8s::secret()
83+
->setName('some-secret')
84+
->setData([
85+
'some-key' => 'some-content',
86+
'some-key2' => 'some-content-again',
87+
]);
88+
89+
$volume = K8s::volume()->fromSecret($secret);
90+
91+
$mountedVolume = $volume->mountTo('/some-path', 'some-key');
92+
93+
$mysql = K8s::container()
94+
->setName('mysql')
95+
->setImage('mysql', '5.7')
96+
->addMountedVolumes([$mountedVolume]);
97+
98+
$pod = K8s::pod()
99+
->setName('mysql')
100+
->setContainers([$mysql])
101+
->addVolumes([$volume]);
102+
103+
$this->assertEquals([
104+
'name' => 'some-secret-secret-volume',
105+
'secret' => ['secretName' => $secret->getName()],
106+
], $volume->toArray());
107+
108+
$this->assertEquals([
109+
'name' => 'some-secret-secret-volume',
110+
'mountPath' => '/some-path',
111+
'subPath' => 'some-key',
112+
], $mountedVolume->toArray());
113+
114+
$this->assertEquals($pod->getVolumes()[0]->toArray(), $volume->toArray());
115+
$this->assertEquals($mysql->getMountedVolumes()[0]->toArray(), $mountedVolume->toArray());
116+
}
117+
80118
public function test_volume_gce_pd()
81119
{
82120
$volume = K8s::volume()->gcePersistentDisk('some-disk', 'ext3');

0 commit comments

Comments
 (0)