@@ -96,19 +96,46 @@ describe('Compute', function() {
96
96
var AUTOSCALER_NAME = generateName ( 'autoscaler' ) ;
97
97
var autoscaler = zone . autoscaler ( AUTOSCALER_NAME ) ;
98
98
99
- var INSTANCE_GROUP_NAME = generateName ( 'instance-group' ) ;
100
- var instanceGroup = zone . instanceGroup ( INSTANCE_GROUP_NAME ) ;
99
+ var NETWORK_NAME = generateName ( 'network' ) ;
100
+ var network = compute . network ( NETWORK_NAME ) ;
101
+
102
+ var INSTANCE_TEMPLATE_NAME = generateName ( 'instance-template' ) ;
103
+ var INSTANCE_GROUP_MANAGER_NAME = generateName ( 'instance-group-manager' ) ;
101
104
102
105
before ( function ( done ) {
103
106
async . series ( [
104
- create ( instanceGroup ) ,
107
+ create ( network , {
108
+ range : '10.240.0.0/16'
109
+ } ) ,
110
+
111
+ function ( callback ) {
112
+ createInstanceTemplate (
113
+ INSTANCE_TEMPLATE_NAME ,
114
+ network . formattedName ,
115
+ callback
116
+ ) ;
117
+ } ,
118
+
119
+ function ( callback ) {
120
+ createInstanceGroupManager (
121
+ INSTANCE_GROUP_MANAGER_NAME ,
122
+ [
123
+ 'https://www.googleapis.com/compute/v1/projects' ,
124
+ compute . projectId ,
125
+ 'global/instanceTemplates' ,
126
+ INSTANCE_TEMPLATE_NAME
127
+ ] . join ( '/' ) ,
128
+ callback
129
+ ) ;
130
+ } ,
131
+
105
132
create ( autoscaler , {
106
133
coolDown : 30 ,
107
134
cpu : 80 ,
108
135
loadBalance : 40 ,
109
136
maxReplicas : 5 ,
110
137
minReplicas : 1 ,
111
- target : INSTANCE_GROUP_NAME
138
+ target : INSTANCE_GROUP_MANAGER_NAME
112
139
} )
113
140
] , done ) ;
114
141
} ) ;
@@ -1318,6 +1345,8 @@ describe('Compute', function() {
1318
1345
deleteUrlMaps ,
1319
1346
deleteServices ,
1320
1347
deleteHttpsHealthChecks ,
1348
+ deleteInstanceGroupManagers ,
1349
+ deleteInstanceTemplates ,
1321
1350
deleteTargetInstances ,
1322
1351
deleteAllGcloudTestObjects
1323
1352
] , callback ) ;
@@ -1666,4 +1695,169 @@ describe('Compute', function() {
1666
1695
} ) ;
1667
1696
} ) ;
1668
1697
}
1698
+
1699
+ function getInstanceTemplates ( callback ) {
1700
+ compute . request ( {
1701
+ uri : '/global/instanceTemplates' ,
1702
+ qs : {
1703
+ filter : 'name eq ' + TESTS_PREFIX + '.*'
1704
+ }
1705
+ } , callback ) ;
1706
+ }
1707
+
1708
+ function deleteInstanceTemplates ( callback ) {
1709
+ getInstanceTemplates ( function ( err , resp ) {
1710
+ if ( err ) {
1711
+ callback ( err ) ;
1712
+ return ;
1713
+ }
1714
+
1715
+ if ( ! resp . items ) {
1716
+ callback ( ) ;
1717
+ return ;
1718
+ }
1719
+
1720
+ var names = resp . items . map ( prop ( 'name' ) ) ;
1721
+ async . each ( names , deleteInstanceTemplate , callback ) ;
1722
+ } ) ;
1723
+ }
1724
+
1725
+ function createInstanceTemplate ( name , networkName , callback ) {
1726
+ compute . request ( {
1727
+ method : 'POST' ,
1728
+ uri : '/global/instanceTemplates' ,
1729
+ json : {
1730
+ name : name ,
1731
+ properties : {
1732
+ disks : [
1733
+ {
1734
+ boot : true ,
1735
+ mode : 'READ_ONLY' ,
1736
+ initializeParams : {
1737
+ diskName : generateName ( 'disk' ) ,
1738
+ diskSizeGb : 2 ,
1739
+ diskType : 'pd-standard' ,
1740
+ sourceImage : [
1741
+ 'projects/centos-cloud/global/images/centos-6-v20150710'
1742
+ ] . join ( '' )
1743
+ }
1744
+ }
1745
+ ] ,
1746
+ machineType : 'n1-standard-1' ,
1747
+ networkInterfaces : [
1748
+ {
1749
+ network : networkName ,
1750
+ accessConfigs : [
1751
+ {
1752
+ name : generateName ( 'access_config' ) ,
1753
+ type : 'ONE_TO_ONE_NAT'
1754
+ }
1755
+ ]
1756
+ }
1757
+ ]
1758
+ }
1759
+ }
1760
+ } , function ( err , resp ) {
1761
+ if ( err ) {
1762
+ callback ( err ) ;
1763
+ return ;
1764
+ }
1765
+
1766
+ var operation = compute . operation ( resp . name ) ;
1767
+ operation
1768
+ . on ( 'error' , callback )
1769
+ . on ( 'complete' , function ( ) {
1770
+ callback ( ) ;
1771
+ } ) ;
1772
+ } ) ;
1773
+ }
1774
+
1775
+ function deleteInstanceTemplate ( name , callback ) {
1776
+ compute . request ( {
1777
+ method : 'DELETE' ,
1778
+ uri : '/global/instanceTemplates/' + name
1779
+ } , function ( err , resp ) {
1780
+ if ( err ) {
1781
+ callback ( err ) ;
1782
+ return ;
1783
+ }
1784
+
1785
+ var operation = compute . operation ( resp . name ) ;
1786
+ operation
1787
+ . on ( 'error' , callback )
1788
+ . on ( 'complete' , function ( ) {
1789
+ callback ( ) ;
1790
+ } ) ;
1791
+ } ) ;
1792
+ }
1793
+
1794
+ function getInstanceGroupManagers ( callback ) {
1795
+ zone . request ( {
1796
+ uri : '/instanceGroupManagers' ,
1797
+ qs : {
1798
+ filter : 'name eq ' + TESTS_PREFIX + '.*'
1799
+ }
1800
+ } , callback ) ;
1801
+ }
1802
+
1803
+ function deleteInstanceGroupManagers ( callback ) {
1804
+ getInstanceGroupManagers ( function ( err , resp ) {
1805
+ if ( err ) {
1806
+ callback ( err ) ;
1807
+ return ;
1808
+ }
1809
+
1810
+ if ( ! resp . items ) {
1811
+ callback ( ) ;
1812
+ return ;
1813
+ }
1814
+
1815
+ var names = resp . items . map ( prop ( 'name' ) ) ;
1816
+ async . each ( names , deleteInstanceGroupManager , callback ) ;
1817
+ } ) ;
1818
+ }
1819
+
1820
+ function createInstanceGroupManager ( name , instanceTemplateName , callback ) {
1821
+ zone . request ( {
1822
+ method : 'POST' ,
1823
+ uri : '/instanceGroupManagers' ,
1824
+ json : {
1825
+ baseInstanceName : name . replace ( / \W / g, '' ) ,
1826
+ name : name ,
1827
+ targetSize : 1 ,
1828
+ instanceTemplate : instanceTemplateName
1829
+ }
1830
+ } , function ( err , resp ) {
1831
+ if ( err ) {
1832
+ callback ( err ) ;
1833
+ return ;
1834
+ }
1835
+
1836
+ var operation = zone . operation ( resp . name ) ;
1837
+ operation
1838
+ . on ( 'error' , callback )
1839
+ . on ( 'complete' , function ( ) {
1840
+ callback ( ) ;
1841
+ } ) ;
1842
+ } ) ;
1843
+ }
1844
+
1845
+ function deleteInstanceGroupManager ( name , callback ) {
1846
+ zone . request ( {
1847
+ method : 'DELETE' ,
1848
+ uri : '/instanceGroupManagers/' + name
1849
+ } , function ( err , resp ) {
1850
+ if ( err ) {
1851
+ callback ( err ) ;
1852
+ return ;
1853
+ }
1854
+
1855
+ var operation = zone . operation ( resp . name ) ;
1856
+ operation
1857
+ . on ( 'error' , callback )
1858
+ . on ( 'complete' , function ( ) {
1859
+ callback ( ) ;
1860
+ } ) ;
1861
+ } ) ;
1862
+ }
1669
1863
} ) ;
0 commit comments