I had an interesting situation where Rescue Mode at Rackspace still gave me an unresponsive image. Talking with support, they stated the rescue image was based on the current image, and that might be the cause and to use a Debian image via their API to do this.
They do have a helper service/site where you can plug values in and Send API Call
https://pitchfork.rax.io/servers/
They have a API Call – “Rescue Server With Specified Image”
/v2/{ddi}/servers/{server_id}/action
You will need to supply the server_id and the rescue_image_uuid
The Debian image is: a10eacf7-ac15-4225-b533-5744f1fe47c1
Sending the API call will send the server to rescue mode and load this image. For simple file edits (in my case I needed to update iptables rule, conf.d/net and mysql/my.cnf to the new image IP for proper booting), you can just mount the filesystem and make the edits.
mount /dev/xvdb1 /mnt
cd /mnt/etc/conf.d
The helper site is a simple form to push those API calls out, but these can be manually done with cURL, etc. I’m going to break down the request, request headers and responses. Obvious values retracted.
Request URL – account number and server_id removed below
https://ord.servers.api.rackspacecloud.com/v2/xxxxxx/servers/xxxxxx/action
Request Headers – here is how to get auth-token:
https://docs.rackspace.com/docs/cloud-identity/v2/getting-started/authenticate
{ "Content-Type": "application/json", "X-Auth-Token": "AAA_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
Request Data Object – This is the Debian image value. Not sure how to get specific image ids
{ "rescue": { "rescue_image_ref": "a10eacf7-ac15-4225-b533-5744f1fe47c1" } }
Response Header
{ "Content-Length": "41", "Via": "1.1 Repose (Repose/7.1.5.1)", "X-Compute-Request-Id": "req-xxxxxxxxxxxxxxxxxxxxxxx", "Server": "Jetty(9.2.z-SNAPSHOT)", "x-trans-id": "xxxxxxxxxxxxxxxxxxxxxx", "Date": "Tue, 20 Jul 2021 05:29:13 GMT, Tue, 20 Jul 2021 05:29:14 GMT", "Content-Type": "application/json" }
Response Body – this is the root login for the rescue image
{ "adminPass": "xxxxxxxxxxxxxxxxx" }