Add image sign

Add an ability to add signature for images.

Related reclass-system change I7d22c5c4570ec6b3cfb5a2346f5efb83d5804222

Related-PROD: PROD-24494

Co-Authored-By: Mykyta Karpin <mkarpin@mirantis.com>

Change-Id: I93905c3dd6f0ed62023fab1d154c47c3716f628c
diff --git a/_states/barbicanv1.py b/_states/barbicanv1.py
index 8c70bea..af202d5 100644
--- a/_states/barbicanv1.py
+++ b/_states/barbicanv1.py
@@ -213,6 +213,39 @@
     return _created(image_name, 'sign_image', resp)
 
 
+def secret_acl_present(name, cloud_name, **kwargs):
+    try:
+        secret = _barbicanv1_call(
+            'secret_get_details', name=name, cloud_name=cloud_name
+        )
+    except Exception as e:
+        if 'ResourceNotFound' in repr(e):
+            return _absent(name, 'secret')
+        if 'MultipleResourcesFound' in repr(e):
+            return _find_failed(name, 'secret')
+    try:
+        resp = _barbicanv1_call('secret_acl_get', name=name,
+                                cloud_name=cloud_name)
+    except Exception as e:
+        if 'ResourceNotFound' in repr(e):
+            resp = _barbicanv1_call('secret_acl_put', name=name,
+                                    cloud_name=cloud_name, **kwargs)
+            return _created(name, 'acl', resp)
+        else:
+            log.error('Add acl for user faild with {}'.format(e))
+        return _create_failed(name, 'acl')
+
+    missing_users = [user_id
+                     for user_id in kwargs.get('users', [])
+                     if user_id not in resp['read']['users']]
+    if missing_users:
+        kwargs['users'] = missing_users
+        resp = _barbicanv1_call('secret_acl_put', name=name,
+                                cloud_name=cloud_name, **kwargs)
+        return _created(name, 'acl', resp)
+    return _no_changes(name, 'acl')
+
+
 def _created(name, resource, resource_definition):
     changes_dict = {
         'name': name,