1
+ <?php
2
+
3
+ namespace OvhCli \Command \Service ;
4
+
5
+ use GetOpt \GetOpt ;
6
+ use GetOpt \Operand ;
7
+ use GetOpt \Option ;
8
+ use OvhCli \Cli ;
9
+
10
+ class Engagement extends \OvhCli \Command
11
+ {
12
+ public $ shortDescription = 'Manages dedicated servers billing engagement ' ;
13
+
14
+ public function __construct ()
15
+ {
16
+ parent ::__construct ($ this ->getName (), [$ this , 'handle ' ]);
17
+
18
+ $ this ->addOperands ([
19
+ Operand::create ('server ' , Operand::MULTIPLE )
20
+ ->setDescription ('Server name ' ),
21
+ ]);
22
+
23
+ $ this ->addOptions ([
24
+ Option::create ('a ' , 'all ' , GetOpt::NO_ARGUMENT )
25
+ ->setDescription ('Run against all servers ' ),
26
+ Option::create (null , 'on ' , GetOpt::NO_ARGUMENT )
27
+ ->setDescription ('Enable service billing engagement ' ),
28
+ Option::create (null , 'off ' , GetOpt::NO_ARGUMENT )
29
+ ->setDescription ('Disable service billing engagement ' ),
30
+ Option::create (null , 'enabled-only ' , GetOpt::NO_ARGUMENT )
31
+ ->setDescription ('Shows enabled services only ' ),
32
+ ]);
33
+ }
34
+
35
+ public function handle (GetOpt $ getopt )
36
+ {
37
+ $ servers = $ getopt ->getOption ('all ' ) ?
38
+ $ this ->ovh ()->getServers () :
39
+ $ getopt ->getOperand ('server ' );
40
+
41
+ $ on = (bool ) $ getopt ->getOption ('on ' );
42
+ $ off = (bool ) $ getopt ->getOption ('off ' );
43
+ $ show_enabled_only = (bool ) $ getopt ->getOption ('enabled-only ' );
44
+
45
+ if ($ on && $ off ) {
46
+ return $ this ->missingArgument ($ getopt , 'ERROR: --on and --off options should be enabled exclusively ' );
47
+ }
48
+
49
+ if (empty ($ servers )) {
50
+ echo $ getopt ->getHelpText ();
51
+ exit ();
52
+ }
53
+
54
+ $ data = [];
55
+ foreach ($ servers as $ server ) {
56
+ $ server = $ this ->resolve ($ server );
57
+ $ details = $ this ->ovh ()->getServerDetails ($ server );
58
+ $ service = $ this ->ovh ()->getServerServiceInfo ($ server );
59
+ $ service_id = $ service ['serviceId ' ];
60
+ try {
61
+ $ commitment = $ this ->ovh ()->getServiceBillingEngagement ($ service_id );
62
+ $ strategy = $ commitment ['endRule ' ]['strategy ' ];
63
+ $ engagement_enabled = ($ strategy == 'REACTIVATE_ENGAGEMENT ' );
64
+ } catch (\Exception $ e ) {
65
+ // Server doesn't support billing engagement
66
+ continue ;
67
+ }
68
+
69
+ if ($ engagement_enabled && $ off ) {
70
+ Cli::out ('Disabling server engagement on %s ... ' , $ details ['reverse ' ]);
71
+ $ this ->ovh ()->setServiceBillingEngagement ($ service_id , false );
72
+ } elseif (!$ engagement_enabled && $ on ) {
73
+ Cli::out ('Enabling server engagement on %s ... ' , $ details ['reverse ' ]);
74
+ $ this ->ovh ()->setServiceBillingEngagement ($ service_id , true );
75
+ } elseif (!$ on && !$ off ) {
76
+ if (!$ engagement_enabled && $ show_enabled_only ) {
77
+ continue ;
78
+ }
79
+ $ data [$ server ] = [
80
+ 'reverse ' => $ details ['reverse ' ],
81
+ 'enabled ' => $ engagement_enabled ,
82
+ 'period ' => $ commitment ['currentPeriod ' ],
83
+ ];
84
+ }
85
+ }
86
+
87
+ if (!empty ($ data )) {
88
+ Cli::format ($ data );
89
+ }
90
+ }
91
+ }
0 commit comments