Browse code

Merge pull request #340 from songkick/master

Add and remove full lifecycle policies

Matt Domsch authored on 2014/06/24 10:57:43
Showing 2 changed files
... ...
@@ -685,6 +685,23 @@ class S3(object):
685 685
         response = self.send_request(request)
686 686
         return response
687 687
 
688
+    def set_lifecycle_policy(self, uri, policy):
689
+        headers = SortedDict(ignore_case = True)
690
+        headers['content-md5'] = compute_content_md5(policy)
691
+        request = self.create_request("BUCKET_CREATE", uri = uri,
692
+                                      extra = "?lifecycle", headers=headers)
693
+        body = policy
694
+        debug(u"set_lifecycle_policy(%s): policy-xml: %s" % (uri, body))
695
+        request.sign()
696
+        response = self.send_request(request, body=body)
697
+        return response
698
+
699
+    def delete_lifecycle_policy(self, uri):
700
+        request = self.create_request("BUCKET_DELETE", uri = uri, extra = "?lifecycle")
701
+        debug(u"delete_lifecycle_policy(%s)" % uri)
702
+        response = self.send_request(request)
703
+        return response
704
+
688 705
     def get_multipart(self, uri):
689 706
         request = self.create_request("BUCKET_LIST", bucket = uri.bucket(), extra = "?uploads")
690 707
         response = self.send_request(request)
... ...
@@ -1547,6 +1547,32 @@ def cmd_delpolicy(args):
1547 1547
     output(u"%s: Policy deleted" % uri)
1548 1548
     return EX_OK
1549 1549
 
1550
+def cmd_setlifecycle(args):
1551
+    s3 = S3(cfg)
1552
+    uri = S3Uri(args[1])
1553
+    lifecycle_policy_file = args[0]
1554
+    lifecycle_policy = open(lifecycle_policy_file, 'r').read()
1555
+
1556
+    if cfg.dry_run: return EX_OK
1557
+
1558
+    response = s3.set_lifecycle_policy(uri, lifecycle_policy)
1559
+
1560
+    debug(u"response - %s" % response['status'])
1561
+    if response['status'] == 204:
1562
+        output(u"%s: Lifecycle Policy updated" % uri)
1563
+    return EX_OK
1564
+
1565
+def cmd_dellifecycle(args):
1566
+    s3 = S3(cfg)
1567
+    uri = S3Uri(args[0])
1568
+    if cfg.dry_run: return EX_OK
1569
+
1570
+    response = s3.delete_lifecycle_policy(uri)
1571
+
1572
+    debug(u"response - %s" % response['status'])
1573
+    output(u"%s: Lifecycle Policy deleted" % uri)
1574
+    return EX_OK
1575
+
1550 1576
 def cmd_multipart(args):
1551 1577
     s3 = S3(cfg)
1552 1578
     uri = S3Uri(args[0])
... ...
@@ -1979,6 +2005,8 @@ def get_commands_list():
1979 1979
 
1980 1980
     ## Lifecycle commands
1981 1981
     {"cmd":"expire", "label":"Set or delete expiration rule for the bucket", "param":"s3://BUCKET", "func":cmd_expiration_set, "argc":1},
1982
+    {"cmd":"setlifecycle", "label":"Upload a lifecycle policy for the bucket", "param":"s3://BUCKET", "func":cmd_setlifecycle, "argc":1},
1983
+    {"cmd":"dellifecycle", "label":"Remove a lifecycle policy for the bucket", "param":"s3://BUCKET", "func":cmd_dellifecycle, "argc":1},
1982 1984
 
1983 1985
     ## CloudFront commands
1984 1986
     {"cmd":"cflist", "label":"List CloudFront distribution points", "param":"", "func":CfCmd.info, "argc":0},