@@ -93,6 +93,12 @@ func resourceComputeInstance() *schema.Resource {
9393 ForceNew : true ,
9494 },
9595
96+ "admin_pass" : & schema.Schema {
97+ Type : schema .TypeString ,
98+ Optional : true ,
99+ ForceNew : false ,
100+ },
101+
96102 "access_ip_v4" : & schema.Schema {
97103 Type : schema .TypeString ,
98104 Computed : true ,
@@ -108,7 +114,7 @@ func resourceComputeInstance() *schema.Resource {
108114 },
109115
110116 "key_pair" : & schema.Schema {
111- Type : schema .TypeMap ,
117+ Type : schema .TypeString ,
112118 Optional : true ,
113119 ForceNew : true ,
114120 },
@@ -131,14 +137,13 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err
131137 Networks : resourceInstanceNetworks (d ),
132138 Metadata : resourceInstanceMetadata (d ),
133139 ConfigDrive : d .Get ("config_drive" ).(bool ),
140+ AdminPass : d .Get ("admin_pass" ).(string ),
134141 }
135142
136- if kp , ok := d .Get ("key_pair" ).(map [string ]interface {}); ok && kp != nil {
137- if keyName , ok := kp ["name" ].(string ); ok && keyName != "" {
138- createOpts = & keypairs.CreateOptsExt {
139- serverCreateOpts ,
140- keyName ,
141- }
143+ if keyName , ok := d .Get ("key_pair" ).(string ); ok && keyName != "" {
144+ createOpts = & keypairs.CreateOptsExt {
145+ serverCreateOpts ,
146+ keyName ,
142147 }
143148 }
144149
@@ -308,6 +313,15 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
308313 }
309314 }
310315
316+ if d .HasChange ("admin_pass" ) {
317+ if newPwd , ok := d .Get ("admin_pass" ).(string ); ok {
318+ err := servers .ChangeAdminPassword (osClient , d .Id (), newPwd ).ExtractErr ()
319+ if err != nil {
320+ return fmt .Errorf ("Error changing admin password of OpenStack server (%s): %s" , d .Id (), err )
321+ }
322+ }
323+ }
324+
311325 if d .HasChange ("flavor_ref" ) {
312326 resizeOpts := & servers.ResizeOpts {
313327 FlavorRef : d .Get ("flavor_ref" ).(string ),
0 commit comments