@@ -8,13 +8,14 @@ import (
88
99 "github.com/coreos/fleet/client"
1010 "github.com/coreos/fleet/job"
11+ "github.com/coreos/fleet/unit"
1112)
1213
1314// Client interface used to interact with the cluster control plane
1415type Client interface {
15- Create (string ) error
16+ Create (string , bool ) error
1617 Destroy (string ) error
17- Start (string ) error
18+ Start (string , bool ) error
1819 Stop (string ) error
1920 Scale (string , int ) error
2021 List () error
@@ -38,20 +39,22 @@ func NewClient() (*FleetClient, error) {
3839
3940// Create schedules a new unit for the given component
4041// and blocks until the unit is loaded
41- func (c * FleetClient ) Create (component string ) (err error ) {
42- num , err := c .nextUnit (component )
43- if err != nil {
44- return
42+ func (c * FleetClient ) Create (component string , data bool ) (err error ) {
43+ var (
44+ unitName string
45+ unitPtr * unit.Unit
46+ )
47+ // create unit
48+ if data == true {
49+ unitName , unitPtr , err = c .createDataUnit (component )
50+ } else {
51+ unitName , unitPtr , err = c .createServiceUnit (component )
4552 }
46- unitName , err := formatUnitName (component , num )
4753 if err != nil {
48- return
49- }
50- unit , err := NewUnit (component )
51- if err != nil {
52- return
54+ return err
5355 }
54- j := job .NewJob (unitName , * unit )
56+ // schedule job
57+ j := job .NewJob (unitName , * unitPtr )
5558 if err := c .Fleet .CreateJob (j ); err != nil {
5659 return fmt .Errorf ("failed creating job %s: %v" , unitName , err )
5760 }
@@ -67,6 +70,39 @@ func (c *FleetClient) Create(component string) (err error) {
6770 return nil
6871}
6972
73+ // Create normal service unit
74+ func (c * FleetClient ) createServiceUnit (component string ) (unitName string , unitPtr * unit.Unit , err error ) {
75+ num , err := c .nextUnit (component )
76+ if err != nil {
77+ return
78+ }
79+ unitName , err = formatUnitName (component , num )
80+ if err != nil {
81+ return
82+ }
83+ unitPtr , err = NewUnit (component )
84+ if err != nil {
85+ return
86+ }
87+ return unitName , unitPtr , nil
88+ }
89+
90+ // Create data container unit
91+ func (c * FleetClient ) createDataUnit (component string ) (unitName string , unitPtr * unit.Unit , err error ) {
92+ unitName , err = formatUnitName (component , 0 )
93+ if err != nil {
94+ return
95+ }
96+ randomMachineID (c )
97+ unitPtr , err = NewUnit (component )
98+ if err != nil {
99+ return
100+ }
101+ return unitName , unitPtr , nil
102+
103+ }
104+
105+
70106// Destroy unschedules one unit for a given component type
71107func (c * FleetClient ) Destroy (component string ) (err error ) {
72108 num , err := c .lastUnit (component )
@@ -102,19 +138,25 @@ func (c *FleetClient) Scale(component string, num int) (err error) {
102138 break
103139 }
104140 if len (components ) < num {
105- c .Create (component )
141+ err := c .Create (component , false )
142+ if err != nil {
143+ return err
144+ }
106145 continue
107146 }
108147 if len (components ) > num {
109- c .Destroy (component )
148+ err := c .Destroy (component )
149+ if err != nil {
150+ return err
151+ }
110152 continue
111153 }
112154 }
113155 return
114156}
115157
116158// Start launches target units and blocks until active
117- func (c * FleetClient ) Start (target string ) (err error ) {
159+ func (c * FleetClient ) Start (target string , data bool ) (err error ) {
118160 units , err := c .getUnits (target )
119161 if err != nil {
120162 return
@@ -126,9 +168,11 @@ func (c *FleetClient) Start(target string) (err error) {
126168 return err
127169 }
128170 }
129- errchan := waitForJobStates (c .Fleet , units , testUnitStateActive , 0 , os .Stdout )
130- for err := range errchan {
131- return fmt .Errorf ("error waiting for active: %v" , err )
171+ if data == false {
172+ errchan := waitForJobStates (c .Fleet , units , testUnitStateActive , 0 , os .Stdout )
173+ for err := range errchan {
174+ return fmt .Errorf ("error waiting for active: %v" , err )
175+ }
132176 }
133177 return nil
134178}
0 commit comments