3
3
namespace App \Http \Controllers ;
4
4
5
5
use App \Http \Requests \NodeTask \InitClusterFormRequest ;
6
+ use App \Models \DeploymentData ;
6
7
use App \Models \Network ;
7
8
use App \Models \Node ;
8
9
use App \Models \NodeTaskGroup ;
@@ -26,7 +27,7 @@ public function initCluster(InitClusterFormRequest $request)
26
27
27
28
$ network = Network::create ([
28
29
'swarm_id ' => $ swarm ->id ,
29
- 'name ' => 'ptah-net ' ,
30
+ 'name ' => dockerize_name ( 'ptah-net ' ) ,
30
31
]);
31
32
32
33
$ taskGroup = NodeTaskGroup::create ([
@@ -36,7 +37,7 @@ public function initCluster(InitClusterFormRequest $request)
36
37
'invoker_id ' => auth ()->user ()->id ,
37
38
]);
38
39
39
- $ taskGroup -> tasks ()-> createMany ( [
40
+ $ tasks = [
40
41
[
41
42
'type ' => NodeTaskType::InitSwarm,
42
43
'meta ' => InitSwarmMeta::from ([
@@ -64,7 +65,7 @@ public function initCluster(InitClusterFormRequest $request)
64
65
'type ' => NodeTaskType::CreateNetwork,
65
66
'meta ' => CreateNetworkMeta::from (['networkId ' => $ network ->id , 'name ' => $ network ->name ]),
66
67
'payload ' => [
67
- 'NetworkName ' => $ network ->name ,
68
+ 'NetworkName ' => $ network ->docker_name ,
68
69
'NetworkCreateOptions ' => [
69
70
'Driver ' => 'overlay ' ,
70
71
'Labels ' => dockerize_labels ([
@@ -73,10 +74,68 @@ public function initCluster(InitClusterFormRequest $request)
73
74
],
74
75
],
75
76
],
76
- // TODO: create bare-bones Caddy
77
- // [
78
- // 'type' => NodeTaskType::CreateService,
79
- // ]
77
+ ];
78
+
79
+ $ caddyService = $ swarm ->services ()->create ([
80
+ 'name ' => 'caddy ' ,
81
+ ]);
82
+
83
+ $ deployment = $ caddyService ->deployments ()->create ([
84
+ 'task_group_id ' => $ taskGroup ->id ,
85
+ 'data ' => DeploymentData::from ([
86
+ 'dockerRegistryId ' => null ,
87
+ 'dockerImage ' => 'caddy:2.8-alpine ' ,
88
+ 'envVars ' => [
89
+ [
90
+ 'name ' => 'CADDY_ADMIN ' ,
91
+ 'value ' => '0.0.0.0:2019 ' ,
92
+ ]
93
+ ],
94
+ 'secretVars ' => [],
95
+ 'configFiles ' => [
96
+ [
97
+ 'path ' => '/ptah/caddy/tls/.keep ' ,
98
+ 'content ' => '# Keep this file ' ,
99
+ ]
100
+ ],
101
+ 'secretFiles ' => [],
102
+ 'volumes ' => [
103
+ [
104
+ 'name ' => 'data ' ,
105
+ 'path ' => '/data ' ,
106
+ ],
107
+ [
108
+ 'name ' => 'config ' ,
109
+ 'path ' => '/config ' ,
110
+ ]
111
+ ],
112
+ 'networkName ' => $ network ->docker_name ,
113
+ 'internalDomain ' => 'caddy.ptah.local ' ,
114
+ 'ports ' => [
115
+ [
116
+ 'targetPort ' => '80 ' ,
117
+ 'publishedPort ' => '80 ' ,
118
+ ],
119
+ [
120
+ 'targetPort ' => '443 ' ,
121
+ 'publishedPort ' => '443 ' ,
122
+ ],
123
+ [
124
+ 'targetPort ' => '2019 ' ,
125
+ 'publishedPort ' => '2019 ' ,
126
+ ],
127
+ ],
128
+ 'replicas ' => 1 ,
129
+ 'placementNodeId ' => null ,
130
+ 'caddy ' => [],
131
+ 'fastcgiVars ' => [],
132
+ ]),
80
133
]);
134
+
135
+ foreach ($ deployment ->asNodeTasks () as $ task ) {
136
+ $ tasks [] = $ task ;
137
+ }
138
+
139
+ $ taskGroup ->tasks ()->createMany ($ tasks );
81
140
}
82
141
}
0 commit comments