{
  "$id": "https://json.schemastore.org/cloudify.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "dataTypes": {
      "description": "To use data_types, the definitions version must be cloudify_dsl_1_2 or higher.",
      "type": "object",
      "patternProperties": {
        "": {
          "$ref": "#/definitions/dataType"
        }
      }
    },
    "dataType": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string",
          "description": "Description for the data type."
        },
        "properties": {
          "type": "object",
          "description": "Dictionary of the data type properties."
        },
        "derived_from": {
          "type": "string",
          "description": "Parent data type."
        }
      },
      "additionalProperties": false
    },
    "inputProperty": {
      "description": "inputs are parameters that are injected into a blueprint when a deployment is created. These parameters can be referenced by using the get_input intrinsic function.",
      "type": "object",
      "properties": {
        "description": {
          "description": "An optional description for the input.",
          "type": "string"
        },
        "type": {
          "description": "The required data type of the input. Not specifying a data type means the type can be anything, including a list, an array or a dictionary. Valid types: string, integer, float, boolean, list, dict, regex or a custom data type.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "string",
              "enum": [
                "string",
                "integer",
                "float",
                "boolean",
                "list",
                "dict",
                "regex"
              ]
            }
          ]
        },
        "default": {
          "description": "An optional default value for the input.",
          "type": ["number", "string", "array", "boolean", "integer", "object"]
        },
        "constraints": {
          "$ref": "#/definitions/inputPropertyConstraints"
        },
        "required": {
          "description": "a boolean value to indicate whether the input is required must be passed or not.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "inputPropertyConstraints": {
      "description": "The constraints the input value must comply with. Read more details about the format and usage of the constraints in the Constraints section below.",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "equal": {
              "description": "",
              "type": ["number", "string", "boolean", "integer"]
            },
            "greater_than": {
              "type": ["number", "string", "boolean", "integer"]
            },
            "greater_or_equal": {
              "type": ["number", "string", "boolean", "integer"]
            },
            "less_than": {
              "type": ["number", "string", "boolean", "integer"]
            },
            "less_or_equal": {
              "type": ["number", "string", "boolean", "integer"]
            }
          }
        },
        {
          "valid_values": {
            "type": "array",
            "items": {
              "type": ["number", "string", "boolean", "integer"]
            }
          }
        }
      ]
    },
    "nodeTemplates": {
      "type": "object",
      "description": "node_templates represent the actual instances of node types that eventually represent the running application/service, as described in the blueprint. node_templates are more commonly referred to as nodes. Nodes can comprise more than one instance. For example, you might define a node that contains two VMs. Each VM is a node_instance.",
      "patternProperties": {
        "": {
          "$ref": "#/definitions/nodeTemplate"
        }
      }
    },
    "nodeTemplate": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "The node-type of this node template.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "string",
              "enum": [
                "cloudify.nodes.Root",
                "cloudify.nodes.Tier",
                "cloudify.nodes.Compute",
                "cloudify.nodes.Container",
                "cloudify.nodes.Network",
                "cloudify.nodes.Subnet",
                "cloudify.nodes.Router",
                "cloudify.nodes.Port",
                "cloudify.nodes.VirtualIP",
                "cloudify.nodes.SecurityGroup",
                "cloudify.nodes.LoadBalancer",
                "cloudify.nodes.Volume",
                "cloudify.nodes.FileSystem",
                "cloudify.nodes.ObjectStorage",
                "cloudify.nodes.SoftwareComponent",
                "cloudify.nodes.WebServer",
                "cloudify.nodes.ApplicationServer",
                "cloudify.nodes.DBMS",
                "cloudify.nodes.MessageBugServer",
                "cloudify.nodes.ApplicationModule",
                "cloudify.nodes.Component",
                "cloudify.nodes.ServiceComponent",
                "cloudify.nodes.SharedResource",
                "cloudify.nodes.aws.dynamodb.Table",
                "cloudify.nodes.aws.iam.Group",
                "cloudify.nodes.aws.iam.AccessKey",
                "cloudify.nodes.aws.iam.LoginProfile",
                "cloudify.nodes.aws.iam.User",
                "cloudify.nodes.aws.iam.Role",
                "cloudify.nodes.aws.iam.RolePolicy",
                "cloudify.nodes.aws.iam.InstanceProfile",
                "cloudify.nodes.aws.iam.Policy",
                "cloudify.nodes.aws.lambda.Function",
                "cloudify.nodes.aws.lambda.Invoke",
                "cloudify.nodes.aws.lambda.Permission",
                "cloudify.nodes.aws.rds.Instance",
                "cloudify.nodes.aws.rds.InstanceReadReplica",
                "cloudify.nodes.aws.rds.SubnetGroup",
                "cloudify.nodes.aws.rds.OptionGroup",
                "cloudify.nodes.aws.rds.Option",
                "cloudify.nodes.aws.rds.ParameterGroup",
                "cloudify.nodes.aws.rds.Parameter",
                "cloudify.nodes.aws.route53.HostedZone",
                "cloudify.nodes.aws.route53.RecordSet",
                "cloudify.nodes.aws.SQS.Queue",
                "cloudify.nodes.aws.SNS.Topic",
                "cloudify.nodes.aws.SNS.Subscription",
                "cloudify.nodes.aws.elb.LoadBalancer",
                "cloudify.nodes.aws.elb.Classic.LoadBalancer",
                "cloudify.nodes.aws.elb.Classic.HealthCheck",
                "cloudify.nodes.aws.elb.Listener",
                "cloudify.nodes.aws.elb.Classic.Listener",
                "cloudify.nodes.aws.elb.Rule",
                "cloudify.nodes.aws.elb.TargetGroup",
                "cloudify.nodes.aws.elb.Classic.Policy",
                "cloudify.nodes.aws.elb.Classic.Policy.Stickiness",
                "cloudify.nodes.aws.s3.BaseBucket",
                "cloudify.nodes.aws.s3.BaseBucketObject",
                "cloudify.nodes.aws.s3.Bucket",
                "cloudify.nodes.aws.s3.BucketPolicy",
                "cloudify.nodes.aws.s3.BucketLifecycleConfiguration",
                "cloudify.nodes.aws.s3.BucketTagging",
                "cloudify.nodes.aws.s3.BucketObject",
                "cloudify.nodes.aws.ec2.BaseType",
                "cloudify.nodes.aws.ec2.Vpc",
                "cloudify.nodes.aws.ec2.VpcPeering",
                "cloudify.nodes.aws.ec2.VpcPeeringRequest",
                "cloudify.nodes.aws.ec2.VpcPeeringAcceptRequest",
                "cloudify.nodes.aws.ec2.VpcPeeringRejectRequest",
                "cloudify.nodes.aws.ec2.Subnet",
                "cloudify.nodes.aws.ec2.SecurityGroup",
                "cloudify.nodes.aws.ec2.SecurityGroupRuleIngress",
                "cloudify.nodes.aws.ec2.SecurityGroupRuleEgress",
                "cloudify.nodes.aws.ec2.NATGateway",
                "cloudify.nodes.aws.ec2.Interface",
                "cloudify.nodes.aws.ec2.Instances",
                "cloudify.nodes.aws.ec2.Keypair",
                "cloudify.nodes.aws.ec2.ElasticIP",
                "cloudify.nodes.aws.ec2.NetworkACL",
                "cloudify.nodes.aws.ec2.NetworkAclEntry",
                "cloudify.nodes.aws.ec2.DHCPOptions",
                "cloudify.nodes.aws.ec2.VPNGateway",
                "cloudify.nodes.aws.ec2.VPNConnection",
                "cloudify.nodes.aws.ec2.VPNConnectionRoute",
                "cloudify.nodes.aws.ec2.CustomerGateway",
                "cloudify.nodes.aws.ec2.InternetGateway",
                "cloudify.nodes.aws.ec2.RouteTable",
                "cloudify.nodes.aws.ec2.Route",
                "cloudify.nodes.aws.ec2.Image",
                "cloudify.nodes.aws.ec2.Tags",
                "cloudify.nodes.aws.ec2.EBSVolume",
                "cloudify.nodes.aws.ec2.EBSAttachment",
                "cloudify.nodes.aws.autoscaling.Group",
                "cloudify.nodes.aws.autoscaling.LaunchConfiguration",
                "cloudify.nodes.aws.autoscaling.Policy",
                "cloudify.nodes.aws.autoscaling.LifecycleHook",
                "cloudify.nodes.aws.autoscaling.NotificationConfiguration",
                "cloudify.nodes.aws.cloudwatch.Alarm",
                "cloudify.nodes.aws.cloudwatch.Rule",
                "cloudify.nodes.aws.cloudwatch.Event",
                "cloudify.nodes.aws.cloudwatch.Target",
                "cloudify.nodes.aws.efs.FileSystem",
                "cloudify.nodes.aws.efs.MountTarget",
                "cloudify.nodes.aws.efs.FileSystemTags",
                "cloudify.nodes.aws.kms.CustomerMasterKey",
                "cloudify.nodes.aws.kms.Alias",
                "cloudify.nodes.aws.kms.Grant",
                "cloudify.nodes.aws.CloudFormation.Stack",
                "cloudify.nodes.aws.ecs.Cluster",
                "cloudify.nodes.aws.ecs.Service",
                "cloudify.nodes.aws.ecs.TaskDefinition",
                "cloudify.nodes.swift.s3.Bucket",
                "cloudify.nodes.swift.s3.BucketObject",
                "cloudify.nodes.aws.eks.Cluster",
                "cloudify.nodes.aws.eks.NodeGroup",
                "cloudify.azure.nodes.storage.StorageAccount",
                "cloudify.azure.nodes.storage.DataDisk",
                "cloudify.azure.nodes.storage.FileShare",
                "cloudify.azure.nodes.network.VirtualNetwork",
                "cloudify.azure.nodes.network.NetworkSecurityGroup",
                "cloudify.azure.nodes.network.NetworkSecurityRule",
                "cloudify.azure.nodes.network.Subnet",
                "cloudify.azure.nodes.network.RouteTable",
                "cloudify.azure.nodes.network.Route",
                "cloudify.azure.nodes.network.NetworkInterfaceCard",
                "cloudify.azure.nodes.network.IPConfiguration",
                "cloudify.azure.nodes.network.PublicIPAddress",
                "cloudify.azure.nodes.compute.AvailabilitySet",
                "cloudify.azure.nodes.compute.VirtualMachine",
                "cloudify.azure.nodes.compute.WindowsVirtualMachine",
                "cloudify.azure.nodes.compute.VirtualMachineExtension",
                "cloudify.azure.nodes.network.LoadBalancer",
                "cloudify.azure.nodes.network.LoadBalancer.BackendAddressPool",
                "cloudify.azure.nodes.network.LoadBalancer.Probe",
                "cloudify.azure.nodes.network.LoadBalancer.IncomingNATRule",
                "cloudify.azure.nodes.network.LoadBalancer.Rule",
                "cloudify.azure.Deployment",
                "cloudify.azure.nodes.compute.ContainerService",
                "cloudify.azure.nodes.Plan",
                "cloudify.azure.nodes.WebApp",
                "cloudify.azure.nodes.PublishingUser",
                "cloudify.azure.nodes.compute.ManagedCluster",
                "cloudify.gcp.project",
                "cloudify.gcp.nodes.Instance",
                "cloudify.gcp.nodes.InstanceGroup",
                "cloudify.gcp.nodes.Volume",
                "cloudify.gcp.nodes.Snapshot",
                "cloudify.gcp.nodes.Network",
                "cloudify.gcp.nodes.SubNetwork",
                "cloudify.gcp.nodes.VPCNetworkPeering",
                "cloudify.gcp.nodes.Route",
                "cloudify.gcp.nodes.FirewallRule",
                "cloudify.gcp.nodes.SecurityGroup",
                "cloudify.gcp.nodes.Access",
                "cloudify.gcp.nodes.KeyPair",
                "cloudify.gcp.nodes.ExternalIP",
                "cloudify.gcp.nodes.GlobalAddress",
                "cloudify.gcp.nodes.StaticIP",
                "cloudify.gcp.nodes.Address",
                "cloudify.gcp.nodes.Image",
                "cloudify.gcp.nodes.HealthCheck",
                "cloudify.gcp.nodes.BackendService",
                "cloudify.gcp.nodes.RegionBackendService",
                "cloudify.gcp.nodes.UrlMap",
                "cloudify.gcp.nodes.TargetProxy",
                "cloudify.gcp.nodes.SslCertificate",
                "cloudify.gcp.nodes.ForwardingRule",
                "cloudify.gcp.nodes.GlobalForwardingRule",
                "cloudify.gcp.nodes.DNSZone",
                "cloudify.gcp.nodes.DNSRecord",
                "cloudify.gcp.nodes.DNSAAAARecord",
                "cloudify.gcp.nodes.DNSMXRecord",
                "cloudify.gcp.nodes.DNSNSRecord",
                "cloudify.gcp.nodes.DNSTXTRecord",
                "cloudify.gcp.nodes.KubernetesCluster",
                "cloudify.gcp.nodes.KubernetesNodePool",
                "cloudify.gcp.nodes.KubernetesClusterMonitoring",
                "cloudify.gcp.nodes.KubernetesClusterlegacyAbac",
                "cloudify.gcp.nodes.KubernetesClusterNetworkPolicy",
                "cloudify.gcp.nodes.Topic",
                "cloudify.gcp.nodes.TopicPolicy",
                "cloudify.gcp.nodes.TopicMessage",
                "cloudify.gcp.nodes.Subscription",
                "cloudify.gcp.nodes.SubscriptionPolicy",
                "cloudify.gcp.nodes.Acknowledge",
                "cloudify.gcp.nodes.PullRequest",
                "cloudify.gcp.nodes.StackDriverGroup",
                "cloudify.gcp.nodes.StackDriverTimeSeries",
                "cloudify.gcp.nodes.StackDriverUpTimeCheckConfig",
                "cloudify.gcp.nodes.LoggingSink",
                "cloudify.gcp.nodes.LoggingExclusion",
                "cloudify.gcp.nodes.Logging.BillingAccounts.sinks",
                "cloudify.gcp.nodes.Logging.Folders.sinks",
                "cloudify.gcp.nodes.Logging.Organizations.sinks",
                "cloudify.gcp.nodes.Logging.Projects.sinks",
                "cloudify.gcp.nodes.Logging.BillingAccounts.exclusions",
                "cloudify.gcp.nodes.Logging.Folders.exclusions",
                "cloudify.gcp.nodes.Logging.Organizations.exclusions",
                "cloudify.gcp.nodes.Logging.Projects.exclusions",
                "cloudify.gcp.nodes.Logging.Projects.metrics",
                "cloudify.kubernetes.resources.StatefulSet",
                "cloudify.nodes.helm.Binary",
                "cloudify.nodes.helm.Release",
                "cloudify.nodes.helm.Repo"
              ]
            }
          ]
        },
        "properties": {
          "type": "object",
          "description": "The properties of the node template, matching its node type properties schema."
        },
        "instances": {
          "type": "object",
          "description": "Instances configuration. (Deprecated. Replaced with capabilities.scalable)"
        },
        "interfaces": {
          "$ref": "#/definitions/nodeTemplateInterfaces",
          "description": "Used for a mapping plugins to interfaces operation, or for specifying inputs for already-mapped node type operations."
        },
        "relationships": {
          "$ref": "#/definitions/nodeTemplateRelationships",
          "description": "Used for specifying the relationships that this node template has with other node templates."
        },
        "capabilities": {
          "type": "object",
          "description": "Used for specifying the node template capabilities (Supported since: cloudify_dsl_1_3.) Only the scalable capability is supported."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.Vpc"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2VPC"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.InternetGateway"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSInternetGateway"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.Subnet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2Subnet"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.RouteTable"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2RouteTable"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.Route"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2Route"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.ElasticIP"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2ElasticIP"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.NATGateway"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2NATGateway"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.SecurityGroup"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2SecurityGroup"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.SecurityGroupRuleIngress"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2SecurityGroupRuleIngress"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.Interface"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2Interface"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.Image"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2Image"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.Instances"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2Instances"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.EBSVolume"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2EBSVolume"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.aws.ec2.EBSAttachment"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAWSEC2EBSAttachment"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.images"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerImagesProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerImagesInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.containers"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerContainersProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerContainersInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.host"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerHostProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerHostInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.host_details"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerHostDetailsProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerHostDetailsInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.image"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerImageProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerImageInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.container"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerContainerProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerContainerInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.container_files"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerContainerFilesProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerContainerFilesInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.ansible_playbook"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerAnsiblePlaybookProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerAnsiblePlaybookInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.docker.terraform_module"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeDockerTerraformModuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeDockerTerraformModuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.nodes.Master"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesNodesMasterProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ResourceBase"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesResourceBase"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ResourceWithValidateStatus"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesResourceWithValidateStatus"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.BlueprintDefinedResource"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ClusterRoleBinding"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesClusterRoleBindingProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.RoleBinding"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesRoleBinding"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Role"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesRoleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ClusterRole"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesClusterRoleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Secret"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesSecretProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ServiceAccount"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesServiceAccountProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Deployment"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesDeploymentProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Node"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesNodeProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Namespace"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesNamespaceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Pod"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesPodProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ReplicaSet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesReplicaSetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ReplicationController"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesReplicationControllerProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.DaemonSet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesDaemonSetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.CustomResourceDefinition"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesCustomResourceDefinitionProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Service"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesServiceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.PersistentVolume"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesPersistentVolumeProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.ConfigMap"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesConfigMapProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.StorageClass"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesStorageClassProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.StatefulSet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesStatefulSetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.PodSecurityPolicy"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesPodSecurityPolicyProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.NetworkPolicy"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesNetworkPolicyProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.Ingress"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesIngressProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.PersistentVolumeClaim"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesPersistentVolumeClaimProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.CustomBlueprintDefinedResource"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesCustomBlueprintDefinedResourceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesCustomBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.CustomBlueprintDefinedResource"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesCustomBlueprintDefinedResourceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesCustomBlueprintDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.FileDefinedResource"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesFileDefinedResourceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesFileDefinedResourceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.kubernetes.resources.MultipleFileDefinedResources"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesMultipleFileDefinedResourcesProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeKubernetesResourcesMultipleFileDefinedResourcesInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.terraform"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeTerraformProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeTerraformInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.terraform.Module"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeTerraformModuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeTerraformModuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.terraform.Module"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeTerraformModuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeTerraformModuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.ansible.Executor"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeAnsibleExecutorProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeAnsibleExecutorInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.NetworkBase"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackNetworkBaseProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Network"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackNetworkProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackNetworkInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Subnet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackSubnetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackSubnetInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Port"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackPortProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackPortInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Router"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackRouterProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackRouterInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.FloatingIP"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackFloatingIPProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackFloatingIPInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.SecurityGroup"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackSecurityGroupProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackSecurityGroupInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.SecurityGroupRule"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackSecurityGroupRuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackSecurityGroupRuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.RBACPolicy"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackRBACPolicyProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Server"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackServerProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.WindowsServer"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackWindowsServerProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.KeyPair"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackKeyPairProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackKeyPairInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.HostAggregate"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackHostAggregateProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackHostAggregateInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Image"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackImageProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackImageInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Flavor"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackFlavorProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackFlavorInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.User"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackUserProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackUserInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Group"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackGroupProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackGroupInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Role"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackRoleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackRoleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Project"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackProjectProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackProjectInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Volume"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackVolumeProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackVolumeInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.VolumeType"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackVolumeTypeProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackVolumeTypeInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.Zone"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackZoneProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackZoneInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.openstack.RecordSet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeOpenstackRecordSetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeOpenstackRecordSetInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.DeploymentProxy"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesDeploymentProxyProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesDeploymentProxyInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.NodeInstanceProxy"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesNodeInstanceProxyProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.CloudInit.CloudConfig"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesCloudInitCloudConfigProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesCloudInitCloudConfigInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.keys.nodes.RSAKey"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesRSAKeyProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesRSAKeyInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.terminal.raw"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyTerminalRawProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyTerminalRawInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.File"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesFileProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesFileInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.ftp"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesFTPProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesFTPInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.rest.Requests"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyRestRequestsProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyRestRequestsInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.rest.BunchRequests"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyRestBunchRequestsProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyRestBunchRequestsInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.secrets.Writer"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesSecretsWriterProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesSecretsWriterInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.secrets.Reader"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesSecretsReaderProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyNodesSecretsReaderInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.ResourceGroup"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesResourceGroupProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesResourceGroupInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.storage.StorageAccount"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesStorageStorageAccountProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesStorageStorageAccountInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.storage.DataDisk"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesStorageDataDiskProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesStorageDataDisktInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.storage.FileShare"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesStorageFileShareProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesStorageFileShareInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.VirtualNetwork"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkVirtualNetworkProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkVirtualNetworkInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.NetworkSecurityGroup"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkNetworkSecurityGroupProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkNetworkSecurityGroupInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.NetworkSecurityRule"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkNetworkSecurityRuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkNetworkSecurityRuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.Subnet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkSubnetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkSubnetInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.RouteTable"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkRouteTableProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkRouteTableInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.Route"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkRouteProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkRouteInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.NetworkInterfaceCard"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkNetworkInterfaceCardProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkNetworkInterfaceCardInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.IPConfiguration"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkIPConfigurationProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.PublicIPAddress"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkPublicIPAddressProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkPublicIPAddressInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.compute.AvailabilitySet"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeAvailabilitySetProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeAvailabilitySetInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.compute.VirtualMachine"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeVirtualMachineProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeVirtualMachineInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.compute.WindowsVirtualMachine"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeWindowsVirtualMachineProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeWindowsVirtualMachineInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.compute.VirtualMachineExtension"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeVirtualMachineExtensionProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeVirtualMachineExtensionInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.LoadBalancer"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.LoadBalancer.BackendAddressPool"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerBackendAddressPoolProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerBackendAddressPoolInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.LoadBalancer.Probe"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerProbeProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerProbeInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.LoadBalancer.IncomingNATRule"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerIncomingNATRuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerIncomingNATRuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.network.LoadBalancer.Rule"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerRuleProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesNetworkLoadBalancerRuleInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.Deployment"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureDeploymentProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureDeploymentInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.compute.ContainerService"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeContainerServiceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeContainerServiceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.Plan"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesPlanProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesPlanInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.WebApp"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesWebAppProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesWebAppInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.PublishingUser"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesPublishingUserProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesPublishingUserInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.azure.nodes.compute.ManagedCluster"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeManagedClusterProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeManagedClusterInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.gcp.project"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyGCPProjectProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyGCPProjectInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.gcp.nodes.Instance"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeCloudifyGCPNodesInstanceProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeCloudifyGCPNodesInstanceInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.helm.Binary"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeHelmBinaryProperties"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.helm.Release"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeHelmReleaseProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeHelmReleaseInterfaces"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "cloudify.nodes.helm.Repo"
              }
            }
          },
          "then": {
            "properties": {
              "properties": {
                "$ref": "#/definitions/nodeTypeHelmRepoProperties"
              },
              "interfaces": {
                "$ref": "#/definitions/nodeTypeHelmRepoInterfaces"
              }
            }
          }
        }
      ],
      "required": ["type"],
      "additionalProperties": false
    },
    "gcpExternalResource": {
      "type": "object",
      "properties": {
        "use_external_resource": {
          "type": "boolean",
          "description": "Indicate whether the resource exists or if Cloudify should create the resource,\ntrue if you are bringing an existing resource, false if you want cloudify to create it.",
          "default": false
        }
      }
    },
    "gcpResourceId": {
      "type": "object",
      "properties": {
        "resource_id": {
          "type": "string",
          "description": "The GCP resource ID of the external resource, if\nuse_external_resource is true. Otherwise it is an empty string."
        }
      }
    },
    "nodeTypeCloudifyGCPProjectProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/gcpExternalResource"
        },
        {
          "$ref": "#/definitions/gcpResourceId"
        },
        {
          "properties": {
            "gcp_config": {
              "type": "object",
              "description": "A dictionary of values to pass to authenticate with the GCP API."
            },
            "name": {
              "type": "string",
              "description": "Optional project name. By default it will be instance id."
            }
          }
        }
      ]
    },
    "nodeTypeCloudifyGCPProjectInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["gcp_plugin.cloudify_gcp.admin.projects.create"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["gcp_plugin.cloudify_gcp.admin.projects.delete"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyGCPNodesInstanceProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/gcpExternalResource"
        },
        {
          "$ref": "#/definitions/gcpResourceId"
        },
        {
          "properties": {
            "gcp_config": {
              "type": "object",
              "description": "A dictionary of values to pass to authenticate with the GCP API."
            },
            "use_public_ip": {
              "type": "boolean",
              "description": "Tells the deployment to use the public IP (if available) of the resource\nfor Cloudify Agent connections",
              "default": false
            },
            "image_id": {
              "type": "string",
              "description": "The ID of the image in your GCP account."
            },
            "instance_type": {
              "type": "string",
              "description": "The instance's type. All available instance types can be found here:\nhttps://cloud.google.com/compute/docs/machine-types",
              "default": "n1-standard-1"
            },
            "name": {
              "description": "Optional instance name. By default it will be instance id.",
              "type": "string"
            },
            "zone": {
              "description": "Optional zone name. If not given, this instance will be deployed\bin default zone.",
              "type": "string"
            },
            "tags": {
              "description": "Optional tags. If not given, this instance will have a tag only with\nits name.",
              "type": "string"
            },
            "block_project_ssh_keys": {
              "description": " Disable project-wide ssh keys for this Instance",
              "type": "boolean",
              "default": false
            },
            "can_ip_forward": {
              "description": "Is the VM allowed to send packets with source address different to its own?",
              "type": "boolean",
              "default": false
            },
            "scopes": {
              "description": "Optional scopes. If not will set by default:\n'https://www.googleapis.com/auth/devstorage.read_write',\n'https://www.googleapis.com/auth/logging.write'",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "startup_script": {
              "description": "A script which will be run when the Instance is first started\nexample:\n  type: string\n  script: |\n    yum install some stuff\n    systemctl start it\nor:\n  type: file\n  script: <path to script file>",
              "type": "string"
            },
            "external_ip": {
              "description": "Should the Instance be created with an externally-accessible\nIP address. This will be an ephemeral IP.\nIf you would like to use an IP address which can be transferred\nto another Instance then connect this Instance to an `Address`\nnode using the\n`cloudify.gcp.relationships.instance_connected_to_ip`\nrelationship.",
              "type": "boolean",
              "default": false
            },
            "additional_settings": {
              "description": "Additional instance settings.",
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeCloudifyGCPNodesInstanceInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["gcp_plugin.cloudify_gcp.compute.instance.create"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "startup_script": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "startup_script"]
                      }
                    },
                    "external_ip": {
                      "type": "boolean",
                      "default": {
                        "get_property": ["SELF", "external_ip"]
                      }
                    },
                    "instance_type": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "instance_type"]
                      }
                    },
                    "image_id": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "image_id"]
                      }
                    },
                    "name": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "name"]
                      }
                    },
                    "zone": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "zone"]
                      }
                    },
                    "scopes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "default": {
                        "get_property": ["SELF", "scopes"]
                      }
                    },
                    "tags": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "tags"]
                      }
                    },
                    "can_ip_forward": {
                      "type": "boolean",
                      "default": {
                        "get_property": ["SELF", "can_ip_forward"]
                      }
                    },
                    "additional_settings": {
                      "type": "object",
                      "default": {
                        "get_property": ["SELF", "additional_settings"]
                      }
                    }
                  }
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["gcp_plugin.cloudify_gcp.compute.instance.start"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "default": {
                        "get_attribute": ["SELF", "name"]
                      }
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["gcp_plugin.cloudify_gcp.compute.instance.delete"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "default": {
                        "get_attribute": ["SELF", "name"]
                      }
                    },
                    "zone": {
                      "type": "string",
                      "default": {
                        "get_attribute": ["SELF", "zone"]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "cloudifyDatatypesAzureConfig": {
      "type": "object",
      "properties": {
        "endpoints_active_directory": {
          "description": "A Microsoft Azure Active Directory endpoint.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "https://login.microsoftonline.com"
        },
        "endpoints_resource_manager": {
          "description": "A Microsoft Azure Active Directory Resource Manager.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "https://management.azure.com"
        },
        "endpoint_resource": {
          "description": "A Microsoft Azure Active Directory Resource Id.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "https://management.core.windows.net/"
        },
        "endpoint_verify": {
          "description": "Connection certificate verify.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true
        },
        "subscription_id": {
          "description": "A Microsoft Azure subscription ID. This is a unique\nuser account in Azure. This can be found in the\nSubscriptions tab on your dashboard.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "tenant_id": {
          "description": "A Microsoft Azure tenant ID. This can be found in the Azure Active Directory dashboard by accessing\nyour directory. Open the Application Endpoints\ndialog and your tenant ID will be in the URL for\nthe OAUTH2.0 TOKEN ENDPOINT.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "client_id": {
          "description": "A Microsoft Azure client ID. This can be found in\nthe Azure Active Directory dashboard by accessing\nyour directory. View the Applications tab and select\nthe application used to access Azure APIs.  Your\nclient ID can be found by expanding the ACCESS WEB\nAPIS IN OTHER APPLICATIONS tab.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "client_secret": {
          "description": "A Microsoft Azure client secret key. This can be found\nor generated in the same location as your client ID.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "scale_name_separator": {
          "description": "When scaling resources, a unique name must be sent to\nthe Azure API. Since names are left to the user to\nmanage (the service does not generate unique IDs),\nthis plugin will attempt to append characters or\nnumbers to the end of the resource name when resources\nare scaled out. This value should be a character, or\ncharacters, that will separate the base name from the\ngenerated unique characters.  For instance, if the\nbase name of a resource is \"myvm\", the separator is\nset to \"_\", and a scale workflow attempts to create\nanother resource, the resulting name could be\nsomething like \"myvm_1\". This field can be left blank.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "_"
        },
        "scale_name_suffix_chars": {
          "description": "A string of characters (ASCII) to be used when\ngenerating unique suffix data when scaling resources.\nSee \"scale_name_separator\" for more information.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "1234567890"
        },
        "certificate": {
          "description": "Certificate private key.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "thumbprint": {
          "description": "Certificate thumbprint.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "cloud_environment": {
          "description": "An alternative cloud environment.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "cloudifyDatatypesAzureStorageStorageAccountConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163564.aspx",
      "properties": {
        "accountType": {
          "description": "An storage account type (case sensitive)",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "networkAcls": {
          "type": "object"
        },
        "supportsHttpsTrafficOnly": {
          "type": "object"
        },
        "encryption": {
          "type": "object"
        },
        "keySource": {
          "type": "object"
        }
      }
    },
    "cloudifyDatatypesAzureStorageDataDiskConfig": {
      "type": "object",
      "properties": {
        "container_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Container for the resource.",
          "default": "vhds"
        },
        "size": {
          "description": "Size of the Page Blob (Azure disk) in GiB. Maximum of 1023 GiB allowed.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 20
        },
        "force_delete": {
          "description": "If set to true, the resource's \"delete\" lifecycle will purge the\nAzure Data Disk from the Azure Storage Account. If false, the\nData Disk is left as-is in the Storage Account.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        }
      },
      "required": ["size"]
    },
    "cloudifyDatatypesAzureNetworkVirtualNetworkConfig": {
      "type": "string",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163661.aspx",
      "properties": {
        "addressSpace": {
          "type": "object"
        },
        "dhcpOptions": {
          "type": "object"
        },
        "subnets": {
          "type": "object"
        }
      },
      "required": ["addressSpace"]
    },
    "cloudifyDatatypesAzureNetworkNetworkSecurityRuleConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163645.aspx",
      "properties": {
        "description": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "protocol": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "sourcePortRange": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "destinationPortRange": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "sourceAddressPrefix": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "destinationAddressPrefix": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "access": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "priority": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "direction": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      },
      "required": [
        "protocol",
        "sourceAddressPrefix",
        "destinationAddressPrefix",
        "access",
        "priority",
        "direction"
      ]
    },
    "cloudifyDatatypesAzureNetworkNetworkSecurityGroupConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163656.aspx",
      "properties": {
        "securityRules": {
          "type": "object"
        }
      }
    },
    "cloudifyDatatypesAzureNetworkSubnetConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163621.aspx",
      "properties": {
        "addressPrefix": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "networkSecurityGroup": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "routeTable": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        }
      }
    },
    "cloudifyDatatypesAzureNetworkRouteTableConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt502548.aspx",
      "properties": {
        "routes": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "cloudifyDatatypesAzureNetworkIPConfigurationConfig": {
      "type": "object",
      "properties": {
        "privateIPAddress": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Static, private IP Address"
        },
        "privateIPAllocationMethod": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Defines how a private IP address is assigned. Options\nare Static or Dynamic"
        }
      },
      "required": ["privateIPAllocationMethod"]
    },
    "cloudifyDatatypesAzureNetworkPublicIPAddressConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163590.aspx",
      "properties": {
        "publicIPAllocationMethod": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Defines whether the IP address is stable or dynamic.\nOptions are Static or Dynamic"
        },
        "idleTimeoutInMinutes": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "description": "Specifies the timeout (in minutes) for the TCP idle connection.\nThe value can be set between 4 and 30 minutes"
        },
        "domainNameLabel": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The concatenation of the domain name label and the regionalized\nDNS zone make up the fully qualified domain name associated\nwith the public IP address."
        },
        "reverseFqdn": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "A fully qualified domain name that resolves to this\npublic IP address."
        }
      },
      "required": ["publicIPAllocationMethod"]
    },
    "cloudifyDatatypesAzureComputeAvailabilitySetConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163607.aspx",
      "properties": {
        "platformUpdateDomainCount": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "platformFaultDomainCount": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "sku": {
          "description": "dict to represent sku [for now we only provide name]",
          "type": "object"
        }
      }
    },
    "cloudifyDatatypesAzureComputeVirtualMachineConfig": {
      "type": "object",
      "description": "https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx",
      "properties": {
        "hardwareProfile": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "storageProfile": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "osProfile": {
          "type": "object"
        },
        "spot_instance": {
          "$ref": "#/definitions/cloudifyDatatypesAzureComputeVirtualMachineSpotConfig"
        }
      }
    },
    "cloudifyDatatypesAzureComputeVirtualMachineSpotConfig": {
      "type": "object",
      "description": "check the parameters from this link : https://www.shorturl.at/wHTU2",
      "properties": {
        "is_spot_instance": {
          "description": "set true if you want to consider spot instance params",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "priority": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Possible values include: 'Regular', 'Low', 'Spot'",
          "default": "Spot"
        },
        "eviction_policy": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "the only supported value is 'Deallocate'",
          "default": "Deallocate"
        },
        "billing_profile": {
          "type": "object"
        }
      }
    },
    "cloudifyDatatypesAzureNetworkLoadBalancerProbeConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163574.aspx",
      "properties": {
        "protocol": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "Tcp"
        },
        "port": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "requestPath": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "intervalInSeconds": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 5
        },
        "numberOfProbes": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 16
        }
      },
      "required": ["port", "intervalInSeconds", "numberOfProbes"]
    },
    "cloudifyDatatypesAzureNetworkLoadBalancerIncomingNATRuleConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163574.aspx",
      "properties": {
        "protocol": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "Tcp"
        },
        "frontendPort": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "backendPort": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        }
      },
      "required": ["protocol", "frontendPort", "backendPort"]
    },
    "cloudifyDatatypesAzureNetworkLoadBalancerRuleConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163574.aspx",
      "properties": {
        "protocol": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "Tcp"
        },
        "frontendPort": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "backendPort": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "enableFloatingIP": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "idleTimeoutInMinutes": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 5
        },
        "loadDistribution": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "Default"
        }
      },
      "required": ["protocol", "frontendPort", "backendPort"]
    },
    "cloudifyDatatypesAzureComputeManagedClusterConfig": {
      "type": "object",
      "description": "See https://docs.microsoft.com/en-us/rest/api/aks/managedclusters",
      "properties": {
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "tags": {
          "description": "A dict containing resource tags",
          "type": "object"
        },
        "kubernetes_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "dns_prefix": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "agent_pool_profiles": {
          "description": "An array to pass an array of dict for agent profile",
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "object"
                  },
                  "count": {
                    "type": "number"
                  },
                  "vmSize": {
                    "type": "string"
                  },
                  "osType": {
                    "type": "string"
                  },
                  "availabilityZones": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "enableNodePublicIP": {
                    "type": "boolean"
                  }
                }
              }
            ]
          }
        },
        "linux_profile": {
          "description": "A dict to define linux profile with user name and public keys",
          "type": "object"
        },
        "network_profile": {
          "description": "A dict to define network profile loadbalancer,outbound,IPs",
          "type": "object"
        },
        "windows_profile": {
          "description": "A dict to define windows profile with user name and password",
          "type": "object"
        },
        "service_principal_profile": {
          "description": "A dict to define service service_principal_profile [client_id, secret]",
          "type": "object"
        },
        "addon_profiles": {
          "description": "A dict to define addons to the managed cluster",
          "type": "object"
        },
        "enable_rbac": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true
        }
      }
    },
    "cloudifyDatatypesAzureStorageFileShareConfig": {
      "type": "object",
      "properties": {
        "metadata": {
          "description": "Metadata (dict) for the File Share",
          "type": "object"
        },
        "quota": {
          "description": "Quote, in GiB, for the maximum size of the file share",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "fail_on_exist": {
          "description": "If true, causes the operation to raise a NonRecoverableError if\nthe file share already exists. If false, issues a warning and\ncontinues execution.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        }
      }
    },
    "cloudifyDatatypesAzureNetworkLoadBalancerConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163574.aspx",
      "properties": {
        "frontendIPConfigurations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "backendAddressPools": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "loadBalancingRules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "probes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "inboundNatRules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "cloudifyDatatypesAzureNetworkRouteConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt459110.aspx",
      "properties": {
        "addressPrefix": {
          "type": "string"
        },
        "nextHopType": {
          "type": "string"
        },
        "nextHopIpAddress": {
          "type": "string"
        }
      },
      "required": ["nextHopType", "addressPrefix"]
    },
    "cloudifyDatatypesAzureNetworkNetworkInterfaceCardConfig": {
      "type": "object",
      "description": "See https://msdn.microsoft.com/en-us/library/mt163668.aspx",
      "properties": {
        "networkSecurityGroups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ipConfigurations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dnsSettings": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesResourceGroupProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Resources API Version",
          "default": "2017-05-10"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource. Resource group name must be no longer than\n80 characters long. It can contain only alphanumeric characters,\ndash, underscore, opening parenthesis, closing parenthesis,\nand period. The name cannot end with a period."
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": "false"
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      }
    },
    "nodeTypeCloudifyAzureNodesResourceGroupInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": ["azure.cloudify_azure.resources.resourcegroup.create"]
            },
            "delete": {
              "type": "string",
              "enum": ["azure.cloudify_azure.resources.resourcegroup.delete"]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesStorageStorageAccountProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Storage API Version",
          "default": "2015-06-15"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource. Storage account name must be between\n3 and 24 characters in length and use numbers and lower-case\nletters only."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "sku": {
          "description": "A Storage account SKU if needed.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureStorageStorageAccountConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": "false"
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This propertynwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeCloudifyAzureNodesStorageStorageAccountInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.storage.storageaccount.create"
              ]
            }
          },
          "delete": {
            "type": "string",
            "enum": [
              "azure.cloudify_azure.resources.storage.storageaccount.delete"
            ]
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesStorageDataDiskProperties": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource (include any extension, such as .vhd).\nCan be up to 80 characters in length and\ncontain lowercase letters, numbers, \".\", and \"_\". Must start\nwith a number or lowercase letter and cannot end with\neither \"_\" or \".\""
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureStorageDataDiskConfig"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesStorageDataDisktInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.storage.disk.create_data_disk"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.storage.disk.delete_data_disk"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesStorageFileShareProperties": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource. Can be up to 63 characters in length and\ncontain lowercase letters, numbers, and dashes. Must start\nwith a number or lowercase letter and cannot contain\ntwo consecutive dashes."
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureStorageFileShareConfig"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesStorageFileShareInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "create": {
            "type": "string",
            "enum": [
              "azure.cloudify_azure.resources.storage.file.create_file_share"
            ]
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkVirtualNetworkProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkVirtualNetworkConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": "false"
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkVirtualNetworkInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.virtualnetwork.create"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.virtualnetwork.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkNetworkSecurityGroupProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkNetworkSecurityGroupConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkNetworkSecurityGroupInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networksecuritygroup.create"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networksecuritygroup.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkNetworkSecurityRuleProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "network_security_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Network Security Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Network Security Groupnode)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkNetworkSecurityRuleConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkNetworkSecurityRuleInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networksecurityrule.create"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networksecurityrule.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkSubnetProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "virtual_network_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Virtual Network that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Virtual Network node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkSubnetConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkSubnetInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "create": {
            "type": "string",
            "enum": ["azure.cloudify_azure.resources.network.subnet.create"]
          },
          "delete": {
            "type": "string",
            "enum": ["azure.cloudify_azure.resources.network.subnet.delete"]
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkRouteTableProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location:": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkRouteTableConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkRouteTableInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.routetable.create"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.routetable.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkRouteProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "route_table_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Network Security Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Virtual Network node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkRouteConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkRouteInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": ["azure.cloudify_azure.resources.network.route.create"]
            },
            "delete": {
              "type": "string",
              "enum": ["azure.cloudify_azure.resources.network.route.delete"]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkNetworkInterfaceCardProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "primary": {
          "description": "When using multiple Network Interfaces, a primary must be set",
          "default": false
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkNetworkInterfaceCardConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkNetworkInterfaceCardInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networkinterfacecard.create"
              ]
            },
            "configure": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networkinterfacecard.configure"
              ]
            },
            "start": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networkinterfacecard.start"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.networkinterfacecard.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkIPConfigurationProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkIPConfigurationConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeCloudifyAzureNodesNetworkPublicIPAddressProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkPublicIPAddressConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkPublicIPAddressInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.publicipaddress.create"
              ]
            },
            "start": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.publicipaddress.start"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.publicipaddress.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesComputeAvailabilitySetProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Compute API Version",
          "default": "2016-03-30"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureComputeAvailabilitySetConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["resource_config", "use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesComputeAvailabilitySetInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.compute.availabilityset.create"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.compute.availabilityset.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesComputeVirtualMachineProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Compute API Version",
          "default": "2016-03-30"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "use_public_ip": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "Tells the deployment to use the public IP (if available) of the resource\nfor Cloudify Agent connections"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "plan": {
          "description": "Specifies information about the marketplace image used to create the virtual\nmachine. This element is only used for marketplace images.",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureComputeVirtualMachineConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "ip": {
          "description": "Property specifying the IP address of the resource to\nuse for the agent installer.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "os_family": {
          "description": "Property specifying what type of operating system family\nthis compute node will run.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "linux"
        },
        "agent_config": {
          "$ref": "#/definitions/cloudifyDataTypesAgentConfig",
          "type": "object"
        },
        "storage_endpoint": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "This is the suffix for the storage endpoint. Supported values are core.windows.net or local.azurestack.external.",
          "default": "core.windows.net"
        }
      },
      "required": ["use_external_resource", "resource_config"]
    },
    "nodeTypeCloudifyAzureNodesComputeVirtualMachineInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.virtualmachine.configure"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "command_to_execute": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "file_uris": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesComputeWindowsVirtualMachineProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeCloudifyAzureNodesComputeWindowsVirtualMachineProperties"
        },
        {
          "properties": {
            "os_family": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "default": "windows"
            },
            "agent_config": {
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeCloudifyAzureNodesComputeWindowsVirtualMachineInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.virtualmachine.configure"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "command_to_execute": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "file_uris": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesComputeVirtualMachineExtensionProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Compute API Version",
          "default": "2016-03-30"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "virtual_machine_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Virtual Machine that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Virtual Machine node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesComputeVirtualMachineExtensionInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create:": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.virtualmachineextension.create"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "resource_config": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.compute.virtualmachineextension.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkLoadBalancerConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.create"
              ]
            },
            "configure": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.configure"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.delete"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerBackendAddressPoolProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "load_balancer_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerBackendAddressPoolInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.create_backend_pool"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.delete_backend_pool"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerProbeProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "load_balancer_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkLoadBalancerProbeConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerProbeInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.create_probe"
              ]
            },
            "delete": {
              "type": "object",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.delete_probe"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerIncomingNATRuleProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "load_balancer_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkLoadBalancerIncomingNATRuleConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerIncomingNATRuleInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.create_incoming_nat_rule"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.delete_incoming_nat_rule"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerRuleProperties": {
      "type": "object",
      "properties": {
        "api_version": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Network API Version",
          "default": "2016-09-01"
        },
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name for the resource."
        },
        "resource_group_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the Resource Group that the existing resource belongs to\n(this is only useful when not using a relationship between a resource\nnode and a Resource Group node)"
        },
        "load_balancer_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specifies the supported Azure location for the resource"
        },
        "tags": {
          "description": "Specifies a dictionary of one or more name and value pairs that describe a tag",
          "type": "object"
        },
        "resource_config": {
          "description": "A dictionary of values to pass as properties when creating the resource",
          "$ref": "#/definitions/cloudifyDatatypesAzureNetworkLoadBalancerRuleConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_after": {
          "description": "Overrides the Azure-specified \"retry_after\" response. This property\nwill set the number of seconds for each task retry interval (in the\ncase of iteratively checking the status of an asynchronous operation)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesNetworkLoadBalancerRuleInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.create_rule"
              ]
            },
            "delete": {
              "type": "string",
              "enum": [
                "azure.cloudify_azure.resources.network.loadbalancer.delete_rule"
              ]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureDeploymentProperties": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "location": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "template_file": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Path or URL to template file. Ignored if `template` is specified."
        },
        "template": {
          "description": "Deployment template. Can be either a string (which will be parsed as\nJSON) or a dict (which will be passed as-is to the Azure SDK).",
          "anyOf": [
            {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            {
              "type": "object"
            }
          ]
        },
        "params": {
          "description": "Deployment params",
          "type": "object"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        }
      },
      "required": ["name", "location", "use_external_resource"]
    },
    "nodeTypeCloudifyAzureDeploymentInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "string",
              "enum": ["azure.cloudify_azure.resources.deployment.create"]
            },
            "delete": {
              "type": "string",
              "enum": ["azure.cloudify_azure.resources.deployment.delete"]
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesComputeContainerServiceProperties": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "resource_group": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "container_service_config": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Container service config details"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["name", "resource_group"]
    },
    "nodeTypeCloudifyAzureNodesComputeContainerServiceInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.container_service.create"
                  ]
                },
                "inputs": {
                  "name": {
                    "$ref": "#/definitions/cloudifyStringOrGetInput"
                  },
                  "resource_group": {
                    "$ref": "#/definitions/cloudifyStringOrGetInput"
                  },
                  "container_service_config": {
                    "$ref": "#/definitions/cloudifyStringOrGetInput"
                  },
                  "azure_config": {
                    "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                  },
                  "client_config": {
                    "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                  }
                }
              }
            },
            "delete": {
              "type": "string",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.container_service.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesPlanProperties": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "resource_group": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "sku": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "SKU details, including location, name, capacity and tier"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource",
          "type": "boolean",
          "default": false
        }
      },
      "required": ["name", "resource_group", "use_external_resource"]
    },
    "nodeTypeCloudifyAzureNodesPlanInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.app_service.plan.create"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "resource_group": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "sku": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "azure_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                    },
                    "client_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.app_service.plan.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesWebAppProperties": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "resource_group": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "app_config": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "App config details, including location and plan"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["name", "resource_group"]
    },
    "nodeTypeCloudifyAzureNodesWebAppInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.app_service.webapp.create"
                  ]
                },
                "inputs": {
                  "name": {
                    "$ref": "#/definitions/cloudifyStringOrGetInput"
                  },
                  "resource_group": {
                    "$ref": "#/definitions/cloudifyStringOrGetInput"
                  },
                  "app_config": {
                    "$ref": "#/definitions/cloudifyStringOrGetInput"
                  },
                  "azure_config": {
                    "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                  },
                  "client_config": {
                    "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.app_service.webapp.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesPublishingUserProperties": {
      "type": "object",
      "properties": {
        "user_details": {
          "description": "User details including location, name, kind, user_name,...",
          "type": "object"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": ["user_details"]
    },
    "nodeTypeCloudifyAzureNodesPublishingUserInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.app_service.publishing_user.set_user"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "user_details": {
                      "type": "object"
                    },
                    "azure_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                    },
                    "client_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyAzureNodesComputeManagedClusterProperties": {
      "type": "object",
      "properties": {
        "resource_group": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "cluster_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "resource_config": {
          "$ref": "#/definitions/cloudifyDatatypesAzureComputeManagedClusterConfig",
          "description": "Managed Cluster config details, including location, profiles"
        },
        "store_kube_config_in_runtime": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true,
          "description": "it will store the kubernetes configuration into a runtime property ['kubeconf'] to\nuse later to interact with the cluster"
        },
        "azure_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        },
        "client_config": {
          "description": "A dictionary of values to pass to authenticate with the Azure API",
          "$ref": "#/definitions/cloudifyDatatypesAzureConfig"
        }
      },
      "required": [
        "resource_group",
        "cluster_name",
        "resource_config",
        "store_kube_config_in_runtime"
      ]
    },
    "nodeTypeCloudifyAzureNodesComputeManagedClusterInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.managed_cluster.create"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "resource_group": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "resource_group"]
                      }
                    },
                    "cluster_name": {
                      "type": "string",
                      "default": {
                        "get_property": ["SELF", "cluster_name"]
                      }
                    },
                    "resource_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureComputeManagedClusterConfig",
                      "default": {
                        "get_property": ["SELF", "resource_config"]
                      }
                    },
                    "azure_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureConfig",
                      "default": {
                        "get_property": ["SELF", "azure_config"]
                      }
                    },
                    "client_config": {
                      "$ref": "#/definitions/cloudifyDatatypesAzureConfig",
                      "default": {
                        "get_property": ["SELF", "client_config"]
                      }
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "azure.cloudify_azure.resources.compute.managed_cluster.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "cloudifyDatatypesBlueprint": {
      "type": "object",
      "properties": {
        "external_resource": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "Use external resource.",
          "default": false
        },
        "id": {
          "description": "This is the blueprint that the deployment node is a proxy to."
        },
        "main_file_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The application blueprint filename. If the blueprint consists many\nimported files this is the main blueprint.",
          "default": "blueprint.yaml"
        },
        "blueprint_archive": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The URL of a .zip to upload to the manager.(Can be skipped if external_resource == True)"
        }
      }
    },
    "cloudifyDatatypesDeployment": {
      "type": "object",
      "properties": {
        "external_resource": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "Use external resource.",
          "default": false
        },
        "id": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "This is the deployment that the node is a proxy to."
        },
        "inputs": {
          "type": "object",
          "description": "The inputs to the deployment."
        },
        "outputs": {
          "type": "object",
          "description": "A dictionary of \"{ key: value, key: value }\".\nGet \"key\" the deployment.\nSet \"value\" runtime property to the value of the output."
        },
        "all_outputs": {
          "description": "Ignored if \"outputs\" is specified.\nOtherwise, if true (the default), then all outputs from the remote\ndeployment are exposed. If false, then no output is exposed.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true
        },
        "logs": {
          "description": "Logs redirect settings, by default {redirect: true}",
          "type": "object"
        }
      }
    },
    "cloudifyDatatypesDeploymentProxy": {
      "type": "object",
      "properties": {
        "blueprint": {
          "$ref": "#/definitions/cloudifyDatatypesBlueprint"
        },
        "deployment": {
          "$ref": "#/definitions/cloudifyDatatypesDeployment"
        },
        "executions_start_args": {
          "type": "object",
          "description": "Optional params for executions"
        },
        "reexecute": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false,
          "description": "Reexecute workflows, on external deployment"
        }
      },
      "required": ["blueprint", "deployment"]
    },
    "cloudifyDatatypesNode": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "cloudifyDatatypesNodeInstance": {
      "type": "object",
      "properties": {
        "node": {
          "$ref": "#/definitions/cloudifyDatatypesNode"
        },
        "id": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "cloudifyDatatypesNodeInstanceProxy": {
      "type": "object",
      "properties": {
        "blueprint": {
          "$ref": "#/definitions/cloudifyDatatypesBlueprint"
        },
        "deployment": {
          "$ref": "#/definitions/cloudifyDatatypesDeployment"
        },
        "executions_start_args": {
          "type": "object",
          "description": "Optional params for executions"
        },
        "reexecute": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false,
          "description": "Reexecute workflows, on external deployment"
        },
        "node_instance": {
          "$ref": "#/definitions/cloudifyDatatypesNodeInstance"
        }
      },
      "required": ["blueprint", "deployment"]
    },
    "cloudifyDatatypesKey": {
      "type": "object",
      "properties": {
        "private_key_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "public_key_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "~/.ssh/id_rsa.pub"
        },
        "key_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "algorithm": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "RSA"
        },
        "bits": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 2048
        },
        "comment": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "passphrase": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "openssh_format": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput"
        },
        "unvalidated": {
          "description": "Unvalidated parameters."
        }
      }
    },
    "cloudifyDatatypesTerminalAuth": {
      "type": "object",
      "properties": {
        "user": {
          "description": "The login credentials for ssh server.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "password": {
          "description": "optional, ssh password",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "ip": {
          "description": "optional, device ip",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "key_content": {
          "description": "optional, ssh user key",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "port": {
          "description": "optional, ssh port",
          "default": 22,
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "store_logs": {
          "description": "optional, save communication logs",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "promt_check": {
          "description": "optional, list of prompts accepted from device, default is \"#/$\"",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "warnings": {
          "description": "optional, list of possible warnings without new line",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "errors": {
          "description": "optional, list of possible errors without new line",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "criticals": {
          "description": "optional, list of possible criticals without new line",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "exit_command": {
          "description": "optional, command for close connection, default 'exit'",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "exit"
        },
        "smart_device": {
          "description": "optional, use shell extension",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        }
      }
    },
    "cloudifyDatatypesFile": {
      "type": "object",
      "properties": {
        "resource_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The path relative to the blueprint where the file is stored.\nCurrently this must be packaged in the blueprint. An external URI is\nnot valid."
        },
        "file_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The path on the machine where the file should be saved."
        },
        "owner": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The owner string, such as \"centos:wheel\""
        },
        "mode": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "description": "The file permissions, such as 777. Must be provided as an integer.\n\"0777\" and 0777 are not valid. Only 777."
        },
        "template_variables": {
          "description": "Variables to render Jinja templates.",
          "type": "object"
        },
        "use_sudo": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "Whether or not to use sudo to move, rename, delete, chown, chmod,\nthe file.",
          "default": false
        },
        "allow_failure": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "If the download fails, log the error and continue.",
          "default": false
        }
      },
      "required": ["resource_path", "file_path", "owner", "mode"]
    },
    "cloudifyDatatypesFtpAuth": {
      "type": "object",
      "properties": {
        "user": {
          "description": "The login credentials for ftp server.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "password": {
          "description": "optional, ftp password",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "ip": {
          "description": "optional, device ip",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "port": {
          "description": "optional, ftp port",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 21
        },
        "ignore_host": {
          "description": "optional, ignore host in ftp response",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "tls": {
          "description": "optional, use tls connection to ftp",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        }
      }
    },
    "nodeTypeCloudifyNodesDeploymentProxyProperties": {
      "type": "object",
      "properties": {
        "resource_config": {
          "$ref": "#/definitions/cloudifyDatatypesDeploymentProxy"
        },
        "client": {
          "description": "Client configuration, if empty will be reused manager client:\n  host: Host of Cloudify's management machine.\n  port: Port of REST API service on management machine.\n  protocol: Protocol of REST API service on management machine,\n            defaults to http.\n  api_version: version of REST API service on management machine.\n  headers: Headers to be added to request.\n  query_params: Query parameters to be added to the request.\n  cert: Path to a copy of the server's self-signed certificate.\n  trust_all: if `False`, the server's certificate\n            (self-signed or not) will be verified.\n  username: Cloudify User username.\n  password: Cloudify User password.\n  token: Cloudify User token.\n  tenant: Cloudify Tenant name.",
          "type": "object",
          "properties": {
            "host": {
              "type": "string",
              "default": "127.0.0.1"
            },
            "username": {
              "type": "string",
              "default": "admin"
            },
            "password": {
              "type": "string",
              "default": "admin"
            },
            "tenant": {
              "type": "string",
              "default": "default_tenant"
            }
          }
        },
        "plugins": {
          "description": "Optional, list of plugins for upload.\n  wagon_path: Url for plugin wagon file.\n  plugin_yaml_path: Url for plugin yaml file.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "secrets": {
          "description": "Optional, dictionary of secrets for set before run deployments.",
          "type": "object"
        }
      }
    },
    "nodeTypeCloudifyNodesDeploymentProxyInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "cfy_util.cloudify_deployment_proxy.tasks.upload_blueprint"
                  ]
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "object",
                  "enum": [
                    "cfy_util.cloudify_deployment_proxy.tasks.create_deployment"
                  ]
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "cfy_util.cloudify_deployment_proxy.tasks.execute_start"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "workflow_id": {
                      "type": "string",
                      "default": "install"
                    },
                    "timeout": {
                      "type": "integer",
                      "description": "How long (in seconds) to wait for execution to finish before timing out",
                      "default": 1800
                    },
                    "interval": {
                      "type": "integer",
                      "description": "Polling interval (seconds)",
                      "default": 10
                    }
                  }
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "cfy_util.cloudify_deployment_proxy.tasks.execute_start"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "workflow_id": {
                      "type": "string",
                      "default": "uninstall"
                    },
                    "resource_config": {
                      "$ref": "#/definitions/cloudifyDatatypesDeploymentProxy"
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "cfy_util.cloudify_deployment_proxy.tasks.delete_deployment"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyNodesNodeInstanceProxyProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeCloudifyNodesDeploymentProxyProperties"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/cloudifyDatatypesNodeInstanceProxy"
            }
          }
        }
      ]
    },
    "nodeTypeCloudifyNodesCloudInitCloudConfigProperties": {
      "type": "object",
      "properties": {
        "header": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "#cloud-config"
        },
        "encode_base64": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": "false"
        },
        "resource_config": {
          "type": "object"
        }
      }
    },
    "nodeTypeCloudifyNodesCloudInitCloudConfigInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cloudinit.cloudify_cloudinit.tasks.update"]
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cloudinit.cloudify_cloudinit.tasks.update"]
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cloudinit.cloudify_cloudinit.tasks.update"]
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cloudinit.cloudify_cloudinit.tasks.update"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cloudinit.cloudify_cloudinit.tasks.delete"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyNodesRSAKeyProperties": {
      "type": "object",
      "properties": {
        "use_secret_store": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true
        },
        "use_secrets_if_exist": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "this flag is able to be true only if use_secret_store is true\nif this property is false the secret for the key value will be\ncreated, if true then the existing secrets of an existing node\nwith same key_name will be used as a key, if this property is true\nand the secrets does not exist they will be created.",
          "default": false
        },
        "key_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Deprecated. Use resource_config.key_name."
        },
        "resource_config": {
          "description": "A dictionary of values to pass to configure the key.",
          "$ref": "#/definitions/cloudifyDatatypesKey"
        }
      }
    },
    "nodeTypeCloudifyNodesRSAKeyInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["keys.cloudify_ssh_key.operations.create"]
                },
                "inputs": {
                  "store_public_key_material": {
                    "description": "Allow the public key material to be stored as a runtime\nproperty. Recommended.",
                    "type": "boolean",
                    "default": true
                  },
                  "store_private_key_material": {
                    "description": "Allow the private key material to be stored as a runtime\nproperty. Not recommended for manager deployments.",
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["keys.cloudify_ssh_key.operations.delete"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyTerminalRawProperties": {
      "type": "object",
      "properties": {
        "terminal_auth": {
          "description": "terminal credentials, like example:\n  user: <user name>\n  password: <user password>\n  ip: <host name>",
          "$ref": "#/definitions/cloudifyDatatypesTerminalAuth"
        }
      }
    },
    "nodeTypeCloudifyTerminalRawInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["terminal.cloudify_terminal.tasks.run"]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["terminal.cloudify_terminal.tasks.run"]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["terminal.cloudify_terminal.tasks.run"]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["terminal.cloudify_terminal.tasks.run"]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["terminal.cloudify_terminal.tasks.run"]
                },
                "inputs": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyNodesFileProperties": {
      "type": "object",
      "properties": {
        "resource_config": {
          "$ref": "#/definitions/cloudifyDatatypesFile"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeCloudifyNodesFileInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cfy_files.cloudify_files.tasks.create"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cfy_files.cloudify_files.tasks.delete"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyNodesFTPProperties": {
      "type": "object",
      "properties": {
        "resource_config": {
          "$ref": "#/definitions/cloudifyDatatypesFtpAuth"
        },
        "raw_files": {
          "type": "object",
          "description": "list files from blueprint to upload"
        },
        "files": {
          "type": "object",
          "description": "list files with content from blueprint to upload"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeCloudifyNodesFTPInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cfy_ftp.cloudify_ftp.tasks.create"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "resource_config": {
                      "$ref": "#/definitions/cloudifyDatatypesFtpAuth"
                    },
                    "raw_files": {
                      "type": "object",
                      "description": "list files from blueprint to upload"
                    },
                    "files": {
                      "type": "object",
                      "description": "list files with content from blueprint to upload"
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["cfy_ftp.cloudify_ftp.tasks.delete"]
                },
                "inputs": {
                  "resource_config": {
                    "$ref": "#/definitions/cloudifyDatatypesFtpAuth"
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyRestRequestsProperties": {
      "type": "object",
      "properties": {
        "hosts": {
          "description": "list of hosts name or IP addresses of Rest Servers",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "host": {
          "description": "host name or IP addresses of Rest Servers\nif list of hosts is not needed single host can be provided by this\nproperty. NOTE: the 'hosts' property overwrite the 'host' property",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "port": {
          "description": "port number. When -1 default ports are used\n(80 for ssl = false and 443 for ssl = true)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": -1
        },
        "ssl": {
          "description": "http or https",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "verify": {
          "description": "A boolean which controls whether we verify the server's TLS\ncertificate. Supported such values:\n* `True`: default value, check certificates,\n* `False`: ignore server certificates,\n* `<file path>`: path to certificate on local system,\n* `<certificate content>`: certificate content.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true
        },
        "cert": {
          "description": "Supported such values:\n* `None`: default value, ignore client certificates,\n* `<file path>`: path to certificate on local system,\n* `<certificate content>`: certificate content.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": null
        },
        "timeout": {
          "description": "Timeout value for requests.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": null
        },
        "proxies": {
          "description": "List of proxies.",
          "type": "object"
        },
        "params": {
          "description": "Template parameters. Default is empty dictionary.",
          "type": "object"
        }
      }
    },
    "restTemplateInputs": {
      "type": "object",
      "properties": {
        "params": {
          "description": "Template parameters. Default is empty dictionary. Merged\nwith params from node properties and has 'ctx' key for\ncurrent action context.",
          "type": "object"
        },
        "template_file": {
          "description": "Template path in blueprint directory",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "save_path": {
          "description": "Save result to runtime properties key. Default is directly\nsave to runtime properties.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "prerender": {
          "description": "Prerender template before run calls jinja render=>yaml parse.\nDefault is yaml parse=>jinja render.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "remove_calls": {
          "description": "Remove calls list from results. Default: save calls in\nruntime properties.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "force_rerun": {
          "description": "Rerun operation if on next operation rerun",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "retry_count": {
          "description": "Rerun count on warning on caught warnings",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 1
        },
        "retry_sleep": {
          "description": "Sleep between rerun",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 15
        }
      }
    },
    "nodeTypeCloudifyRestRequestsInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.execute"]
                },
                "inputs": {
                  "$ref": "#/definitions/restTemplateInputs"
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.execute"]
                },
                "inputs": {
                  "$ref": "#/definitions/restTemplateInputs"
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.execute"]
                },
                "inputs": {
                  "$ref": "#/definitions/restTemplateInputs"
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.execute"]
                },
                "inputs": {
                  "$ref": "#/definitions/restTemplateInputs"
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.execute"]
                },
                "inputs": {
                  "$ref": "#/definitions/restTemplateInputs"
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyRestBunchRequestsProperties": {
      "type": "object",
      "properties": {
        "hosts": {
          "description": "list of hosts name or IP addresses of Rest Servers",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "host": {
          "description": "host name or IP addresses of Rest Servers\nif list of hosts is not needed single host can be provided by this\nproperty. NOTE: the 'hosts' property overwrite the 'host' property",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "port": {
          "description": "port number. When -1 default ports are used\n(80 for ssl = false and 443 for ssl = true)",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": -1
        },
        "ssl": {
          "description": "http or https",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "verify": {
          "description": "A boolean which controls whether we verify the server's TLS\ncertificate. Supported such values:\n* `True`: default value, check certificates,\n* `False`: ignore server certificates,\n* `<file path>`: path to certificate on local system,\n* `<certificate content>`: certificate content.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": true
        },
        "cert": {
          "description": "Supported such values:\n* `None`: default value, ignore client certificates,\n* `<file path>`: path to certificate on local system,\n* `<certificate content>`: certificate content.",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": null
        },
        "timeout": {
          "description": "Timeout value for requests.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": null
        },
        "proxies": {
          "description": "List of proxies.",
          "type": "object"
        },
        "params": {
          "description": "Template parameters. Default is empty dictionary.",
          "type": "object"
        }
      }
    },
    "nodeTypeCloudifyRestBunchRequestsInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.bunch_execute"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "auth": {
                      "type": "object"
                    },
                    "templates": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.bunch_execute"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "auth": {
                      "type": "object"
                    },
                    "templates": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.bunch_execute"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "auth": {
                      "type": "object"
                    },
                    "templates": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.bunch_execute"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "auth": {
                      "type": "object"
                    },
                    "templates": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["rest.cloudify_rest.tasks.bunch_execute"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "auth": {
                      "type": "object"
                    },
                    "templates": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyNodesSecretsWriterProperties": {
      "type": "object",
      "properties": {
        "entries": {
          "type": "object"
        },
        "do_not_delete": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "variant": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "separator": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "nodeTypeCloudifyNodesSecretsWriterInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["secrets.cloudify_secrets.tasks.create"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["secrets.cloudify_secrets.tasks.delete"]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["secrets.cloudify_secrets.tasks.update"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeCloudifyNodesSecretsReaderProperties": {
      "type": "object",
      "properties": {
        "keys": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "variant": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "separator": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "nodeTypeCloudifyNodesSecretsReaderInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["secrets.cloudify_secrets.tasks.read"]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["secrets.cloudify_secrets.tasks.read"]
                }
              }
            }
          }
        }
      }
    },
    "cloudifyDataTypesAgentConfig": {
      "type": "object",
      "description": "Cloudify agent configuration schema.",
      "properties": {
        "install_method": {
          "description": "Specifies how (and if) the cloudify agent should be installed.\nValid values are:\n* none - No agent will be installed on the host.\n* remote - An agent will be installed using SSH on linux hosts and WinRM on windows hosts.\n* init_script - An agent will be installed via a script that will run on the host when it gets created.\n                This method is only supported for specific IaaS plugins.\n* plugin - An agent will be installed via a plugin which will run a script on the host.\n          This method is only supported for specific IaaS plugins.\n* provided - An agent is assumed to already be installed on the host image.\n            That agent will be configured and started via a script that will run on the host when it gets created.\n            This method is only supported for specific IaaS plugins.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "service_name": {
          "description": "Used to set the the cloudify agent service name.\n\nIf not set, the default value for the service name is:\n- Linux: 'cloudify-worker-<id>'\n- Windows: '<id>'\n\nwhere 'id' is the instance id of the compute node in which the agent is running.\n\nNote: the value in this field, takes precedence over the deprecated\n'cloudify.nodes.Compute.cloudify_agent.name'.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "network": {
          "description": "The name of the manager network to which the agent should be\nconnected. By default, the value will be `default` (which is the\nmanager's private IP, by default)",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "user": {
          "description": "For host agents, the agent will be installed for this user.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "key": {
          "description": "For host agents that are installed via SSH, this is the path to the private\nkey that will be used to connect to the host.\nIn most cases, this value will be derived automatically during bootstrap.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "password": {
          "description": "For host agents that are installed via SSH (on linux) and WinRM (on windows)\nthis property can be used to connect to the host.\nFor linux hosts, this property is optional in case the key property is properly configured\n(either explicitly or implicitly during bootstrap).\nFor windows hosts that are installed via WinRM, this property is also optional\nand depends on whether the password runtime property has been set by the relevant IaaS plugin,\nprior to the agent installation.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "port": {
          "description": "For host agents that are installed via SSH (on linux) and WinRM (on windows),\nthis is the port used to connect to the host.\nThe default values are 22 for linux hosts and 5985 for windows hosts.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "process_management": {
          "description": "Process management specific configuration. (type: dictionary)",
          "type": "object"
        },
        "min_workers": {
          "description": "Minimum number of agent workers. By default, the value will be 0.\nNote: For windows based agents, this property is ignored and min_workers is set to the value of max_workers.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "max_workers": {
          "description": "Maximum number of agent workers. By default, the value will be 5.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "heartbeat": {
          "description": "The interval of the AMQP heartbeats in seconds\nNote: the AMQP heartbeat is only used on Linux.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        },
        "disable_requiretty": {
          "description": "For linux based agents, disables the requiretty setting in the sudoers file. By default, this value will be true.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput"
        },
        "env": {
          "description": "Optional environment variables that the agent will be started with. (type: dictionary)"
        },
        "extra": {
          "description": "Optional additional low level configuration details. (type: dictionary)",
          "type": "object"
        }
      },
      "required": ["install_method"]
    },
    "openstackExternalResource": {
      "type": "object",
      "properties": {
        "use_external_resource": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "description": "Indicate whether the resource exists or if Cloudify should create the resource, true if you are bringing an existing resource, false if you want cloudify to create it.",
          "default": false
        }
      }
    },
    "openstackCreateIfMissing": {
      "type": "object",
      "properties": {
        "create_if_missing": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "description": "If use_external_resource is ``true`` and the resource is missing,create it instead of failing.",
          "default": false
        }
      }
    },
    "openstackTypeClientConfig": {
      "type": "object",
      "properties": {
        "auth_url": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Your OpenStack Client Authorization URL."
        },
        "username": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Your OpenStack username."
        },
        "password": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Your OpenStack password."
        },
        "project_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The name of your OpenStack project."
        },
        "tenant_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The name of your OpenStack tenant."
        },
        "region_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The region where you want this particular resource to be created."
        },
        "user_domain_id": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The user domain id"
        },
        "project_domain_id": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The Project domain id"
        },
        "user_domain_name": {
          "description": "Domain name to operate on.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "project_domain_name": {
          "description": "Project domain name to operate on.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "logging": {
          "description": "Logging configuration.",
          "$ref": "#/definitions/openstackTypesLogging"
        },
        "insecure": {
          "description": "If true, SSL validation is skipped.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": false
        },
        "ca_cert": {
          "description": "Path to CA certificate to validate OpenStack's endpoint with.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "kwargs": {
          "description": "A dictionary of keys and values that is not validated\nbut will override other values in the client config.",
          "type": "object"
        }
      }
    },
    "openstackTypesLogging": {
      "description": "For logging groups' configuration. Each level can be one of the following values:\ncritical/error/warning/info/debug/notset",
      "properties": {
        "openstack": {
          "description": "Default logging level for openstack component.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "openstackClientConfig": {
      "type": "object",
      "properties": {
        "client_config": {
          "description": "Your OpenStack client configuration.",
          "$ref": "#/definitions/openstackTypeClientConfig"
        }
      }
    },
    "openstackDataTypeKwargs": {
      "type": "object",
      "properties": {
        "kwargs:": {
          "type": "object",
          "description": "A dictionary of keys and values that is not validated but will override other values in the resource config."
        }
      }
    },
    "openstackDataTypeName": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Resource name.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "openstackDataTypeId": {
      "type": "object",
      "properties": {
        "id": {
          "description": "Resource id",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "openstackDataTypeDescription": {
      "type": "object",
      "properties": {
        "description": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Resource description."
        }
      }
    },
    "openstackTypesNetwork": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "admin_state_up": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "description": "The administrative state of the network, which is up (true) or down (false).",
              "default": true
            }
          }
        }
      ]
    },
    "openstackTypesSubnet": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "enable_dhcp": {
              "description": "Indicates whether dhcp is enabled or disabled for the subnet. Default is true.",
              "$ref": "#/definitions/cloudifyBooleanOrGetInput"
            },
            "network_id": {
              "description": "The ID of the network to which the subnet belongs.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "dns_nameservers": {
              "description": "List of dns name servers associated with the subnet. Default is an empty list.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "allocation_pools": {
              "description": "Allocation pools with start and end IP addresses for this subnet. If allocation_pools are not specified, OpenStack Networking automatically allocates pools for covering all IP addresses in the CIDR, excluding the address reserved for the subnet gateway by default.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "host_routes": {
              "description": "Additional routes for the subnet. A list of dictionaries with destination and nexthop parameters. Default value is an empty list.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ip_version": {
              "description": "The IP protocol version. Value is 4 or 6.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "gateway_ip": {
              "description": "Gateway IP of this subnet. If the value is null that implies no gateway is associated with the subnet. If the gateway_ip is not specified, OpenStack Networking allocates an address from the CIDR for the gateway for the subnet by default.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "cidr": {
              "description": "The CIDR of the subnet.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "prefixlen": {
              "description": "The prefix length to use for subnet allocation from a subnet pool. If not specified, the default_prefixlen value of the subnet pool will be used.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "ipv6_address_mode": {
              "description": "The IPv6 address modes specifies mechanisms for assigning IP addresses. Value is slaac, dhcpv6-stateful, dhcpv6-stateless.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "ipv6_ra_mode": {
              "description": "The IPv6 router advertisement specifies whether the networking service should transmit ICMPv6 packets, for a subnet. Value is slaac, dhcpv6-stateful, dhcpv6-stateless.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesPort": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "allowed_address_pairs": {
              "description": "A set of zero or more allowed address pair objects each where address pair object contains an ip_address and mac_address. While the ip_address is required, the mac_address will be taken from the port if not specified. The value of ip_address can be an IP Address or a CIDR (if supported by the underlying extension plugin). A server connected to the port can send a packet with source address which matches one of the specified allowed address pairs.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "device_id": {
              "description": "The ID of the device that uses this port. For example, a server instance or a logical router.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "device_owner": {
              "description": "The entity type that uses this port. For example, compute:nova (server instance), network:dhcp (DHCP agent) or network:router_interface (router interface).",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "fixed_ips": {
              "description": "list.\nThe IP addresses for the port. If you would like to assign multiple IP addresses for the port, specify multiple entries in this field. Each entry consists of IP address (ip_address) and the subnet ID from which the IP address is assigned (subnet_id).\n- If you specify both a subnet ID and an IP address, OpenStack Networking tries to allocate the IP address on that subnet to the port.\n- If you specify only a subnet ID, OpenStack Networking allocates an available IP from that subnet to the port.\n- If you specify only an IP address, OpenStack Networking tries to allocate the IP address if the address is a valid IP for any of the subnets on the specified network.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "network_id": {
              "description": "The ID of the network to which the subnet belongs.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "security_groups": {
              "description": "list. The IDs of security groups applied to the port.",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      ]
    },
    "openstackTypesRouter": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        }
      ]
    },
    "openstackTypesFloatingIP": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "floating_network_id": {
              "description": "The ID of the network associated with the floating IP.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "floating_network_name": {
              "description": "The Name of the network associated with the floating IP.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "fixed_ip_address": {
              "description": "The fixed IP address that is associated with the floating IP. If an internal port has multiple associated IP addresses, the service chooses the first IP address unless you explicitly define a fixed IP address in the fixed_ip_address parameter.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "floating_ip_address": {
              "description": "The floating IP address.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "port_id": {
              "description": "The ID of a port associated with the floating IP. To associate the floating IP with a fixed IP at creation time, you must specify the identifier of the internal port.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "subnet_id": {
              "description": "The subnet ID on which you want to create the floating IP.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "dns_domain": {
              "description": "A valid DNS domain.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "dns_name": {
              "description": "A valid DNS name.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesSecurityGroup": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        }
      ]
    },
    "openstackTypesSecurityGroupRule": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "remote_group_id": {
              "description": "The remote group UUID to associate with this security group rule. You can specify either the remote_group_id or remote_ip_prefix attribute in the request body.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "protocol": {
              "description": "The IP protocol of the security group rule.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "direction": {
              "description": "Ingress or egress, which is the direction in which the security group rule is applied.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "port_range_min": {
              "description": " The minimum port number in the range that is matched by the security group rule. If the protocol is TCP, UDP, DCCP, SCTP or UDP-Lite this value must be less than or equal to the port_range_max attribute value. If the protocol is ICMP, this value must be an ICMP type.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "port_range_max": {
              "description": "The maximum port number in the range that is matched by the security group rule. If the protocol is TCP, UDP, DCCP, SCTP or UDP-Lite this value must be greater than or equal to the port_range_min attribute value. If the protocol is ICMP, this value must be an ICMP type.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "security_group_id": {
              "description": "The security group ID to associate with this security group rule.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "remote_ip_prefix": {
              "description": "The remote IP prefix that is matched by this security group rule.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesKeyPair": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "public_key": {
              "description": "The public ssh key to import. If you omit this value,\na keypair is generated for you",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesHostAggregate": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "availability_zone": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "description": "The name of the host aggregate."
            }
          }
        }
      ]
    },
    "openstackTypesImage": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "container_format": {
              "description": "Format of the image container.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "disk_format": {
              "description": "The format of the disk.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "tags": {
              "description": "List of tags for this image. Each tag is a string of at most 255 chars.\nThe maximum number of tags allowed on an image is set by the operator.",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      ]
    },
    "openstackTypesFlavor": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "ram": {
              "description": "The amount of RAM a flavor has, in MiB",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "disk": {
              "description": "The size of the root disk that will be created in GiB.\nIf 0 the root disk will be set to exactly the size of the image used\nto deploy the instance. However, in this case filter scheduler cannot\nselect the compute host based on the virtual image size.\nTherefore, 0 should only be used for volume booted instances or for testing purposes.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "vcpus": {
              "description": "The number of virtual CPUs that will be allocated to the server.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesUser": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "default_project_id": {
              "description": "The ID of the default project for the user.\nA user's default project must not be a domain.\nSetting this attribute does not grant any actual authorization\non the project, and is merely provided for convenience.\nTherefore, the referenced project does not need to exist within the user domain. Since v3.1.\nIf the user does not have authorization to their default project,\nthe default project is ignored at token creation. Since v3.1.\nAdditionally, if your default project is not valid, a token is issued without an explicit scope of authorization",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "domain_id": {
              "description": "The ID of the domain of the user. If the domain ID is not provided\nin the request, the Identity service will attempt to pull the\ndomain ID from the token used in the request.Note that this requires the use of a domain-scoped token.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "enabled": {
              "description": "If the user is enabled, this value is true. If the user is disabled, this value is false",
              "$ref": "#/definitions/cloudifyBooleanOrGetInput"
            },
            "password": {
              "description": "The password for the user.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "email": {
              "description": "The email for the user.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesGroup": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "domain_id": {
              "description": "The ID of the domain of the group. If the domain ID is not provided\nin the request, the Identity service will attempt to pull the\ndomain ID from the token used in the request.Note that this requires the use of a domain-scoped token.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesRole": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "domain_id": {
              "description": "The ID of the domain of the role. If the domain ID is not provided\nin the request, the Identity service will attempt to pull the\ndomain ID from the token used in the request.Note that this requires the use of a domain-scoped token.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesProject": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "is_domain": {
              "description": "Indicates whether the project also acts as a domain.\nIf set to true, this project acts as both a project and domain.",
              "$ref": "#/definitions/cloudifyBooleanOrGetInput"
            },
            "domain_id": {
              "description": "The ID of the domain for the project.\nFor projects acting as a domain, the domain_id must not be specified, it will be generated by the Identity service implementation.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "parent_id": {
              "description": "The ID of the parent of the project..",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "tags": {
              "description": "A list of simple strings assigned to a project. Tags can be used to classify projects into groups.",
              "type": "object",
              "items": {
                "type": "string"
              }
            }
          }
        }
      ]
    },
    "openstackTypesVolume": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "project_id": {
              "description": "The UUID of the project in a multi-tenancy cloud.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "size": {
              "description": "The size of the volume, in gibibytes (GiB).",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "availability_zone": {
              "description": "The name of the availability zone.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "imageRef": {
              "description": "The UUID of the image from which you want to create the volume.\nRequired to create a bootable volume.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "snapshot_id": {
              "description": "To create a volume from an existing snapshot,\nspecify the UUID of the volume snapshot.\nThe volume is created in same availability zone and with same size as the snapshot.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "volume_type": {
              "description": "The volume type (either name or ID).\nTo create an environment with multiple-storage back ends, you\nmust specify a volume type. Block Storage volume back ends are\nspawned as children to cinder- volume, and they are keyed from a\nunique queue. They are named cinder- volume.HOST.BACKEND. For\nexample, cinder- volume.ubuntu.lvmdriver. When a volume is\ncreated, the scheduler chooses an appropriate back end to handle\nthe request based on the volume type. Default is None. For\ninformation about how to use volume types to create multiple-\nstorage back ends,",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "openstackTypesVolumeType": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "project_id": {
              "description": "The UUID of the project in a multi-tenancy cloud..",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "extra_specs": {
              "description": "A key and value pair that contains additional specifications\nthat are associated with the volume type.\nExamples include capabilities, capacity, compression,\nand so on, depending on the storage driver in use.",
              "type": "object"
            }
          }
        }
      ]
    },
    "openstackTypesZoneType": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "ttl": {
              "description": "TTL (Time to Live) for the zone.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "email": {
              "description": "e-mail for the zone. Used in SOA records for the zone",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "type": {
              "description": "Type of zone. PRIMARY is controlled by Designate,\nSECONDARY zones are slaved from another DNS Server.\nDefaults to PRIMARY",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "masters": {
              "description": "Mandatory for secondary zones.\nThe servers to slave from to get DNS information",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "attributes": {
              "description": "Key:Value pairs of information about this zone,nand the pool the user would like to place the zone in.\nThis information can be used by the scheduler to placenzones on the correct pool.",
              "type": "object"
            }
          }
        }
      ]
    },
    "openstackRecordSetType": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "ttl": {
              "description": "TTL (Time to Live) for the recordset.",
              "$ref": "#/definitions/cloudifyIntegerOrGetInput"
            },
            "zone_id": {
              "description": "ID for the zone",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "type": {
              "description": "They RRTYPE of the recordset.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "records": {
              "description": "A list of data for this recordset.\nEach item will be a separate record in Designate\nThese items should conform to the DNS spec for\nthe record type - e.g. A records must be IPv4 addresses,\nCNAME records must be a hostname.",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "required": ["zone_id", "records"]
        }
      ]
    },
    "nodeTypeOpenstackNetworkBaseProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        }
      ]
    },
    "nodeTypeOpenstackNetworkProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeOpenstackNetworkBaseProperties"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesNetwork",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-network."
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackNetworkInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.network.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.network.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.network.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.network.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.network.list_networks"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackSubnetProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeOpenstackNetworkBaseProperties"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesSubnet",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-subnet. This is not a list of cloudify."
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackSubnetInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.subnet.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.subnet.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.subnet.creation_validation"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.subnet.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.subnet.list_subnets"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackPortProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "fixed_ip": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "description": "may be used to request a specific fixed IP for the port.\nIf the IP is unavailable\n(either already taken or does not belong to a subnet the port is on)\nan error will be raised."
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesPort",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-port."
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackPortInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.port.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.port.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.port.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.port.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.port.list_ports"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackRouterProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesRouter",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-router."
            },
            "external_network": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "description": "An external network name or ID.\nIf given, the router will use this external network as a gateway."
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackRouterInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.create"
                  ]
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.start"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "routes": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.stop"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.router.list_routers"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackFloatingIPProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "allow_reallocation": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": false,
              "description": "(Applicable only when use_external_resource is true)\nIf true, then allow using this floating IP even if it has already been allocated to\nanother instance. If false, and the floating IP is already allocated (that is, it is\nin 'ACTIVE' state), a recoverable error is raised."
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesFloatingIP",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-floating-ip."
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackFloatingIPInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.floating_ip.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.floating_ip.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.floating_ip.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.floating_ip.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.floating_ip.list_floating_ips"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackSecurityGroupProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "disable_default_egress_rules": {
              "description": "a flag for removing the default rules. If not set to `true`,\nthese rules will remain, and exist alongside any additional rules passed using the `rules` property.",
              "$ref": "#/definitions/cloudifyBooleanOrGetInput"
            },
            "security_group_rules": {
              "description": "List of security groups rule.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesSecurityGroup",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-security-group."
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackSecurityGroupInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.security_group.create"
                  ]
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.security_group.configure"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "security_group_rules": {
                      "type": ["array", "object"],
                      "default": {
                        "get_property": ["SELF", "security_group_rules"]
                      }
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.security_group.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.security_group.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.security_group.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.network.security_group.list_security_groups"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackSecurityGroupRuleProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeOpenstackSecurityGroupProperties"
        },
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesSecurityGroupRule",
              "description": "A dictionary that may contain these keys https://developer.openstack.org/api-ref/network/v2/#create-security-group-rule"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackSecurityGroupRuleInterfaces": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeOpenstackSecurityGroupInterfaces"
        },
        {
          "properties": {
            "cloudify.interfaces.lifecycle": {
              "type": "object",
              "properties": {
                "create": {
                  "type": "object",
                  "properties": {
                    "implementation": {
                      "type": "string",
                      "enum": [
                        "openstack.openstack_plugin.resources.network.security_group_rule.create"
                      ]
                    }
                  }
                },
                "delete": {
                  "type": "object",
                  "properties": {
                    "implementation": {
                      "type": "string",
                      "enum": [
                        "openstack.openstack_plugin.resources.network.security_group_rule.delete"
                      ]
                    }
                  }
                }
              }
            },
            "cloudify.interfaces.validation": {
              "type": "object",
              "properties": {
                "creation": {
                  "type": "object",
                  "properties": {
                    "implementation": {
                      "type": "string",
                      "enum": [
                        "openstack.openstack_plugin.resources.network.security_group_rule.creation_validation"
                      ]
                    }
                  }
                }
              }
            },
            "cloudify.interfaces.operations": {
              "type": "object",
              "properties": {
                "list": {
                  "type": "object",
                  "properties": {
                    "implementation": {
                      "type": "string",
                      "enum": [
                        "openstack.openstack_plugin.resources.network.security_group_rule.list_security_group_rules"
                      ]
                    },
                    "inputs": {
                      "type": "object",
                      "properties": {
                        "query": {
                          "type": "object"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ]
    },
    "nodeTypeOpenstackRBACPolicyProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "properties": {
            "target_tenant": {
              "description": "The ID of the tenant to which the RBAC policy will be enforced.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "object_type": {
              "description": "The type of the object that the RBAC policy affects.\nTypes include qos-policy or network.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "object_id": {
              "description": "The ID of the object_type resource. An object_type of\nnetwork returns a network ID and an object_type of qos-policy returns a QoS ID.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "action": {
              "description": "Action for the RBAC policy which is access_as_external or access_as_shared.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "nodeTypeOpenstackServerProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackDataTypeKwargs"
        },
        {
          "$ref": "#/definitions/openstackDataTypeName"
        },
        {
          "$ref": "#/definitions/openstackDataTypeId"
        },
        {
          "$ref": "#/definitions/openstackDataTypeDescription"
        },
        {
          "properties": {
            "image_id": {
              "description": "The UUID of the image to use for your server instance.\nThis is not required in case of boot from volume.\nIn all other cases it is required\nand must be a valid UUID otherwise API will return 400",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "flavor_id": {
              "description": "The flavor reference, as an ID (including a UUID) or\nfull URL, for the flavor for your server instance.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "availability_zone": {
              "description": "The availability zone from which to launch the server.\nWhen you provision resources, you specify from which availability\nzone you want your instance to be built. Typically,\nan admin user will use availability zones to arrange\nOpenStack compute hosts into logical groups.\nAn availability zone provides a form of physical isolation\nand redundancy from other availability zones.\nFor instance, if some racks in your data center are\non a separate power source, you can put servers in those racks\nin their own availability zone. Availability zones can\nalso help separate different classes of hardware.\nBy segregating resources into availability zones,\nyou can ensure that your application resources are spread across\ndisparate machines to achieve high availability\nin the event of hardware or other failure.\nYou can list the available availability zones\nby calling the os-availability-zone API,\nbut you should avoid using the default availability zone when\nbooting the instance. In general,\nthe default availability zone is named nova.\nThis AZ is only shown when listing the availability zones as an admin",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "user_data": {
              "description": "Configuration information or scripts to use upon launch.\nMust be Base64 encoded. Restricted to 65535 bytes.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "metadata": {
              "description": "Metadata key and value pairs.\nThe maximum size of the metadata key and value is 255 bytes each.",
              "type": "object"
            },
            "security_groups": {
              "description": "One or more security groups.\nSpecify the name of the security group in the name attribute.\nIf you omit this attribute, the API creates the server\nin the default security group. Requested security groups are not\napplied to pre-existing ports",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "networks": {
              "description": "A list of network object.\nRequired parameter when there are multiple networks\ndefined for the tenant. When you do not specify the networks parameter,\nthe server attaches to the only network created for the current tenant.",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "key_name": {
              "description": "Key pair name.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      ]
    },
    "nodeTypeOpenstackWindowsServerProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeOpenstackServerProperties"
        },
        {
          "properties": {
            "os_family": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "default": "windows",
              "description": "updates the os_family default as a convenience"
            },
            "agent_config": {
              "$ref": "#/definitions/cloudifyDataTypesAgentConfig",
              "default": {
                "port": 5985
              },
              "description": "updates the defaults for the agent_config for Windows)"
            }
          }
        }
      ]
    },
    "nodeTypeOpenstackKeyPairProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesKeyPair",
              "description": "https://developer.openstack.org/api-ref/compute/?expanded=create-or-import-keypair-detail"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackKeyPairInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.keypair.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.keypair.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.keypair.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.keypair.list_keypairs"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackHostAggregateProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "metadata": {
              "type": "object",
              "description": "Metadata key and value pairs. The maximum size for each metadata key and value pair is 255 bytes\nAll keys values should be provided as string\nExample\nmetadata:\n  ssd: 'True'\n  max_number: '1233'"
            },
            "hosts": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "list of hosts IDs, which will be a members of host aggregate"
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesHostAggregate",
              "description": "https://developer.openstack.org/api-ref/compute/?expanded=create-aggregate-detail"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackHostAggregateInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.create"
                  ]
                }
              }
            },
            "configure": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.configure"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "object",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.list_aggregates"
                  ]
                }
              }
            },
            "add_hosts": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.add_hosts"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "hosts": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            },
            "remove_hosts": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.host_aggregate.remove_hosts"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "hosts": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackImageProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "image_url": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "description": "The openstack resource URL for the image."
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesImage",
              "description": "https://developer.openstack.org/api-ref/image/v2/index.html?expanded=show-image-detail,create-image-detail#create-image"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackImageInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.image.create"
                  ]
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.image.start"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.image.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.image.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.image.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.image.list_images"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackFlavorProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesFlavor",
              "description": "https://developer.openstack.org/api-ref/compute/?expanded=create-flavor-detail"
            },
            "extra_specs": {
              "type": "object",
              "description": "key-value user configuration, according to:\nhttps://developer.openstack.org/api-ref/compute/#create-extra-specs-for-a-flavor"
            },
            "tenants": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "List of tenants to add to flavor access"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackFlavorInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.flavor.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.flavor.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.flavor.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.compute.flavor.list_flavors"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    },
                    "details": {
                      "type": "boolean",
                      "default": true
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackUserProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesUser",
              "description": "https://developer.openstack.org/api-ref/identity/v3/?expanded=update-user.yaml-detail,create-user.yaml-detail,update-project-detail#users"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackUserInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.user.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.user.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.user.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.user.list_users"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackGroupProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesGroup",
              "description": "https://docs.openstack.org/api-ref/identity/v3/?expanded=update-user.yaml-detail,create-user.yaml-detail,update-project-detail#groups"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackGroupInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.group.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.group.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.group.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.group.list_groups"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackRoleProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesRole",
              "description": "https://docs.openstack.org/api-ref/identity/v3/?expanded=update-project-detail,create-group-detail#roles"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackRoleInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.role.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.role.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.role.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.role.list_roles"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackProjectProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "groups": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "List of groups assigned to this project in the following format:\n  { name: string, roles: [string] }"
            },
            "users": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "List of users assigned to this project in the following format:\n  { name: string, roles: [string] }"
            },
            "quota": {
              "type": "object",
              "description": "A dictionary mapping service names to quota definitions for a project\ne.g:\n  quota:\n    compute: <quota>\n    network: <quota>\n    volume: <quota>"
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesProject",
              "description": "https://developer.openstack.org/api-ref/identity/v3/?expanded=update-user.yaml-detail,create-user.yaml-detail,update-project-detail#projects"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackProjectInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.create"
                  ]
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.start"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "quota_dict": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "update_project": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.update"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "get_quota": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.get_project_quota"
                  ]
                }
              }
            },
            "update_quota": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.update_project_quota"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "quota": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.identity.project.list_projects"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "string",
              "enum": [
                "openstack.openstack_plugin.resources.identity.project.creation_validation"
              ]
            }
          }
        }
      }
    },
    "nodeTypeOpenstackVolumeProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "device_name": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "default": "auto",
              "description": "The device name this volume will be attached to.\nDefault value is *auto*,\nwhich means openstack will auto-assign a device.\nNote that if you do explicitly set a value,\nthis value may not be the actual device name assigned.\nSometimes the device requested will not be available and openstack will assign it to a different device,n\this is why we recommend using *auto*."
            },
            "resource_config": {
              "$ref": "#/definitions/openstackTypesVolume",
              "description": "https://developer.openstack.org/api-ref/block-storage/v2/index.html?expanded=create-volume-detail#volumes-volumes"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackVolumeInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.create"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "args": {
                      "type": "object"
                    }
                  }
                }
              }
            },
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.start"
                  ]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.delete"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.snapshot": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.snapshot_create"
                  ]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "apply": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.snapshot_apply"
                  ]
                },
                "inputs": {
                  "type": "object"
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.snapshot_delete"
                  ]
                },
                "inputs": {
                  "type": "object"
                }
              }
            }
          }
        },
        "cloudify.interfaces.validation": {
          "type": "object",
          "properties": {
            "creation": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.creation_validation"
                  ]
                }
              }
            }
          }
        },
        "cloudify.interfaces.operations": {
          "type": "object",
          "properties": {
            "list": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume.list_volumes"
                  ]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "query": {
                      "type": "object"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackVolumeTypeProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackExternalResource"
        },
        {
          "$ref": "#/definitions/openstackCreateIfMissing"
        },
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesVolumeType",
              "description": "https://developer.openstack.org/api-ref/block-storage/v3/index.html?expanded=create-a-volume-type-detail#volume-types-types"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeOpenstackVolumeTypeInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume_type.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.volume.volume_type.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackZoneProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackTypesZoneType",
              "description": "https://docs.openstack.org/api-ref/dns/?expanded=create-zone-detail"
            }
          }
        }
      ]
    },
    "nodeTypeOpenstackZoneInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.dns_service.zone.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.dns_service.zone.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeOpenstackRecordSetProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/openstackClientConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/openstackRecordSetType",
              "description": "https://docs.openstack.org/api-ref/dns/?expanded=create-zone-detail"
            }
          }
        }
      ]
    },
    "nodeTypeOpenstackRecordSetInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.dns_service.record_set.create"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "openstack.openstack_plugin.resources.dns_service.record_set.delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "ansiblePlaybookConfig": {
      "type": "object",
      "properties": {
        "ansible_playbook_executable_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "ansible-playbook",
          "description": "A full path to your ansible_playbook executable if user don't want to\nuse the included version of executable in the plugin"
        },
        "playbook_source_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "A full path/URL that contain playbook specified in playbook_path\nor site_yaml_path."
        },
        "playbook_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "A path to your `site.yaml` or `main.yaml` in your\nAnsible Playbook relative to blueprint or playbook_source_path\nif playbook_source_path is URL to archive File relative inside the archive."
        },
        "site_yaml_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "DEPRECATED.\nA path to your `site.yaml` or `main.yaml` in your\nAnsible Playbook relative to blueprint or playbook_source_path\nif playbook_source_path is URL to archive File relative inside the archive."
        },
        "additional_playbook_files": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "A list of string paths blueprint resources that you\nwould like to download to the playbook directory.\nIf you use this variable, you must list all of the paths\nthat you expect to download."
        },
        "sources": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Your Inventory sources. Either YAML or a path to a file.\nIf not provided the inventory will be take from the `sources`\nruntime property."
        },
        "run_data": {
          "type": "object",
          "description": "Variable values."
        },
        "sensitive_keys": {
          "description": "keys that you want us to obscure",
          "type": "array",
          "items": {
            "type": "string"
          },
          "default": "ansible_password"
        },
        "options_config": {
          "type": "object",
          "description": "Command-line options, such as `tags` or `skip_tags`."
        },
        "ansible_env_vars": {
          "type": "object",
          "description": "A dictionary of environment variables to set.",
          "properties": {
            "ANSIBLE_HOST_KEY_CHECKING": {
              "type": "boolean",
              "default": false
            },
            "ANSIBLE_INVALID_TASK_ATTRIBUTE_FAILED": {
              "type": "boolean",
              "default": false
            }
          }
        },
        "debug_level": {
          "$ref": "#/definitions/cloudifyIntegerOrGetInput",
          "default": 2,
          "description": "Debug level"
        },
        "additional_args": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Additional args that you want to use, for example, '-c local'."
        },
        "start_at_task": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Start the playbook at the task matching this name"
        },
        "scp_extra_args": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specify extra arguments to pass to scp only (e.g. -l)"
        },
        "sftp_extra_args": {
          "description": "Specify extra arguments to pass to sftp only (e.g. -f, -l)",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "ssh_common_args": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "Specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)"
        },
        "ssh_extra_args": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Specify extra arguments to pass to ssh only (e.g. -R)"
        },
        "timeout": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Override the connection timeout in seconds (default=10)",
          "default": 10
        },
        "save_playbook": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "Save playbook after action",
          "default": false
        },
        "remerge_sources": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "update sources on target node",
          "default": "false"
        },
        "ansible_become": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "A boolean value, `true` or `false` whether\nto assume the user privileges.",
          "default": false
        }
      }
    },
    "ansiblePlaybookInputs": {
      "type": "object",
      "properties": {
        "ansible_playbook_executable_path": {
          "type": ["string", "object"],
          "default": {
            "get_property": ["SELF", "ansible_playbook_executable_path"]
          }
        },
        "playbook_source_path": {
          "type": ["string", "object"],
          "default": {
            "get_property": ["SELF", "playbook_source_path"]
          }
        },
        "playbook_path": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "playbook_path"]
          }
        },
        "site_yaml_path": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "site_yaml_path"]
          }
        },
        "save_playbook": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "save_playbook"]
          }
        },
        "remerge_sources": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "remerge_sources"]
          }
        },
        "sources": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "sources"]
          }
        },
        "run_data": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "run_data"]
          }
        },
        "sensitive_keys": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "sensitive_keys"]
          }
        },
        "options_config": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "options_config"]
          }
        },
        "ansible_env_vars": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "ansible_env_vars"]
          }
        },
        "debug_level": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "debug_level"]
          }
        },
        "additional_args": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "additional_args"]
          }
        },
        "start_at_task": {
          "type": "string",
          "default": {
            "get_property": ["SELF", "start_at_task"]
          }
        },
        "scp_extra_args": {
          "type": "string",
          "default": {
            "get_attribute": ["SELF", "scp_extra_args"]
          }
        },
        "sftp_extra_args": {
          "type": "string",
          "default": {
            "get_attribute": ["SELF", "sftp_extra_args"]
          }
        },
        "ssh_common_args": {
          "type": "string",
          "default": {
            "get_attribute": ["SELF", "ssh_common_args"]
          }
        },
        "ssh_extra_args": {
          "type": "string",
          "default": {
            "get_attribute": ["SELF", "ssh_extra_args"]
          }
        },
        "timeout": {
          "type": "string",
          "default": {
            "get_attribute": ["SELF", "timeout"]
          }
        }
      }
    },
    "nodeTypeAnsibleExecutorProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ansiblePlaybookConfig"
        }
      ]
    },
    "nodeTypeAnsibleExecutorInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["ansible.cloudify_ansible.tasks.run"]
                },
                "inputs": {
                  "$ref": "#/definitions/ansiblePlaybookInputs"
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["ansible.cloudify_ansible.tasks.cleanup"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeTerraformDirectoryConfig": {
      "type": "object",
      "properties": {
        "executable_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "The path to the terraform binary executable.",
          "default": "/usr/bin/terraform"
        },
        "storage_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Directory to store downloaded Terraform templates. The directory must\neither already exist and be writable by 'cfyuser', or alternatively\nbe create-able by 'cfyuser'.\nThe default is an empty string, which prompts the plugin to use the OS\ntemporary directory."
        },
        "plugins_dir": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Location where Terraform plugins are located. If a value is provided, then\nthe Terraform plugin uses '--plugin-dir' with that value, ensuring that\nno plugins are downloaded on-the-fly, for increased stability.\nIf a value is not provided, plugins will be downloaded on-the-fly. This is\nnot recommended in production environments."
        }
      }
    },
    "terraformConfig": {
      "$ref": "#/definitions/nodeTypeTerraformDirectoryConfig",
      "description": "Terraform directories for executions."
    },
    "terraformTypesBackend": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Some name."
        },
        "options": {
          "type": "object",
          "description": "Should be a dictionary of key/values."
        }
      }
    },
    "terraformTypesRootModule": {
      "type": "object",
      "properties": {
        "source": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Path or URL to the ZIP file containing the Terraform project.\nIf this is a path, then it must be relative to the blueprint's root."
        },
        "backend": {
          "$ref": "#/definitions/terraformTypesBackend",
          "description": "If a backend is not defined in source,\nand you want to use a specific backend, define that here."
        },
        "variables": {
          "type": "object",
          "description": "A dictionary of variables."
        },
        "environment_variables": {
          "type": "object",
          "description": "A dictionary of environment variables."
        }
      },
      "required": ["source"]
    },
    "nodeTypeTerraformInstallConfig": {
      "type": "object",
      "properties": {
        "use_existing_resource": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "If true, use an existing Terraform installation rather than installing it",
          "default": true
        },
        "installation_source": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Location to download the Terraform installation from. Ignored if 'use_existing' is true."
        },
        "plugins": {
          "description": "List of plugins to download and install.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": ["use_existing_resource"]
    },
    "nodeTypeTerraformProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/terraformConfig"
        },
        {
          "properties": {
            "resource_config": {
              "$ref": "#/definitions/nodeTypeTerraformInstallConfig"
            }
          },
          "required": ["resource_config"]
        }
      ]
    },
    "nodeTypeTerraformInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["tf.cloudify_tf.tasks.install"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["tf.cloudify_tf.tasks.uninstall"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeTerraformModuleProperties": {
      "type": "object",
      "properties": {
        "resource_config": {
          "$ref": "#/definitions/terraformTypesRootModule"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeTerraformModuleInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["tf.cloudify_tf.tasks.apply"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["tf.cloudify_tf.tasks.destroy"]
                }
              }
            }
          }
        },
        "terraform": {
          "type": "object",
          "properties": {
            "reload": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["tf.cloudify_tf.tasks.reload_template"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "source": {
                      "description": "URL or path to a ZIP/tar.gz file or a Git repository to obtain\nnew module source from. If omitted, then the module is reloaded\nfrom its last location.",
                      "type": "string"
                    },
                    "destroy_previous": {
                      "type": "boolean",
                      "description": "If true, then the plugin destroys the existing Terraform\ntopology before applying the new one.",
                      "default": false
                    }
                  }
                }
              }
            },
            "refresh": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["tf.cloudify_tf.tasks.state_pull"]
                }
              }
            }
          }
        }
      }
    },
    "kubernetesTypesConfigurationVariant": {
      "type": "object",
      "description": "Type representing all Kubernetes API configuration variants.\nEach property represents separate supported variant of configuration.\nYou should choose one variant and fill in only on property.",
      "properties": {
        "blueprint_file_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of Kubernetes configuration file attached to blueprint"
        },
        "manager_file_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Path to Kubernetes configuration file placed on Cloudify Manager VM"
        },
        "file_content": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Content (YAML) of Kubernetes configuration file"
        },
        "api_options": {
          "type": "object",
          "description": "Set of basic properties describing Kubernetes API access",
          "properties": {
            "host": {
              "$ref": "#/definitions/cloudifyStringOrGetInput",
              "description": "HTTP/HTTPS URL to Kubernetes API"
            },
            "ssl_ca_cert": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "cert_file": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "key_file": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "verify_ssl": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput"
            },
            "api_key": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "debug": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput"
            }
          }
        }
      }
    },
    "kubernetesTypesAuthenticationVariant": {
      "type": "object",
      "description": "Type representing all authentication variants\nfor different Kubernetes cloud providers.\nEach property represents separate supported variant of authentication.\nYou should choose one variant and fill in only on property.",
      "properties": {
        "gcp_service_account": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "(JSON) Content of Google Cloud Platform Service Account file"
        }
      }
    },
    "kubernetesTypesClientConfig": {
      "type": "object",
      "description": "Configuration properties of kubernetes API and\nauthentication properties of Kubernetes Cloud providers.",
      "properties": {
        "configuration": {
          "description": "Configuration properties of Kubernetes API. One of four configuration options can be used\n1. Kubernetes config file contained by blueprint archive\n2. Kubernetes config file previously uploaded into Cloudify Manager VM\n3. Content of Kubernetes config file (YAML)\n4. Kubernetes API set o properties",
          "$ref": "#/definitions/kubernetesTypesConfigurationVariant"
        },
        "authentication": {
          "description": "Authentication properties of Kubernetes Cloud providers. Optional.\nCurrently supported providers: Google Cloud Platform.",
          "$ref": "#/definitions/kubernetesTypesAuthenticationVariant"
        }
      }
    },
    "kubernetesTypesAbstractResource": {
      "type": "object",
      "description": "Type defining common base structure for any Kubernetes resource\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "properties": {
        "apiVersion": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Kubernetes API version as a string",
          "default": "v1"
        },
        "kind": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "metadata": {
          "type": "object"
        }
      },
      "required": ["kind"]
    },
    "kubernetesTypesRoleBindingDefinitio": {
      "description": "Type defining single Kubernetes resource e.g. Pod, Service, ...\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        },
        {
          "properties": {
            "roleRef": {
              "description": "RoleRef can only reference a ClusterRole in the global namespace.\nIf the RoleRef cannot be resolved, the Authorizer must return an error.",
              "type": "object"
            },
            "subjects": {
              "description": "Subjects holds references to the objects the role applies to.",
              "type": "array",
              "items": {
                "$ref": "#/definitions/cloudifyStringOrGetInput"
              }
            }
          }
        }
      ]
    },
    "kubernetesTypesRoleDefinitio": {
      "type": "object",
      "description": "Type defining single Kubernetes resource e.g. Role, ...\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        },
        {
          "properties": {
            "rules": {
              "type": "array",
              "description": "Rules holds all the PolicyRules for this Role.",
              "items": {
                "$ref": "#/definitions/cloudifyStringOrGetInput"
              }
            }
          }
        }
      ]
    },
    "kubernetesTypesClusterRoleDefinitio": {
      "type": "object",
      "description": "Type defining single Kubernetes resource e.g. ClusterRole, ...\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        }
      ]
    },
    "kubernetesTypesSecretDefinition": {
      "type": "object",
      "description": "Secret holds secret data of a certain type.\nThe total bytes of the values in the Data field must be less than MaxSecretSize bytes",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        },
        {
          "properties": {
            "type": {
              "description": "Used to facilitate programmatic handling of secret data.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "data": {
              "description": "Data contains the secret data.",
              "type": "object"
            },
            "stringData": {
              "description": "stringData allows specifying non-binary secret data in string form.\nIt is provided as a write-only convenience method.\nAll keys and values are merged into the data field on write,\noverwriting any existing values. It is never output when reading from the API..",
              "type": "object"
            }
          }
        }
      ]
    },
    "kubernetesTypesServiceAccountDefinition": {
      "type": "object",
      "description": "ServiceAccount binds together: a name, understood by users,\nand perhaps by peripheral systems, for an identity a principal\nthat can be authenticated and authorized * a set of secrets",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        },
        {
          "properties": {
            "automountServiceAccountToken": {
              "description": "AutomountServiceAccountToken indicates whether pods running\nas this service account should have an API token automatically mounted.\nCan be overridden at the pod level..",
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": false
            },
            "imagePullSecrets": {
              "description": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images\nin pods that reference this ServiceAccount. ImagePullSecrets are distinct\nfrom Secrets because Secrets can be mounted in the pod,\nbut ImagePullSecrets are only accessed by the kubelet",
              "type": "array",
              "items": {
                "$ref": "#/definitions/cloudifyStringOrGetInput"
              }
            },
            "secrets": {
              "description": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount.",
              "type": "array",
              "items": {
                "$ref": "#/definitions/cloudifyStringOrGetInput"
              }
            }
          }
        }
      ]
    },
    "kubernetesTypesResourceDefinition": {
      "description": "Type defining single Kubernetes resource e.g. Pod, Service, ...\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        },
        {
          "properties": {
            "spec": {
              "description": "Kubernetes resource object specification",
              "type": "object"
            }
          }
        }
      ]
    },
    "kubernetesTypesConfigClassResourceDefinition": {
      "description": "Type defining Kubernetes resource for storing data.\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesResourceDefinition"
        },
        {
          "properties": {
            "data": {
              "description": "Contains data to store in ConfigMap, Secret..",
              "type": "object"
            }
          }
        }
      ]
    },
    "kubernetesTypesStorageClassResourceDefinition": {
      "description": "Type defining single Kubernetes resource e.g. StorageClass\nIt is some kind of wrapper for native Kubernetes YAML definition",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/kubernetesTypesAbstractResource"
        },
        {
          "properties": {
            "parameters": {
              "description": "Additional parameters for object creation",
              "type": "object"
            },
            "provisioner": {
              "description": "Class provisioner for object creation",
              "type": "object"
            }
          }
        }
      ]
    },
    "kubernetesTypesApiMappingEntry": {
      "description": "Type defining python Kubernetes API objects and methods definitions for particular operation",
      "type": "object",
      "properties": {
        "api": {
          "description": "Name of python Kubernetes API object which will be used to as request for particular operation type",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "method": {
          "description": "Method name of python Kubernetes API object which will be used as request for particular operation type",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "payload": {
          "description": "Name of python Kubernetes API object which will be used as request data for particular operation type",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      },
      "required": ["api", "method"]
    },
    "kubernetesTypesApiMapping": {
      "description": "Type containing python Kubernetes API objects and methods definitions for all supported operations",
      "type": "object",
      "properties": {
        "create": {
          "description": "Python Kubernetes API objects and methods definitions for create operation",
          "$ref": "#/definitions/kubernetesTypesApiMappingEntry"
        },
        "read": {
          "description": "Python Kubernetes API objects and methods definitions for read operation",
          "$ref": "#/definitions/kubernetesTypesApiMappingEntry"
        },
        "update": {
          "description": "Python Kubernetes API objects and methods definitions for update operation",
          "$ref": "#/definitions/kubernetesTypesApiMappingEntry"
        },
        "delete": {
          "description": "Python Kubernetes API objects and methods definitions for delete operation",
          "$ref": "#/definitions/kubernetesTypesApiMappingEntry"
        }
      }
    },
    "kubernetesTypesFileResource": {
      "type": "object",
      "properties": {
        "resource_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "File relative to blueprint path."
        },
        "target_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Do not use."
        },
        "template_variables": {
          "type": "object"
        }
      }
    },
    "nodeTypeKubernetesNodesMasterProperties": {
      "type": "object",
      "properties": {
        "configuration": {
          "$ref": "#/definitions/kubernetesTypesConfigurationVariant",
          "description": "Configuration properties of Kubernetes API. One of four configuration options can be used\n1. Kubernetes config file contained by blueprint archive\n2. Kubernetes config file previously uploaded into Cloudify Manager VM\n3. Content of Kubernetes config file (YAML)\n4. Kubernetes API set o properties"
        },
        "authentication": {
          "$ref": "#/definitions/kubernetesTypesAuthenticationVariant",
          "description": "Authentication properties of Kubernetes Cloud providers. Optional.\nCurrently supported providers: Google Cloud Platform."
        }
      }
    },
    "nodeTypeKubernetesResourcesResourceBase": {
      "type": "object",
      "description": "",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/kubernetesTypesClientConfig",
          "description": "Configuration properties of kubernetes API and\nauthentication properties of Kubernetes Cloud providers."
        },
        "allow_node_redefinition": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "Permit changing the name and kind and number of resources defined in file.",
          "default": false
        }
      }
    },
    "nodeTypeKubernetesResourcesResourceWithValidateStatus": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesResourceBase"
        },
        {
          "type": "object",
          "properties": {
            "validate_resource_status": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "description": "Set this to \"true\" if you want Cloudify to wait for a predetermined state."
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesBlueprintDefinedResource": {
      "type": "object",
      "description": "",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesResourceWithValidateStatus"
        },
        {
          "type": "object",
          "properties": {
            "use_external_resource": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "description": "Indicates that you want to use an existing resource in Kubernetes."
            },
            "definition": {
              "$ref": "#/definitions/kubernetesTypesResourceDefinition",
              "description": "Definition of resource object using native Kubernetes YAML spec"
            },
            "options": {
              "type": "object",
              "description": "API options depending on API operations execution"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces": {
      "type": "object",
      "description": "",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.resource_create"
                  ]
                }
              }
            },
            "poststart": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": ["kubernetes.cloudify_kubernetes.tasks.resource_read"]
                }
              }
            },
            "update": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.resource_update"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.resource_delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeKubernetesResourcesClusterRoleBindingProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of role binding using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesRoleBindingDefinitio"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesRoleBinding": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of role binding using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesRoleBindingDefinitio"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesRoleProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of role using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesRoleDefinitio"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesClusterRoleProperties": {
      "type": "object",
      "description": "Definition of cluster role using native Kubernetes YAML spec",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesRoleProperties"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of role binding using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesClusterRoleDefinitio"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesSecretProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definitions": {
              "description": "Definition of secret using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesSecretDefinition"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesServiceAccountProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definitions": {
              "description": "Definition of service account using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesServiceAccountDefinition"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesDeploymentProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "validate_resource_status": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesNodeProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "use_external_resource": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesNamespaceProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "use_external_resource": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesPodProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "use_external_resource": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesReplicaSetProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "use_external_resource": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesReplicationControllerProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "use_external_resource": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesDaemonSetProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        }
      ]
    },
    "nodeTypeKubernetesResourcesCustomResourceDefinitionProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        }
      ]
    },
    "nodeTypeKubernetesResourcesServiceProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "validate_resource_status": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesPersistentVolumeProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "validate_resource_status": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "default": true
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesConfigMapProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "$ref": "#/definitions/kubernetesTypesConfigClassResourceDefinition"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesStorageClassProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of resource object using native Kubernetes YAML spec",
              "$ref": "#/definitions/kubernetesTypesStorageClassResourceDefinition"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesStatefulSetProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of resource object using native Kubernetes YAML spec",
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesPodSecurityPolicyProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of resource object using native Kubernetes YAML spec",
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesNetworkPolicyProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of resource object using native Kubernetes YAML spec",
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesIngressProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of resource object using native Kubernetes YAML spec",
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesPersistentVolumeClaimProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "definition": {
              "description": "Definition of resource object using native Kubernetes YAML spec",
              "type": "object"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesCustomBlueprintDefinedResourceProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResource"
        },
        {
          "properties": {
            "api_mapping": {
              "description": "Python Kubernetes API objects and methods definitions used for given resource type",
              "$ref": "#/definitions/kubernetesTypesApiMapping"
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesCustomBlueprintDefinedResourceInterfaces": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesBlueprintDefinedResourceInterfaces"
        },
        {
          "properties": {
            "cloudify.interfaces.lifecycle": {
              "type": "object",
              "properties": {
                "create": {
                  "type": "object",
                  "properties": {
                    "implementation": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput",
                      "enum": [
                        "kubernetes.cloudify_kubernetes.tasks.custom_resource_create"
                      ]
                    }
                  }
                },
                "delete": {
                  "type": "object",
                  "properties": {
                    "implementation": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput",
                      "enum": [
                        "kubernetes.cloudify_kubernetes.tasks.custom_resource_delete"
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesFileDefinedResourceProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesResourceWithValidateStatus"
        },
        {
          "properties": {
            "file": {
              "description": "A path to YAML file containing the resource definition.",
              "$ref": "#/definitions/kubernetesTypesFileResource"
            },
            "allow_node_redefinition": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "description": "Permit changing the name and kind and number of resources defined in file.",
              "default": false
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesFileDefinedResourceInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.file_resource_create"
                  ]
                }
              }
            },
            "poststart": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.file_resource_read"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.file_resource_delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeKubernetesResourcesMultipleFileDefinedResourcesProperties": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeKubernetesResourcesResourceWithValidateStatus"
        },
        {
          "properties": {
            "files": {
              "description": "A list of paths to YAML files containing the resources definition.",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "allow_node_redefinition": {
              "$ref": "#/definitions/cloudifyBooleanOrGetInput",
              "description": "Permit changing the name and kind and number of resources defined in file.",
              "default": false
            }
          }
        }
      ]
    },
    "nodeTypeKubernetesResourcesMultipleFileDefinedResourcesInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.multiple_file_resource_create"
                  ]
                }
              }
            },
            "poststart": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.multiple_file_resource_delete"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "kubernetes.cloudify_kubernetes.tasks.custom_resource_delete"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "dockerClientConfig": {
      "type": "object",
      "properties": {
        "docker_host": {
          "description": "Docker Machine IP to connect to.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "docker_rest_port": {
          "description": "Docker Machine rest port.",
          "$ref": "#/definitions/cloudifyIntegerOrGetInput"
        }
      }
    },
    "dockerMachine": {
      "type": "object",
      "description": "Docker Machine IP,User,Private_key",
      "properties": {
        "docker_ip": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Docker Machine IP"
        },
        "docker_user": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Docker Machine User"
        },
        "docker_key": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Docker Machine Private Key"
        },
        "container_volume": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Docker Container volume_mapping"
        }
      }
    },
    "dockerInstallationConfig": {
      "type": "object",
      "description": "Docker Installation type",
      "properties": {
        "install_url": {
          "description": "Docker Installation Link",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "https://get.docker.com"
        },
        "install_script": {
          "description": "Docker Installation script",
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "default": "https://raw.githubusercontent.com/cloudify-cosmo/cloudify-docker-plugin/master/cloudify_docker/resources/post-install.sh"
        }
      }
    },
    "nodeTypeDockerImagesProperties": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/dockerClientConfig"
        }
      }
    },
    "nodeTypeDockerImagesInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.list_images"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerContainersProperties": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/dockerClientConfig"
        }
      }
    },
    "nodeTypeDockerContainersInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.list_containers"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerHostProperties": {
      "type": "object",
      "properties": {
        "docker_machine": {
          "$ref": "#/definitions/dockerMachine"
        },
        "resource_config": {
          "$ref": "#/definitions/dockerInstallationConfig"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeDockerHostInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.install_docker"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.uninstall_docker"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerHostDetailsProperties": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/dockerClientConfig"
        }
      }
    },
    "nodeTypeDockerHostDetailsInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.list_host_details"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerImageProperties": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/dockerClientConfig"
        },
        "resource_config": {
          "description": "Docker Image type",
          "type": "object",
          "properties": {
            "image_content": {
              "description": "Docker image to build",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "tag": {
              "description": "Docker image tag",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            }
          }
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeDockerImageInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.build_image"]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.remove_image"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerContainerProperties": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/dockerClientConfig"
        },
        "resource_config": {
          "description": "Docker Container type",
          "type": "object",
          "properties": {
            "image_tag": {
              "description": "Docker image tag to build container",
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "container_args": {
              "description": "dict of arguments to pass to container when run\ncheck this URL for details: https://tinyurl.com/v8url54",
              "type": "object"
            }
          }
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeDockerContainerInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.create_container"]
                }
              }
            },
            "stop": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.remove_container"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "stop_command": {
                      "type": ["string", "object"]
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.tasks.remove_container"]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerContainerFilesProperties": {
      "type": "object",
      "properties": {
        "resource_config": {
          "description": "Docker Container Files type",
          "properties": {
            "docker_machine": {
              "description": "Docker Machine IP,User,Private_key",
              "type": "object",
              "properties": {
                "docker_machine": {
                  "description": "Docker Machine IP,User,Private_keys",
                  "$ref": "#/definitions/dockerMachine"
                },
                "source": {
                  "description": "Files location that will be mapped to container",
                  "type": "string"
                },
                "destination": {
                  "description": "Location to extract the files into,\nthat will be mapped to container volume later",
                  "type": "string"
                },
                "extra_files": {
                  "description": "More files to add to source before it goes to destination",
                  "type": "string"
                },
                "ansible_sources": {
                  "description": "special case for ansible sources",
                  "type": "object"
                },
                "terraform_sources": {
                  "description": "special case for terraform sources",
                  "type": "object"
                }
              }
            },
            "source": {
              "description": "Files location that will be mapped to container",
              "type": "string"
            },
            "destination": {
              "description": "Location to extract the files into,\nthat will be mapped to container volume later",
              "type": "string"
            },
            "extra_files": {
              "description": "More files to add to source before it goes to destination",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "ansible_sources": {
              "description": "special case for ansible sources",
              "type": "object"
            },
            "terraform_sources": {
              "description": "special case for terraform sources",
              "type": "object"
            }
          }
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeDockerContainerFilesInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "docker.cloudify_docker.tasks.prepare_container_files"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "docker.cloudify_docker.tasks.remove_container_files"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerAnsiblePlaybookProperties": {
      "type": "object",
      "properties": {
        "ansible_playbook_executable_path": {
          "description": "A full path to your ansible_playbook executable if user don't want to\nuse the included version of executable in the plugin",
          "type": "string",
          "default": "ansible-playbook"
        },
        "playbook_source_path": {
          "description": "A full path/URL that contain playbook specified in playbook_path\nor site_yaml_path.",
          "type": "string"
        },
        "playbook_path": {
          "description": "A path to your `site.yaml` or `main.yaml` in your\nAnsible Playbook relative to blueprint or playbook_source_path\nif playbook_source_path is URL to archive File relative inside the archive.",
          "type": "string"
        },
        "site_yaml_path": {
          "description": "DEPRECATED.\nA path to your `site.yaml` or `main.yaml` in your\nAnsible Playbook relative to blueprint or playbook_source_path\nif playbook_source_path is URL to archive File relative inside the archive.",
          "type": "string"
        },
        "additional_playbook_files": {
          "description": "A list of string paths blueprint resources that you\nwould like to download to the playbook directory.\nIf you use this variable, you must list all of the paths\nthat you expect to download.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sources": {
          "description": "Your Inventory sources. Either YAML or a path to a file.\nIf not provided the inventory will be take from the `sources`\nruntime property.",
          "type": "object"
        },
        "run_data": {
          "description": "Variable values.",
          "type": "object"
        },
        "sensitive_keys": {
          "description": "keys that you want us to obscure",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "options_config": {
          "description": "Command-line options, such as `tags` or `skip_tags`.",
          "type": "object"
        },
        "ansible_env_vars": {
          "description": "A dictionary of environment variables to set.",
          "type": "object",
          "properties": {
            "ANSIBLE_HOST_KEY_CHECKING": {
              "type": "string",
              "enum": ["True", "False"],
              "default": "False"
            },
            "ANSIBLE_INVALID_TASK_ATTRIBUTE_FAILED": {
              "type": "string",
              "enum": ["True", "False"],
              "default": "False"
            }
          }
        },
        "debug_level": {
          "description": "Debug level",
          "type": "integer",
          "default": 2
        },
        "additional_args": {
          "description": "Additional args that you want to use, for example, '-c local'.",
          "type": "string"
        },
        "save_playbook": {
          "description": "Save playbook after action",
          "type": "boolean",
          "default": false
        },
        "remerge_sources": {
          "description": "update sources on target node",
          "type": "boolean",
          "default": false
        },
        "ansible_become": {
          "description": "A boolean value, `true` or `false` whether\nto assume the user privileges.",
          "type": "boolean",
          "default": false
        },
        "docker_machine": {
          "description": "Docker Machine IP,User,Private_key",
          "$ref": "#/definitions/dockerMachine"
        }
      }
    },
    "nodeTypeDockerAnsiblePlaybookInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "precreate": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["docker.cloudify_docker.ansible.set_playbook_config"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "ansible_playbook_executable_path": {
                      "type": "string"
                    },
                    "playbook_source_path": {
                      "type": "string"
                    },
                    "playbook_path": {
                      "type": "string"
                    },
                    "site_yaml_path": {
                      "type": "string"
                    },
                    "save_playbook": {
                      "type": "boolean"
                    },
                    "remerge_sources": {
                      "type": "boolean"
                    },
                    "sources": {
                      "type": "object"
                    },
                    "run_data": {
                      "type": "object"
                    },
                    "sensitive_keys": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "options_config": {
                      "type": "object"
                    },
                    "ansible_env_vars": {
                      "type": "object"
                    },
                    "debug_level": {
                      "type": "integer"
                    },
                    "additional_args": {
                      "type": "string"
                    }
                  }
                }
              }
            },
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "docker.cloudify_docker.ansible.create_ansible_playbook"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "docker.cloudify_docker.ansible.remove_ansible_playbook"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeDockerTerraformModuleProperties": {
      "type": "object",
      "properties": {
        "docker_machine": {
          "$ref": "#/definitions/dockerMachine"
        },
        "terraform_plugins": {
          "description": "Terraform Plugins to install",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "resource_config": {
          "type": "object",
          "properties": {
            "source": {
              "description": "Path or URL to the ZIP file containing the Terraform project.\nIf this is a path, then it must be relative to the blueprint's root.",
              "type": "string"
            },
            "backend": {
              "type": "object",
              "description": "If a backend is not defined in source,\nand you want to use a specific backend, define that here.",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Some name."
                },
                "options": {
                  "type": "object",
                  "description": "Should be a dictionary of key/values."
                }
              }
            },
            "variables": {
              "description": "A dictionary of variables.",
              "type": "object"
            },
            "environment_variables": {
              "description": "A dictionary of environment variables.",
              "type": "object"
            }
          },
          "required": ["source"]
        }
      },
      "required": ["terraform_plugins", "resource_config"]
    },
    "nodeTypeDockerTerraformModuleInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "create": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "docker.cloudify_docker.terraform.prepare_terraform_files"
                  ]
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": [
                    "docker.cloudify_docker.terraform.remove_terraform_files"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "cloudifyGetStringOrAwsRegion": {
      "description": "The server region name, such as us-east-1.\n(Not us-east-1b, which is an availability zone, or\nUS East, which is a Region.)\nUS East (N. Virginia) - us-east-1\nUS East (Ohio) - us-east-2\nUS West (N. California) - us-west-1\nUS West (Oregon) - us-west-2\nAfrica (Cape Town) - af-south-1\nAsia Pacific (Hong Kong) - ap-east-1\nAsia Pacific (Mumbai) - ap-south-1\nAsia Pacific (Seoul) - ap-northeast-2\nAsia Pacific (Osaka-Local) - ap-northeast-3\nAsia Pacific (Singapore) - ap-southeast-1\nAsia Pacific (Sydney) - ap-southeast-2\nAsia Pacific (Tokyo) - ap-northeast-1\nCanada (Central) - ca-central-1\nChina (Beijing) - cn-north-1\nChina (Ningxia) - cn-northwest-1\nEurope (Frankfurt) - eu-central-1\nEurope (Ireland) - eu-west-1\nEurope (London) - eu-west-2\nEurope (Milan) - eu-south-1\nEurope (Paris) - eu-west-3\nEurope (Stockholm) - eu-north-1\nMiddle East (Bahrain) - me-south-1\nSouth America (São Paulo) - sa-east-1\nAWS GovCloud (US-East) - us-gov-east-1\nAWS GovCloud (US) - us-gov-west-1",
      "anyOf": [
        {
          "$ref": "#/definitions/awsRegion"
        },
        {
          "$ref": "#/definitions/cloudifyGetInput"
        }
      ]
    },
    "awsRegion": {
      "type": "string",
      "enum": [
        "us-east-1",
        "us-east-2",
        "us-west-1",
        "us-west-2",
        "af-south-1",
        "ap-east-1",
        "ap-south-1",
        "ap-southeast-1",
        "ap-northeast-2",
        "ap-northeast-3",
        "ap-northeast-1",
        "ap-southeast-2",
        "ca-central-1",
        "cn-north-1",
        "cn-northwest-1",
        "eu-central-1",
        "eu-west-1",
        "eu-west-2",
        "eu-south-1",
        "eu-west-3",
        "eu-north-1",
        "me-south-1",
        "sa-east-1",
        "us-gov-east-1",
        "us-gov-west-1"
      ]
    },
    "awsConnectionConfig": {
      "type": "object",
      "description": "A dictionary of values to pass to authenticate with the AWS API.",
      "properties": {
        "aws_access_key_id": {
          "description": "The ID of your AWS ACCESS KEY ID.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "aws_secret_access_key": {
          "description": "The ID of your AWS SECRET ACCESS KEY.",
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "region_name": {
          "$ref": "#/definitions/cloudifyGetStringOrAwsRegion"
        }
      }
    },
    "awsResourceId": {
      "description": "The AWS resource ID of the external resource, if\nuse_external_resource is true. Otherwise it is an empty string.",
      "type": "string",
      "default": ""
    },
    "nodeTypeAWSEC2Base": {
      "type": "object",
      "properties": {
        "use_external_resource": {
          "type": "boolean",
          "description": "Indicate whether the resource exists or if Cloudify should create the resource,\ntrue if you are bringing an existing resource, false if you want cloudify to create it.",
          "default": false
        },
        "client_config": {
          "$ref": "#/definitions/awsConnectionConfig"
        },
        "resource_id": {
          "$ref": "#/definitions/awsResourceId"
        },
        "Tags": {
          "$ref": "#/definitions/tags"
        }
      }
    },
    "nodeTypeAWSEC2EBSAttachment": {
      "type": "object",
      "properties": {
        "use_external_resource": {
          "type": "boolean",
          "description": "Indicate whether the resource exists or if Cloudify should create the resource,\ntrue if you are bringing an existing resource, false if you want cloudify to create it.",
          "default": false
        },
        "client_config": {
          "$ref": "#/definitions/awsConnectionConfig"
        },
        "resource_id": {
          "$ref": "#/definitions/awsResourceId"
        },
        "resource_config": {
          "type": "object",
          "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
          "properties": {
            "kwargs": {
              "type": "object",
              "properties": {
                "Device": {
                  "description": "The device name (for example, /dev/sdh or xvdh )",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "InstanceId": {
                  "description": "The ID of the instance.",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "VolumeId": {
                  "description": "The ID of the EBS volume. The volume and instance must be within the same Availability Zone",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "DryRun": {
                  "description": "Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation . Otherwise, it is UnauthorizedOperation .",
                  "$ref": "#/definitions/cloudifyBooleanOrGetInput"
                }
              },
              "required": ["Device", "InstanceId", "VolumeId"]
            }
          }
        }
      }
    },
    "nodeTypeAWSEC2EBSVolume": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeAWSEC2Base"
        },
        {
          "properties": {
            "resource_config": {
              "type": "object",
              "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
              "properties": {
                "AvailabilityZone": {
                  "description": "The Availability Zone in which to create the volume.",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "Size": {
                  "description": "The size of the volume, in GiBs.",
                  "$ref": "#/definitions/cloudifyIntegerOrGetInput"
                },
                "kwargs": {
                  "type": "object",
                  "properties": {
                    "Encrypted": {
                      "$ref": "#/definitions/cloudifyBooleanOrGetInput",
                      "description": "Specifies whether the volume should be encrypted. The effect of setting the encryption state to true depends on the volume origin (new or from a snapshot), starting encryption state, ownership, and whether encryption by default is enabled. For more information, see Encryption by Default in the Amazon Elastic Compute Cloud User Guide.\nEncrypted Amazon EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see Supported Instance Types ."
                    },
                    "Iops": {
                      "$ref": "#/definitions/cloudifyIntegerOrGetInput",
                      "description": "The number of I/O operations per second (IOPS) to provision for the volume, with a maximum ratio of 50 IOPS/GiB. Range is 100 to 64,000 IOPS for volumes in most Regions. Maximum IOPS of 64,000 is guaranteed only on Nitro-based instances . Other instance families guarantee performance up to 32,000 IOPS. For more information, see Amazon EBS Volume Types in the Amazon Elastic Compute Cloud User Guide.\nThis parameter is valid only for Provisioned IOPS SSD (io1) volumes."
                    },
                    "KmsKeyId": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput",
                      "description": "The identifier of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted state must be true.\n\nYou can specify the CMK using any of the following:\n\nKey ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab.\nKey alias. For example, alias/ExampleAlias.\nKey ARN. For example, arn:aws:kms:us-east-1 :012345678910 :key/abcd1234-a123-456a-a12b-a123b4cd56ef .\nAlias ARN. For example, arn:aws:kms:us-east-1 :012345678910 :alias/ExampleAlias .\nAWS authenticates the CMK asynchronously. Therefore, if you specify an ID, alias, or ARN that is not valid, the action can appear to complete, but eventually fails."
                    },
                    "OutpostArn": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput",
                      "description": "The Amazon Resource Name (ARN) of the Outpost."
                    },
                    "Size": {
                      "$ref": "#/definitions/cloudifyIntegerOrGetInput",
                      "description": "The size of the volume, in GiBs. You must specify either a snapshot ID or a volume size.\n\nConstraints: 1-16,384 for gp2 , 4-16,384 for io1 , 500-16,384 for st1 , 500-16,384 for sc1 , and 1-1,024 for standard . If you specify a snapshot, the volume size must be equal to or larger than the snapshot size.\n\nDefault: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size."
                    },
                    "SnapshotId": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput",
                      "description": "The snapshot from which to create the volume. You must specify either a snapshot ID or a volume size."
                    },
                    "VolumeType": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput",
                      "description": "The volume type. This can be gp2 for General Purpose SSD, io1 for Provisioned IOPS SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or standard for Magnetic volumes.\n\nDefault: gp2",
                      "default": "gp2"
                    },
                    "DryRun": {
                      "$ref": "#/definitions/cloudifyBooleanOrGetInput",
                      "description": "Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation . Otherwise, it is UnauthorizedOperation."
                    },
                    "TagSpecifications": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "ResourceType": {
                            "description": "The type of resource to tag. Currently, the resource types that support tagging on creation are: capacity-reservation | client-vpn-endpoint | customer-gateway | dedicated-host | dhcp-options | export-image-task | export-instance-task | fleet | fpga-image | host-reservation | import-image-task | import-snapshot-task | instance | internet-gateway | ipv4pool-ec2 | ipv6pool-ec2 | key-pair | launch-template | placement-group | prefix-list | natgateway | network-acl | route-table | security-group | spot-fleet-request | spot-instances-request | snapshot | subnet | traffic-mirror-filter | traffic-mirror-session | traffic-mirror-target | transit-gateway | transit-gateway-attachment | transit-gateway-route-table | volume |vpc | vpc-peering-connection | vpc-endpoint (for interface and gateway endpoints) | vpc-endpoint-service (for AWS PrivateLink) | vpc-flow-log | vpn-connection | vpn-gateway.",
                            "$ref": "#/definitions/cloudifyStringOrGetInput"
                          },
                          "Tags": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "Key": {
                                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                                },
                                "Value": {
                                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "required": ["AvailabilityZone"]
            },
            "use_available_zones": {
              "description": "A boolean to choose another available zone if the one provided is not available.",
              "type": "boolean"
            }
          }
        }
      ]
    },
    "nodeTypeAWSEC2Instances": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeAWSEC2Base"
        },
        {
          "properties": {
            "resource_config": {
              "type": "object",
              "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
              "properties": {
                "MinCount": {
                  "$ref": "#/definitions/cloudifyIntegerOrGetInput",
                  "default": "1"
                },
                "MaxCount": {
                  "$ref": "#/definitions/cloudifyIntegerOrGetInput",
                  "default": "1"
                },
                "ImageId": {
                  "description": "The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "InstanceType": {
                  "description": "The instance type. For more information, see Instance types in the Amazon Elastic Compute Cloud User Guide.\nhttps://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\nDefault: m1.small",
                  "$ref": "#/definitions/cloudifyStringOrGetInput",
                  "default": "m1.small"
                },
                "LaunchTemplate": {
                  "type": "object",
                  "properties": {
                    "LaunchTemplateId": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "LaunchTemplateName": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "Version": {
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    }
                  }
                },
                "kwargs": {
                  "type": "object",
                  "description": "http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.run_instances",
                  "properties": {
                    "BlockDeviceMappings": {
                      "type": "object",
                      "description": "The block device mapping entries."
                    },
                    "Ipv6AddressCount": {
                      "description": "[EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.\n\nYou cannot specify this option and the network interfaces option in the same request.",
                      "$ref": "#/definitions/cloudifyIntegerOrGetInput"
                    },
                    "KernelId": {
                      "description": "The ID of the kernel.",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "KeyName": {
                      "description": "The name of the key pair. You can create a key pair using CreateKeyPair or ImportKeyPair ",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "SecondaryPrivateIpAddressCount": {
                      "description": "The number of secondary private IPv4 addresses to assign to a network interface.",
                      "$ref": "#/definitions/cloudifyIntegerOrGetInput"
                    },
                    "SubnetId": {
                      "description": "The ID of the subnet for the network interface.",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "SecurityGroupIds": {
                      "description": "The IDs of the security groups. You can create a security group using CreateSecurityGroup.\n\nIf you specify a network interface, you must specify any security groups as part of the network interface.",
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/cloudifyStringOrGetInput"
                      }
                    }
                  }
                }
              },
              "required": ["MaxCount", "MinCount"]
            },
            "agent_config": {
              "type": "object",
              "properties": {
                "install_method": {
                  "type": "string"
                }
              }
            },
            "use_ipv6_ip": {
              "type": "boolean"
            }
          }
        }
      ]
    },
    "nodeTypeAWSEC2Image": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeAWSEC2Base"
        },
        {
          "properties": {
            "resource_config": {
              "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
              "type": "object",
              "properties": {
                "kwargs": {
                  "description": "https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_images",
                  "type": "object",
                  "properties": {
                    "Filters": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "Name": {
                            "type": "string"
                          },
                          "Values": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      ]
    },
    "nodeTypeAWSEC2Interface": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeAWSEC2Base"
        },
        {
          "properties": {
            "resource_config": {
              "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
              "type": "object",
              "properties": {
                "kwargs": {
                  "description": "http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.create_network_interface",
                  "type": "object",
                  "properties": {
                    "Description": {
                      "description": "A description for the network interface.",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "Groups": {
                      "description": "The IDs of one or more security groups.",
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/cloudifyStringOrGetInput"
                      }
                    },
                    "Ipv6AddressCount": {
                      "description": "The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses. If your subnet has the AssignIpv6AddressOnCreation attribute set to true , you can specify 0 to override this setting.",
                      "$ref": "#/definitions/cloudifyIntegerOrGetInput"
                    },
                    "PrivateIpAddress": {
                      "description": "The primary private IPv4 address of the network interface. If you don't specify an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR range. If you specify an IP address, you cannot indicate any IP addresses specified in privateIpAddresses as primary (only one IP address can be designated as primary).",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "SecondaryPrivateIpAddressCount": {
                      "description": "The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using privateIpAddresses .\n\nThe number of IP addresses you can assign to a network interface varies by instance type. For more information, see IP Addresses Per ENI Per Instance Type in the Amazon Virtual Private Cloud User Guide .",
                      "$ref": "#/definitions/cloudifyIntegerOrGetInput"
                    },
                    "InterfaceType": {
                      "description": "Indicates the type of network interface. To create an Elastic Fabric Adapter (EFA), specify efa . For more information, see Elastic Fabric Adapter in the Amazon Elastic Compute Cloud User Guide.",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    },
                    "SubnetId": {
                      "description": "The ID of the subnet to associate with the network interface.",
                      "$ref": "#/definitions/cloudifyStringOrGetInput"
                    }
                  },
                  "required": ["SubnetId"]
                }
              }
            }
          }
        }
      ]
    },
    "nodeTypeAWSEC2SecurityGroupRuleIngress": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeAWSEC2Base"
        },
        {
          "properties": {
            "resource_config": {
              "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
              "type": "object",
              "properties": {
                "IpPermissions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "IpProtocol": {
                        "type": "string"
                      },
                      "FromPort": {
                        "type": "integer"
                      },
                      "ToPort": {
                        "type": "integer"
                      },
                      "IpRanges": {
                        "type": "array",
                        "properties": {
                          "CidrIp": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "kwargs": {
                  "description": "http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.authorize_security_group_ingress\nhttp://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.authorize_security_group_egress",
                  "type": "object"
                }
              }
            }
          }
        }
      ]
    },
    "nodeTypeAWSEC2SecurityGroup": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/nodeTypeAWSEC2Base"
        },
        {
          "properties": {
            "resource_config": {
              "description": "Configuration key-value data to be passed as-is to the corresponding\nBoto3 method. Key names must match the case that Boto3 requires.",
              "type": "object",
              "properties": {
                "GroupName": {
                  "description": "The name of the security group.",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "Description": {
                  "description": "The description for the security group.",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "VpcId": {
                  "description": "The ID of the VPC. Required for EC2-VPC.",
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                },
                "kwargs": {
                  "description": "http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Client.create_security_group",
                  "type": "object"
                }
              },
              "required": ["Description", "GroupName"]
            }
          }
        }
      ]
    },
    "nodeTypeAWSEC2NATGateway": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        },
        "Tags": {
          "$ref": "#/definitions/tags"
        }
      }
    },
    "nodeTypeAWSEC2ElasticIP": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        }
      }
    },
    "nodeTypeAWSEC2Route": {
      "type": "object",
      "properties": {
        "resource_config": {
          "type": "object",
          "properties": {
            "kwargs": {
              "type": "object",
              "properties": {
                "DestinationCidrBlock": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                }
              }
            }
          }
        },
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        }
      }
    },
    "nodeTypeAWSEC2RouteTable": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        },
        "Tags": {
          "$ref": "#/definitions/tags"
        }
      }
    },
    "nodeTypeAWSEC2Subnet": {
      "type": "object",
      "properties": {
        "resource_config": {
          "type": "object",
          "properties": {
            "CidrBlock": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "AvailabilityZone": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "kwargs": {
              "type": "object",
              "properties": {
                "Ipv6CidrBlock": {
                  "$ref": "#/definitions/cloudifyStringOrGetInput"
                }
              }
            }
          }
        },
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        },
        "Tags": {
          "$ref": "#/definitions/tags"
        }
      }
    },
    "nodeTypeAWSEC2VPC": {
      "type": "object",
      "properties": {
        "resource_config": {
          "type": "object",
          "properties": {
            "CidrBlock": {
              "$ref": "#/definitions/cloudifyStringOrGetInput"
            },
            "kwargs": {
              "type": "object",
              "properties": {
                "AmazonProvidedIpv6CidrBlock": {
                  "$ref": "#/definitions/cloudifyBooleanOrGetInput"
                }
              }
            }
          }
        },
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        },
        "Tags": {
          "$ref": "#/definitions/tags"
        }
      }
    },
    "cloudifyDatatypesHelmConfig": {
      "type": "object",
      "properties": {
        "executable_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Helm binary path.",
          "default": ""
        }
      }
    },
    "cloudifyDatatypesHelmConfigurationVariant": {
      "type": "object",
      "description": "Type representing all Kubernetes API configuration variants. Each property represents separate supported variant of configuration. For now, until Helm support \"--insecure\" one of \"blueprint_file_name\",\n      \"manager_file_path\" and \"file_content\" must be used.\n      \"api_key\" inputs will override kubeconfig data.",
      "properties": {
        "blueprint_file_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of Kubernetes configuration file attached to blueprint(path)."
        },
        "manager_file_path": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Path to Kubernetes configuration file placed on Cloudify Manager VM."
        },
        "file_content": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Content (YAML) of Kubernetes configuration file. kubeconfig string or dict are supported. "
        },
        "api_options": {
          "$ref": "#/definitions/cloudifyDatatypesHelmApiOptions",
          "description": "Set of basic properties describing Kubernetes API access."
        }
      }
    },
    "cloudifyDatatypesHelmApiOptions": {
      "type": "object",
      "properties": {
        "host": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "HTTP/HTTPS URL to Kubernetes API."
        },
        "api_key": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Bearer token used for authentication."
        }
      }
    },
    "cloudifyDatatypesHelmAuthenticationVariant": {
      "type": "object",
      "description": "Type representing all authentication variants.\n for different Kubernetes cloud providers.\n Each property represents separate supported variant of authentication.\n You should choose one variant and fill in only on property.",
      "properties": {
        "gcp_service_account": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": " (JSON) Content of Google Cloud Platform Service Account file."
        }
      }
    },
    "cloudifyDatatypesHelmClientConfig": {
      "type": "object",
      "description": "Configuration properties for Helm to interact with kubernetes cluster.\n If kube_config file not provided then kube_token and kube_api_server should provided.",
      "properties": {
        "configuration": {
          "$ref": "#/definitions/cloudifyDatatypesHelmConfigurationVariant"
        },
        "authentication": {
          "$ref": "#/definitions/cloudifyDatatypesHelmAuthenticationVariant"
        }
      }
    },
    "cloudifyDatatypesHelmReleaseConfig": {
      "type": "object",
      "description": "configuration properties for release node type.",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the created release."
        },
        "chart": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the chart to install.For example: stable/mysql."
        },
        "values_file": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Path to values files."
        },
        "set_values": {
          "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
          "description": " List of variables names and values to set. For example:\n          - name: x\n            value: y\n          - name: a\n            value: b\n          It equals to --set x=y --set a=b in helm command.",
          "default": []
        },
        "flags": {
          "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
          "description": "List of flags add to both \"helm install\" and \"helm uninstall\" commands.\n          For example:\n          - name: namespace\n            value: my_namespace\n          If the flag not requires value, omit \"value\" and specify only the name as element in the list.",
          "default": []
        }
      },
      "required": ["name", "chart"]
    },
    "cloudifyDatatypesHelmRepoConfig": {
      "type": "object",
      "description": "configuration properties for repo node type.",
      "properties": {
        "name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Name of the repo that added/removed."
        },
        "repo_url": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "URL of the repo to add."
        },
        "flags": {
          "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
          "description": "List of flags add to both \"helm repo add\" and \"helm repo remove\" commands.",
          "default": []
        }
      },
      "required": ["name", "repo_url"]
    },
    "cloudifyDatatypesHelmSetFlagsList": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {}
        }
      },
      "additionalProperties": false,
      "default": []
    },
    "nodeTypeHelmBinaryProperties": {
      "type": "object",
      "properties": {
        "helm_config": {
          "$ref": "#/definitions/cloudifyDatatypesHelmConfig"
        },
        "use_existing_resource": {
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "description": "If true, use an existing helm installation rather than installing it.",
          "default": false
        },
        "installation_source": {
          "$ref": "#/definitions/cloudifyStringOrGetInput",
          "description": "Location to download the Helm installation from. Ignored if 'use_existing_resource' is true.",
          "default": "https://get.helm.sh/helm-v3.3.1-linux-amd64.tar.gz"
        }
      }
    },
    "nodeTypeHelmReleaseProperties": {
      "type": "object",
      "properties": {
        "helm_config": {
          "$ref": "#/definitions/cloudifyDatatypesHelmConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource,\ntrue if you are bringing an existing resource, false if you want cloudify to create it.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "client_config": {
          "$ref": "#/definitions/cloudifyDatatypesHelmClientConfig"
        },
        "resource_config": {
          "$ref": "#/definitions/cloudifyDatatypesHelmReleaseConfig"
        }
      },
      "required": ["client_config", "resource_config"]
    },
    "nodeTypeHelmReleaseInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["helm.cloudify_helm.tasks.install_release"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "flags": {
                      "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
                      "description": " Flags to add only to `helm install` command.The format is the same as \"flags\"."
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["helm.cloudify_helm.tasks.uninstall_release"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "flags": {
                      "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
                      "description": " Flags to add only to `helm uninstall` command.The format is the same as \"flags\"."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "nodeTypeHelmRepoProperties": {
      "type": "object",
      "properties": {
        "helm_config": {
          "$ref": "#/definitions/cloudifyDatatypesHelmConfig"
        },
        "use_external_resource": {
          "description": "Indicate whether the resource exists or if Cloudify should create the resource,\ntrue if you are bringing an existing resource, false if you want cloudify to create it.",
          "$ref": "#/definitions/cloudifyBooleanOrGetInput",
          "default": false
        },
        "resource_config": {
          "$ref": "#/definitions/cloudifyDatatypesHelmRepoConfig"
        }
      },
      "required": ["resource_config"]
    },
    "nodeTypeHelmRepoInterfaces": {
      "type": "object",
      "properties": {
        "cloudify.interfaces.lifecycle": {
          "type": "object",
          "properties": {
            "start": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["helm.cloudify_helm.tasks.add_repo"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "flags": {
                      "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
                      "description": " Flags to add only to `helm repo add` command.The format is the same as \"flags\"."
                    }
                  }
                }
              }
            },
            "delete": {
              "type": "object",
              "properties": {
                "implementation": {
                  "type": "string",
                  "enum": ["helm.cloudify_helm.tasks.remove_repo"]
                },
                "inputs": {
                  "type": "object",
                  "properties": {
                    "flags": {
                      "$ref": "#/definitions/cloudifyDatatypesHelmSetFlagsList",
                      "description": " Flags to add only to `helm repo remove` command.The format is the same as \"flags\"."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "cloudifyIntegerOrGetInput": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "$ref": "#/definitions/cloudifyGetIntrinsicFunction"
        }
      ]
    },
    "cloudifyBooleanOrGetInput": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/cloudifyGetIntrinsicFunction"
        }
      ]
    },
    "cloudifyStringOrGetInput": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/definitions/cloudifyGetIntrinsicFunction"
        }
      ]
    },
    "cloudifyGetIntrinsicFunction": {
      "anyOf": [
        {
          "$ref": "#/definitions/cloudifyGetInput"
        },
        {
          "$ref": "#/definitions/cloudifyGetSecret"
        },
        {
          "$ref": "#/definitions/cloudifyGetAttribute"
        },
        {
          "$ref": "#/definitions/cloudifyGetProperty"
        }
      ]
    },
    "cloudifyGetAttribute": {
      "type": "object",
      "properties": {
        "get_attribute": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      }
    },
    "cloudifyGetProperty": {
      "type": "object",
      "properties": {
        "get_property": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      }
    },
    "cloudifyGetInput": {
      "type": "object",
      "properties": {
        "get_input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      }
    },
    "cloudifyGetSecret": {
      "type": "object",
      "properties": {
        "get_secret": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        }
      }
    },
    "nodeTypeAWSInternetGateway": {
      "type": "object",
      "properties": {
        "client_config": {
          "$ref": "#/definitions/awsClientConfig"
        }
      }
    },
    "awsClientConfig": {
      "type": "object",
      "properties": {
        "aws_access_key_id": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "aws_secret_access_key": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        },
        "region_name": {
          "$ref": "#/definitions/cloudifyStringOrGetInput"
        }
      }
    },
    "tags": {
      "description": "Tags to add to an EC2 resource",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "Key": {
            "$ref": "#/definitions/cloudifyStringOrGetInput"
          },
          "Value": {
            "$ref": "#/definitions/cloudifyStringOrGetInput"
          }
        }
      }
    },
    "nodeTemplateInterfaces": {
      "type": "object",
      "description": "Interfaces enable you to map logical tasks to executable operations.",
      "patternProperties": {
        "": {
          "$ref": "#/definitions/nodeTemplateInterface"
        }
      }
    },
    "nodeTemplateInterface": {
      "type": "object",
      "properties": {
        "configure": {
          "$ref": "#/definitions/nodeTemplateInterfaceAction"
        },
        "delete": {
          "$ref": "#/definitions/nodeTemplateInterfaceAction"
        }
      },
      "patternProperties": {
        "": {
          "$ref": "#/definitions/nodeTemplateInterfaceAction"
        }
      }
    },
    "nodeTemplateInterfaceAction": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "properties": {
            "implementation": {
              "type": "string",
              "description": "The script or plugin task name to execute."
            },
            "inputs": {
              "type": "object",
              "description": "Schema of inputs to be passed to the implementation as kwargs."
            },
            "executor": {
              "type": "string",
              "description": "Valid values: central_deployment_agent, host_agent. See the Plugins Specification for more info.",
              "enum": ["central_deployment_agent", "host_agent"]
            },
            "max_retries": {
              "type": "number",
              "description": "Maximum number of retries for a task. -1 means infinite retries (Default: task_retries in the Cloudify Manager config.yaml file for remote workflows, and task_retries workflow configuration for local workflows)."
            },
            "retry_interval": {
              "type": "number",
              "description": "Minimum wait time (in seconds) between task retries (Default: task_retry_interval in the Cloudify Manager config.yaml file for remote workflows and task_retry_interval workflow configuration for local workflows)."
            },
            "timeone": {
              "type": "number",
              "description": "Number of seconds to wait before the operation is terminated by the orchestrator. A value of 0 (or no value at all, which is the default) means no timeout.",
              "default": 0
            },
            "timeout_recoverable": {
              "type": "boolean",
              "description": "If true (the default), and a timeout occurred, then, the operation will raise a RecoverableError, resulting in the operation being retried. Otherwise, a NonRecoverableError is raised, ending the execution with a failure.",
              "default": true
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "nodeTemplateRelationships": {
      "type": "array",
      "description": "relationships enable you to define how nodes relate to one another. For example, a web_server node can be contained_in a vm node or an application node can be connected_to a database node.",
      "items": {
        "$ref": "#/definitions/nodeTemplateRelationship"
      }
    },
    "nodeTemplateRelationship": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Either a newly-declared relationship type or one of the relationship types provided by default when importing the types.yaml file."
        },
        "target": {
          "type": "string",
          "description": "The name of the node to which the current node is related."
        },
        "connection_type": {
          "type": "string",
          "description": "Valid values: all_to_all and all_to_one (See explanation below.)",
          "enum": ["all_to_all", "all_to_one"]
        },
        "source_interfaces": {
          "type": "object",
          "description": "A dictionary of interfaces."
        },
        "target_interfaces": {
          "type": "object",
          "description": "A dictionary of interfaces."
        }
      },
      "required": ["type"],
      "additionalProperties": false
    },
    "nodeTypes": {
      "type": "object",
      "patternProperties": {
        "": {
          "$ref": "#/definitions/nodeType"
        }
      }
    },
    "nodeType": {
      "type": "object",
      "properties": {
        "derived_from": {
          "type": "string",
          "description": "A string referencing a parent type."
        },
        "interfaces": {
          "type": "object",
          "description": "A dictionary of node interfaces."
        },
        "properties": {
          "type": "object",
          "description": "A dictionary of node properties."
        }
      }
    }
  },
  "properties": {
    "tosca_definitions_version": {
      "description": "tosca_definitions_version is a top level property of the blueprint which is used to specify the DSL version used. For Cloudify, the versions that are currently defined are cloudify_dsl_1_0, cloudify_dsl_1_1, cloudify_dsl_1_2 and cloudify_dsl_1_3.",
      "type": "string",
      "enum": [
        "cloudify_dsl_1_0",
        "cloudify_dsl_1_1",
        "cloudify_dsl_1_2",
        "cloudify_dsl_1_3"
      ],
      "default": "cloudify_dsl_1_3"
    },
    "imports": {
      "description": "imports enable the author of a blueprint to reuse blueprint files, or parts of them, and to use predefined types (e.g. from the types.yaml file).",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "string",
            "enum": [
              "http://www.getcloudify.org/spec/cloudify/4.5/types.yaml",
              "plugin:cloudify-ansible-plugin",
              "plugin:cloudify-aws-plugin",
              "plugin:cloudify-azure-plugin",
              "plugin:cloudify-cloudstack-plugin",
              "plugin:cloudify-diamond-plugin",
              "plugin:cloudify-fabric-plugin",
              "plugin:cloudify-gcp-plugin",
              "plugin:cloudify-host-pool-plugin",
              "plugin:cloudify-kubernetes-plugin",
              "plugin:cloudify-openstack-plugin",
              "plugin:cloudify-utilities-plugin",
              "plugin:cloudify-vsphere-plugin",
              "plugin:cloudify-terraform-plugin",
              "plugin:cloudify-helm-plugin"
            ]
          }
        ],
        "default": "http://www.getcloudify.org/spec/cloudify/4.5/types.yaml"
      }
    },
    "data_types": {
      "$ref": "#/definitions/dataTypes"
    },
    "inputs": {
      "description": "inputs are parameters that are injected into a blueprint when a deployment is created. These parameters can be referenced by using the get_input intrinsic function.",
      "type": "object",
      "properties": {
        "aws_access_key_id": {
          "$ref": "#/definitions/inputProperty"
        },
        "aws_secret_access_key": {
          "$ref": "#/definitions/inputProperty"
        },
        "aws_region_name": {
          "$ref": "#/definitions/inputProperty"
        },
        "aws_account_id": {
          "$ref": "#/definitions/inputProperty"
        },
        "aws_region_zone1": {
          "$ref": "#/definitions/inputProperty"
        },
        "aws_region_zone2": {
          "$ref": "#/definitions/inputProperty"
        },
        "aws_cloudwatch_log_arn": {
          "$ref": "#/definitions/inputProperty"
        }
      },
      "patternProperties": {
        "": {
          "$ref": "#/definitions/inputProperty"
        }
      }
    },
    "dsl_definitions": {
      "type": "object"
    },
    "node_types": {
      "$ref": "#/definitions/nodeTypes"
    },
    "node_templates": {
      "$ref": "#/definitions/nodeTemplates"
    }
  },
  "title": "Blueprint",
  "type": "object"
}