如何通过softlayer api从快照恢复?

时间:2016-08-04 04:51:31

标签: ibm-cloud-infrastructure

使用softlayer api和slcli实用程序,我尝试从快照恢复卷。 但我无法使用python和slcli从softlayer api恢复。

如何通过softlayer api使用python从snapthot恢复?

使用了我的命令

volumeid:13010889 snapshotid:13230363

slcli

slcli snapshot restore-volume 13230363 13010889

导入SoftLayer

client = SoftLayer.Client()

iscsi =客户[' Network_Storage_Iscsi']

iscsi.restoreFromSnapshot(13230371,ID = 13010889)

2 个答案:

答案 0 :(得分:0)

你粘贴你得到的错误会很好,无论如何你的代码很好,我认为错误的是你发送的数据:

  1. 您需要确保您使用的网络存储的ID是正确的并且其状态是活动的(这适用于您有副本的情况),如果它处于非活动状态,则该方法将失败,命令方法你需要使用活动卷的ID(主要或副本)。
  2. 确保快照ID是正确的,您需要使用此方法getSnapshotsForVolume并再次获取您需要使用活动存储(主要或副本)ID的核心列表
  3. 此致

答案 1 :(得分:0)

我可以确认restoreFromSnapshot API调用确实已被破坏。我把机密信息留空了。

/home/scripts > ./snapshot.py list 12193217
VOLUM ID: 12193217
+---+-------------------+----------+----------+---------------------------+
| # |      username     |    id    | nasType  |         createDate        |
+---+-------------------+----------+----------+---------------------------+
| 7 |       ***         | 13020991 | SNAPSHOT |  ***                      |


 /home/scripts > ./snapshot.py restore 12193217 13020991
 iscsi id: 12193217
 iscsi snapshot ID: 13020991
 True


    def restore_from_snapshot(sl_config, volume_id, snapshot_id):
        """ Restore drive from specified snapshot """
        if snapshot_id and volume_id: 
            volume_id = volume_id[0]
            snapshot_id = snapshot_id[0]
            #print "snapshot_id = %s :: volume_id = %s" % snapshot_id % volume_id
            iscsi_mgr = SoftLayer.ISCSIManager(SL.instance(sl_config).client)
            iscsi_id = helpers.resolve_id(iscsi_mgr.resolve_ids, volume_id,'iSCSI')
            print "iscsi id: %i" % iscsi_id
            iscsi_snapshot_id = helpers.resolve_id(iscsi_mgr.resolve_ids, snapshot_id,'Snapshot')
            print "iscsi snapshot ID: %i " % iscsi_snapshot_id
            iscsi = SL.instance(sl_config).client['Network_Storage_Iscsi']
            snapshot_output = iscsi.restoreFromSnapshot(iscsi_snapshot_id, id=iscsi_id)

            print snapshot_output

在此之后没有任何事情发生。只有通过Web API才能进行还原。 SLCLI也被破坏(它使用相同的服务)。