1. Packages
  2. Volcengine
  3. API Docs
  4. cloud_identity
  5. PermissionSetProvisioning
Volcengine v0.0.24 published on Tuesday, Jun 25, 2024 by Volcengine

volcengine.cloud_identity.PermissionSetProvisioning

Explore with Pulumi AI

volcengine logo
Volcengine v0.0.24 published on Tuesday, Jun 25, 2024 by Volcengine

    Provides a resource to manage cloud identity permission set provisioning

    Example Usage

    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Volcengine = Pulumi.Volcengine;
    
    return await Deployment.RunAsync(() => 
    {
        var fooPermissionSet = new Volcengine.Cloud_identity.PermissionSet("fooPermissionSet", new()
        {
            Description = "tf",
            SessionDuration = 5000,
            PermissionPolicies = new[]
            {
                new Volcengine.Cloud_identity.Inputs.PermissionSetPermissionPolicyArgs
                {
                    PermissionPolicyType = "System",
                    PermissionPolicyName = "AdministratorAccess",
                    InlinePolicyDocument = "",
                },
                new Volcengine.Cloud_identity.Inputs.PermissionSetPermissionPolicyArgs
                {
                    PermissionPolicyType = "System",
                    PermissionPolicyName = "ReadOnlyAccess",
                    InlinePolicyDocument = "",
                },
                new Volcengine.Cloud_identity.Inputs.PermissionSetPermissionPolicyArgs
                {
                    PermissionPolicyType = "Inline",
                    InlinePolicyDocument = "{\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"auto_scaling:DescribeScalingGroups\"],\"Resource\":[\"*\"]}]}",
                },
            },
        });
    
        var fooUser = new Volcengine.Cloud_identity.User("fooUser", new()
        {
            UserName = "acc-test-user",
            DisplayName = "tf-test-user",
            Description = "tf",
            Email = "88@qq.com",
            Phone = "181",
        });
    
        var fooPermissionSetAssignment = new Volcengine.Cloud_identity.PermissionSetAssignment("fooPermissionSetAssignment", new()
        {
            PermissionSetId = fooPermissionSet.Id,
            TargetId = "210026****",
            PrincipalType = "User",
            PrincipalId = fooUser.Id,
        });
    
        // When the `volcengine_cloud_identity_permission_set` is updated, you can use this resource to provision the permission set.
        // When deleting this resource, resource `volcengine_cloud_identity_permission_set_assignment` must be deleted first.
        var fooPermissionSetProvisioning = new Volcengine.Cloud_identity.PermissionSetProvisioning("fooPermissionSetProvisioning", new()
        {
            PermissionSetId = fooPermissionSet.Id,
            TargetId = "210026****",
            ProvisioningStatus = "Provisioned",
        });
    
    });
    
    package main
    
    import (
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    	"github.com/volcengine/pulumi-volcengine/sdk/go/volcengine/cloud_identity"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		fooPermissionSet, err := cloud_identity.NewPermissionSet(ctx, "fooPermissionSet", &cloud_identity.PermissionSetArgs{
    			Description:     pulumi.String("tf"),
    			SessionDuration: pulumi.Int(5000),
    			PermissionPolicies: cloud_identity.PermissionSetPermissionPolicyArray{
    				&cloud_identity.PermissionSetPermissionPolicyArgs{
    					PermissionPolicyType: pulumi.String("System"),
    					PermissionPolicyName: pulumi.String("AdministratorAccess"),
    					InlinePolicyDocument: pulumi.String(""),
    				},
    				&cloud_identity.PermissionSetPermissionPolicyArgs{
    					PermissionPolicyType: pulumi.String("System"),
    					PermissionPolicyName: pulumi.String("ReadOnlyAccess"),
    					InlinePolicyDocument: pulumi.String(""),
    				},
    				&cloud_identity.PermissionSetPermissionPolicyArgs{
    					PermissionPolicyType: pulumi.String("Inline"),
    					InlinePolicyDocument: pulumi.String("{\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"auto_scaling:DescribeScalingGroups\"],\"Resource\":[\"*\"]}]}"),
    				},
    			},
    		})
    		if err != nil {
    			return err
    		}
    		fooUser, err := cloud_identity.NewUser(ctx, "fooUser", &cloud_identity.UserArgs{
    			UserName:    pulumi.String("acc-test-user"),
    			DisplayName: pulumi.String("tf-test-user"),
    			Description: pulumi.String("tf"),
    			Email:       pulumi.String("88@qq.com"),
    			Phone:       pulumi.String("181"),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = cloud_identity.NewPermissionSetAssignment(ctx, "fooPermissionSetAssignment", &cloud_identity.PermissionSetAssignmentArgs{
    			PermissionSetId: fooPermissionSet.ID(),
    			TargetId:        pulumi.String("210026****"),
    			PrincipalType:   pulumi.String("User"),
    			PrincipalId:     fooUser.ID(),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = cloud_identity.NewPermissionSetProvisioning(ctx, "fooPermissionSetProvisioning", &cloud_identity.PermissionSetProvisioningArgs{
    			PermissionSetId:    fooPermissionSet.ID(),
    			TargetId:           pulumi.String("210026****"),
    			ProvisioningStatus: pulumi.String("Provisioned"),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.volcengine.cloud_identity.PermissionSet;
    import com.pulumi.volcengine.cloud_identity.PermissionSetArgs;
    import com.pulumi.volcengine.cloud_identity.inputs.PermissionSetPermissionPolicyArgs;
    import com.pulumi.volcengine.cloud_identity.User;
    import com.pulumi.volcengine.cloud_identity.UserArgs;
    import com.pulumi.volcengine.cloud_identity.PermissionSetAssignment;
    import com.pulumi.volcengine.cloud_identity.PermissionSetAssignmentArgs;
    import com.pulumi.volcengine.cloud_identity.PermissionSetProvisioning;
    import com.pulumi.volcengine.cloud_identity.PermissionSetProvisioningArgs;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Map;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class App {
        public static void main(String[] args) {
            Pulumi.run(App::stack);
        }
    
        public static void stack(Context ctx) {
            var fooPermissionSet = new PermissionSet("fooPermissionSet", PermissionSetArgs.builder()        
                .description("tf")
                .sessionDuration(5000)
                .permissionPolicies(            
                    PermissionSetPermissionPolicyArgs.builder()
                        .permissionPolicyType("System")
                        .permissionPolicyName("AdministratorAccess")
                        .inlinePolicyDocument("")
                        .build(),
                    PermissionSetPermissionPolicyArgs.builder()
                        .permissionPolicyType("System")
                        .permissionPolicyName("ReadOnlyAccess")
                        .inlinePolicyDocument("")
                        .build(),
                    PermissionSetPermissionPolicyArgs.builder()
                        .permissionPolicyType("Inline")
                        .inlinePolicyDocument("{\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"auto_scaling:DescribeScalingGroups\"],\"Resource\":[\"*\"]}]}")
                        .build())
                .build());
    
            var fooUser = new User("fooUser", UserArgs.builder()        
                .userName("acc-test-user")
                .displayName("tf-test-user")
                .description("tf")
                .email("88@qq.com")
                .phone("181")
                .build());
    
            var fooPermissionSetAssignment = new PermissionSetAssignment("fooPermissionSetAssignment", PermissionSetAssignmentArgs.builder()        
                .permissionSetId(fooPermissionSet.id())
                .targetId("210026****")
                .principalType("User")
                .principalId(fooUser.id())
                .build());
    
            var fooPermissionSetProvisioning = new PermissionSetProvisioning("fooPermissionSetProvisioning", PermissionSetProvisioningArgs.builder()        
                .permissionSetId(fooPermissionSet.id())
                .targetId("210026****")
                .provisioningStatus("Provisioned")
                .build());
    
        }
    }
    
    import pulumi
    import pulumi_volcengine as volcengine
    
    foo_permission_set = volcengine.cloud_identity.PermissionSet("fooPermissionSet",
        description="tf",
        session_duration=5000,
        permission_policies=[
            volcengine.cloud_identity.PermissionSetPermissionPolicyArgs(
                permission_policy_type="System",
                permission_policy_name="AdministratorAccess",
                inline_policy_document="",
            ),
            volcengine.cloud_identity.PermissionSetPermissionPolicyArgs(
                permission_policy_type="System",
                permission_policy_name="ReadOnlyAccess",
                inline_policy_document="",
            ),
            volcengine.cloud_identity.PermissionSetPermissionPolicyArgs(
                permission_policy_type="Inline",
                inline_policy_document="{\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"auto_scaling:DescribeScalingGroups\"],\"Resource\":[\"*\"]}]}",
            ),
        ])
    foo_user = volcengine.cloud_identity.User("fooUser",
        user_name="acc-test-user",
        display_name="tf-test-user",
        description="tf",
        email="88@qq.com",
        phone="181")
    foo_permission_set_assignment = volcengine.cloud_identity.PermissionSetAssignment("fooPermissionSetAssignment",
        permission_set_id=foo_permission_set.id,
        target_id="210026****",
        principal_type="User",
        principal_id=foo_user.id)
    # When the `volcengine_cloud_identity_permission_set` is updated, you can use this resource to provision the permission set.
    # When deleting this resource, resource `volcengine_cloud_identity_permission_set_assignment` must be deleted first.
    foo_permission_set_provisioning = volcengine.cloud_identity.PermissionSetProvisioning("fooPermissionSetProvisioning",
        permission_set_id=foo_permission_set.id,
        target_id="210026****",
        provisioning_status="Provisioned")
    
    import * as pulumi from "@pulumi/pulumi";
    import * as volcengine from "@volcengine/pulumi";
    
    const fooPermissionSet = new volcengine.cloud_identity.PermissionSet("fooPermissionSet", {
        description: "tf",
        sessionDuration: 5000,
        permissionPolicies: [
            {
                permissionPolicyType: "System",
                permissionPolicyName: "AdministratorAccess",
                inlinePolicyDocument: "",
            },
            {
                permissionPolicyType: "System",
                permissionPolicyName: "ReadOnlyAccess",
                inlinePolicyDocument: "",
            },
            {
                permissionPolicyType: "Inline",
                inlinePolicyDocument: "{\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"auto_scaling:DescribeScalingGroups\"],\"Resource\":[\"*\"]}]}",
            },
        ],
    });
    const fooUser = new volcengine.cloud_identity.User("fooUser", {
        userName: "acc-test-user",
        displayName: "tf-test-user",
        description: "tf",
        email: "88@qq.com",
        phone: "181",
    });
    const fooPermissionSetAssignment = new volcengine.cloud_identity.PermissionSetAssignment("fooPermissionSetAssignment", {
        permissionSetId: fooPermissionSet.id,
        targetId: "210026****",
        principalType: "User",
        principalId: fooUser.id,
    });
    // When the `volcengine_cloud_identity_permission_set` is updated, you can use this resource to provision the permission set.
    // When deleting this resource, resource `volcengine_cloud_identity_permission_set_assignment` must be deleted first.
    const fooPermissionSetProvisioning = new volcengine.cloud_identity.PermissionSetProvisioning("fooPermissionSetProvisioning", {
        permissionSetId: fooPermissionSet.id,
        targetId: "210026****",
        provisioningStatus: "Provisioned",
    });
    
    resources:
      fooPermissionSet:
        type: volcengine:cloud_identity:PermissionSet
        properties:
          description: tf
          sessionDuration: 5000
          permissionPolicies:
            - permissionPolicyType: System
              permissionPolicyName: AdministratorAccess
              inlinePolicyDocument:
            - permissionPolicyType: System
              permissionPolicyName: ReadOnlyAccess
              inlinePolicyDocument:
            - permissionPolicyType: Inline
              inlinePolicyDocument: '{"Statement":[{"Effect":"Allow","Action":["auto_scaling:DescribeScalingGroups"],"Resource":["*"]}]}'
      fooUser:
        type: volcengine:cloud_identity:User
        properties:
          userName: acc-test-user
          displayName: tf-test-user
          description: tf
          email: 88@qq.com
          phone: '181'
      fooPermissionSetAssignment:
        type: volcengine:cloud_identity:PermissionSetAssignment
        properties:
          permissionSetId: ${fooPermissionSet.id}
          targetId: 210026****
          principalType: User
          principalId: ${fooUser.id}
      # When the `volcengine_cloud_identity_permission_set` is updated, you can use this resource to provision the permission set.
      # When deleting this resource, resource `volcengine_cloud_identity_permission_set_assignment` must be deleted first.
      fooPermissionSetProvisioning:
        type: volcengine:cloud_identity:PermissionSetProvisioning
        properties:
          permissionSetId: ${fooPermissionSet.id}
          targetId: 210026****
          provisioningStatus: Provisioned
    

    Create PermissionSetProvisioning Resource

    Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

    Constructor syntax

    new PermissionSetProvisioning(name: string, args: PermissionSetProvisioningArgs, opts?: CustomResourceOptions);
    @overload
    def PermissionSetProvisioning(resource_name: str,
                                  args: PermissionSetProvisioningArgs,
                                  opts: Optional[ResourceOptions] = None)
    
    @overload
    def PermissionSetProvisioning(resource_name: str,
                                  opts: Optional[ResourceOptions] = None,
                                  permission_set_id: Optional[str] = None,
                                  provisioning_status: Optional[str] = None,
                                  target_id: Optional[str] = None)
    func NewPermissionSetProvisioning(ctx *Context, name string, args PermissionSetProvisioningArgs, opts ...ResourceOption) (*PermissionSetProvisioning, error)
    public PermissionSetProvisioning(string name, PermissionSetProvisioningArgs args, CustomResourceOptions? opts = null)
    public PermissionSetProvisioning(String name, PermissionSetProvisioningArgs args)
    public PermissionSetProvisioning(String name, PermissionSetProvisioningArgs args, CustomResourceOptions options)
    
    type: volcengine:cloud_identity:PermissionSetProvisioning
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    

    Parameters

    name string
    The unique name of the resource.
    args PermissionSetProvisioningArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    resource_name str
    The unique name of the resource.
    args PermissionSetProvisioningArgs
    The arguments to resource properties.
    opts ResourceOptions
    Bag of options to control resource's behavior.
    ctx Context
    Context object for the current deployment.
    name string
    The unique name of the resource.
    args PermissionSetProvisioningArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args PermissionSetProvisioningArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args PermissionSetProvisioningArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    Constructor example

    The following reference example uses placeholder values for all input properties.

    var permissionSetProvisioningResource = new Volcengine.Cloud_identity.PermissionSetProvisioning("permissionSetProvisioningResource", new()
    {
        PermissionSetId = "string",
        ProvisioningStatus = "string",
        TargetId = "string",
    });
    
    example, err := cloud_identity.NewPermissionSetProvisioning(ctx, "permissionSetProvisioningResource", &cloud_identity.PermissionSetProvisioningArgs{
    	PermissionSetId:    pulumi.String("string"),
    	ProvisioningStatus: pulumi.String("string"),
    	TargetId:           pulumi.String("string"),
    })
    
    var permissionSetProvisioningResource = new PermissionSetProvisioning("permissionSetProvisioningResource", PermissionSetProvisioningArgs.builder()
        .permissionSetId("string")
        .provisioningStatus("string")
        .targetId("string")
        .build());
    
    permission_set_provisioning_resource = volcengine.cloud_identity.PermissionSetProvisioning("permissionSetProvisioningResource",
        permission_set_id="string",
        provisioning_status="string",
        target_id="string")
    
    const permissionSetProvisioningResource = new volcengine.cloud_identity.PermissionSetProvisioning("permissionSetProvisioningResource", {
        permissionSetId: "string",
        provisioningStatus: "string",
        targetId: "string",
    });
    
    type: volcengine:cloud_identity:PermissionSetProvisioning
    properties:
        permissionSetId: string
        provisioningStatus: string
        targetId: string
    

    PermissionSetProvisioning Resource Properties

    To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

    Inputs

    The PermissionSetProvisioning resource accepts the following input properties:

    PermissionSetId string
    The id of the cloud identity permission set.
    ProvisioningStatus string
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    TargetId string
    The target account id of the cloud identity permission set provisioning.
    PermissionSetId string
    The id of the cloud identity permission set.
    ProvisioningStatus string
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    TargetId string
    The target account id of the cloud identity permission set provisioning.
    permissionSetId String
    The id of the cloud identity permission set.
    provisioningStatus String
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    targetId String
    The target account id of the cloud identity permission set provisioning.
    permissionSetId string
    The id of the cloud identity permission set.
    provisioningStatus string
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    targetId string
    The target account id of the cloud identity permission set provisioning.
    permission_set_id str
    The id of the cloud identity permission set.
    provisioning_status str
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    target_id str
    The target account id of the cloud identity permission set provisioning.
    permissionSetId String
    The id of the cloud identity permission set.
    provisioningStatus String
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    targetId String
    The target account id of the cloud identity permission set provisioning.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the PermissionSetProvisioning resource produces the following output properties:

    Id string
    The provider-assigned unique ID for this managed resource.
    Id string
    The provider-assigned unique ID for this managed resource.
    id String
    The provider-assigned unique ID for this managed resource.
    id string
    The provider-assigned unique ID for this managed resource.
    id str
    The provider-assigned unique ID for this managed resource.
    id String
    The provider-assigned unique ID for this managed resource.

    Look up Existing PermissionSetProvisioning Resource

    Get an existing PermissionSetProvisioning resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

    public static get(name: string, id: Input<ID>, state?: PermissionSetProvisioningState, opts?: CustomResourceOptions): PermissionSetProvisioning
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            permission_set_id: Optional[str] = None,
            provisioning_status: Optional[str] = None,
            target_id: Optional[str] = None) -> PermissionSetProvisioning
    func GetPermissionSetProvisioning(ctx *Context, name string, id IDInput, state *PermissionSetProvisioningState, opts ...ResourceOption) (*PermissionSetProvisioning, error)
    public static PermissionSetProvisioning Get(string name, Input<string> id, PermissionSetProvisioningState? state, CustomResourceOptions? opts = null)
    public static PermissionSetProvisioning get(String name, Output<String> id, PermissionSetProvisioningState state, CustomResourceOptions options)
    Resource lookup is not supported in YAML
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    resource_name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    The following state arguments are supported:
    PermissionSetId string
    The id of the cloud identity permission set.
    ProvisioningStatus string
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    TargetId string
    The target account id of the cloud identity permission set provisioning.
    PermissionSetId string
    The id of the cloud identity permission set.
    ProvisioningStatus string
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    TargetId string
    The target account id of the cloud identity permission set provisioning.
    permissionSetId String
    The id of the cloud identity permission set.
    provisioningStatus String
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    targetId String
    The target account id of the cloud identity permission set provisioning.
    permissionSetId string
    The id of the cloud identity permission set.
    provisioningStatus string
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    targetId string
    The target account id of the cloud identity permission set provisioning.
    permission_set_id str
    The id of the cloud identity permission set.
    provisioning_status str
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    target_id str
    The target account id of the cloud identity permission set provisioning.
    permissionSetId String
    The id of the cloud identity permission set.
    provisioningStatus String
    The target provisioning status of the cloud identity permission set. This field must be specified as Provisioned in order to provision the updated permission set. When deleting this resource, resource volcengine.cloud_identity.PermissionSetAssignment must be deleted first.
    targetId String
    The target account id of the cloud identity permission set provisioning.

    Import

    CloudIdentityPermissionSetProvisioning can be imported using the permission_set_id:target_id, e.g.

     $ pulumi import volcengine:cloud_identity/permissionSetProvisioning:PermissionSetProvisioning default resource_id
    

    To learn more about importing existing cloud resources, see Importing resources.

    Package Details

    Repository
    volcengine volcengine/pulumi-volcengine
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the volcengine Terraform Provider.
    volcengine logo
    Volcengine v0.0.24 published on Tuesday, Jun 25, 2024 by Volcengine