Search code examples
node.jsrestexpressibm-cloud-infrastructure

softlayer-client: unable to update VPN for User_Customer via REST API


I am experimenting with the softlayer-client api wrapper in my Node Express application. My goal is to update the VPN password of a User_Customer by calling the updateVpnPassword method on a specific user.

I can construct a call to achieve a VPN password update using request, but I'm not sure it's the best way to achieve the desired result.

Can the softlayer-client module be used to make an similar call to this:

function updateVpnPassword(req, res, next) {

    // Construct URL to update VPN
    myURL = 'https://' + <userIDAdmin> + ':' + <apiKeyAdmin> + '@api.softlayer.com/rest/v3/SoftLayer_User_Customer/' + <softLayerID> + '/updateVpnPassword/' + <newPassword> + '.json';

    request.get({url: myURL}, function (error, response, body) {
        console.log('error:', error); 
        console.log('statusCode:', response && response.statusCode);
        console.log('body:', body); 
    });

    next();
}

My initial attempts have been to try variations on this:

function updateVpnPassword(req, res, next) {

    // Assuming var client = new SoftLayer();
    client
        .auth(<userIDAdmin>, <apiKeyAdmin>)
        .path('User_Customer', <softLayerID>,'updateVpnPassword')
        .parameters(<newPassword>)
        .put(function(err,result){

         console.log(result);
            if (err) {
                next(err); // Pass errors to Express.
            }
            else {  
                // update successful
            }
        });
    next();
}

But the console log gives an error response like { message: { error: 'Internal Error', code: 'SoftLayer_Exception_Public' } }.

I expect a TRUE or FALSE response, to indicate the whether the update is successful.

A similar python client can be found here but I require an implementation in JS.


Solution

  • I'm not familiar with nodejs but I installed the package softlayer-node and run your second code and it worked.

    I also created the following script and I got TRUE

    var username = 'set me';
    var apikey = 'set me';
    var userId = 1111111;
    
    var SoftLayer = require('softlayer-node');
    var client = new SoftLayer();
    
    client
      .auth(username, apikey)
      .path('User_Custome', userId, 'updateVpnPassword')
      .parameters('P@ssword123')
      .put()
      .then(function(result) {
        console.log(result);
      }, function(error) {
        console.log(error);
      });
    

    node command:

    $ node updateVpnPassword.js
    true
    

    Did you tried by sending that request using curl or any other REST client like postman?

    If you get the same error then I recommend you submit a ticket and provide information like the id of users you are trying to update the vpn password and the user with which you are sending the request.