2020from ..cli import cfy , helptexts
2121from ..constants import DEFAULT_INSTALL_WORKFLOW
2222from ..blueprint import get_blueprint_path_and_id
23+ from ..exceptions import CloudifyCliError
2324from . import init , executions , blueprints , deployments
2425
2526
3031@cfy .options .blueprint_filename ()
3132@cfy .options .validate
3233@cfy .options .deployment_id (validate = True )
34+ @cfy .options .deployment_group_id
35+ @cfy .options .group_count
3336@cfy .options .inputs
3437@cfy .options .workflow_id ('install' )
3538@cfy .options .force (help = helptexts .FORCE_CONCURRENT_EXECUTION )
@@ -52,6 +55,8 @@ def manager(ctx,
5255 blueprint_filename ,
5356 validate ,
5457 deployment_id ,
58+ deployment_group_id ,
59+ count ,
5560 inputs ,
5661 workflow_id ,
5762 force ,
@@ -81,7 +86,21 @@ def manager(ctx,
8186 blueprint_filename ,
8287 blueprint_id
8388 )
84- deployment_id = deployment_id or blueprint_id
89+ if count is not None :
90+ if int (count ) > 0 :
91+ deployment_group_id = deployment_group_id or blueprint_id
92+ else :
93+ raise CloudifyCliError ('Count must be a positive number.' )
94+ else :
95+ deployment_id = deployment_id or blueprint_id
96+
97+ if (deployment_group_id is None ) != (count is None ):
98+ raise CloudifyCliError ('Both parameters must be provided: '
99+ 'deployment_group_id and count.' )
100+ if (deployment_group_id is None ) == (deployment_id is None ):
101+ raise CloudifyCliError ('One of the parameters must be provided: '
102+ 'deployment_group_id and deployment_id.' )
103+
85104 workflow_id = workflow_id or DEFAULT_INSTALL_WORKFLOW
86105
87106 try :
@@ -102,28 +121,50 @@ def manager(ctx,
102121 if processed_blueprint_path != blueprint_path :
103122 shutil .rmtree (os .path .dirname (os .path .dirname (
104123 processed_blueprint_path )))
105- ctx .invoke (
106- deployments .manager_create ,
107- blueprint_id = blueprint_id ,
108- deployment_id = deployment_id ,
109- inputs = inputs ,
110- visibility = visibility ,
111- tenant_name = tenant_name ,
112- skip_plugins_validation = skip_plugins_validation ,
113- labels = deployment_labels
114- )
115- ctx .invoke (
116- executions .manager_start ,
117- workflow_id = workflow_id ,
118- deployment_id = deployment_id ,
119- timeout = timeout ,
120- force = force ,
121- allow_custom_parameters = allow_custom_parameters ,
122- include_logs = include_logs ,
123- parameters = parameters ,
124- json_output = json_output ,
125- tenant_name = tenant_name
126- )
124+ if deployment_id :
125+ ctx .invoke (
126+ deployments .manager_create ,
127+ blueprint_id = blueprint_id ,
128+ deployment_id = deployment_id ,
129+ inputs = inputs ,
130+ visibility = visibility ,
131+ tenant_name = tenant_name ,
132+ skip_plugins_validation = skip_plugins_validation ,
133+ labels = deployment_labels
134+ )
135+ ctx .invoke (
136+ executions .manager_start ,
137+ workflow_id = workflow_id ,
138+ deployment_id = deployment_id ,
139+ timeout = timeout ,
140+ force = force ,
141+ allow_custom_parameters = allow_custom_parameters ,
142+ include_logs = include_logs ,
143+ parameters = parameters ,
144+ json_output = json_output ,
145+ tenant_name = tenant_name
146+ )
147+ else :
148+ ctx .invoke (
149+ deployments .groups_create ,
150+ deployment_group_name = deployment_group_id ,
151+ inputs = inputs ,
152+ default_blueprint = blueprint_id ,
153+ )
154+ ctx .invoke (
155+ deployments .groups_extend ,
156+ deployment_group_name = deployment_group_id ,
157+ count = count ,
158+ )
159+ ctx .invoke (
160+ executions .execution_groups_start ,
161+ deployment_group = deployment_group_id ,
162+ workflow_id = workflow_id ,
163+ parameters = parameters ,
164+ json_output = json_output ,
165+ force = force ,
166+ timeout = timeout
167+ )
127168
128169
129170@cfy .command (name = 'install' ,
0 commit comments