Add and remove full lifecycle policies
Matt Domsch authored on 2014/06/24 10:57:43... | ... |
@@ -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}, |