@@ -96,19 +96,46 @@ describe('Compute', function() {
9696 var AUTOSCALER_NAME = generateName ( 'autoscaler' ) ;
9797 var autoscaler = zone . autoscaler ( AUTOSCALER_NAME ) ;
9898
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' ) ;
101104
102105 before ( function ( done ) {
103106 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+
105132 create ( autoscaler , {
106133 coolDown : 30 ,
107134 cpu : 80 ,
108135 loadBalance : 40 ,
109136 maxReplicas : 5 ,
110137 minReplicas : 1 ,
111- target : INSTANCE_GROUP_NAME
138+ target : INSTANCE_GROUP_MANAGER_NAME
112139 } )
113140 ] , done ) ;
114141 } ) ;
@@ -1318,6 +1345,8 @@ describe('Compute', function() {
13181345 deleteUrlMaps ,
13191346 deleteServices ,
13201347 deleteHttpsHealthChecks ,
1348+ deleteInstanceGroupManagers ,
1349+ deleteInstanceTemplates ,
13211350 deleteTargetInstances ,
13221351 deleteAllGcloudTestObjects
13231352 ] , callback ) ;
@@ -1666,4 +1695,169 @@ describe('Compute', function() {
16661695 } ) ;
16671696 } ) ;
16681697 }
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+ }
16691863} ) ;
0 commit comments