Cloud Resource Management

Amazon Web Services

AWS manager uses boto3 high level AWS python SDK for accessing and manipulating AWS resources.

region: us-west-2
aws_access_key_id: {{ access_key_id }}
aws_secret_access_key: {{ secret_access_key }}

The metadata schema for AWS manager:

query:
  aws_complete_graph:
    name: Complete Account
    layout: graph
relation:
  in_ec2_vpc:
    relation:
      default: vpc
  in_ec2_subnet:
    relation:
      default: subnet
  using_ec2_key_pair:
    relation:
      default: key_pair
default_resource: ec2_instance
resource:
  ec2_elastic_ip:
    client: ec2
    icon: fa:cube
    name: Elastic IP
    resource: AWS::EC2::EIP
  ec2_elastic_ip_association:
    client: ec2
    icon: fa:cube
    name: Elastic IP Association
    resource: AWS::EC2::EIPAssociation
  ec2_image:
    client: ec2
    icon: fa:server
    name: Image
    resource: AWS::EC2::Image
  ec2_instance:
    client: ec2
    icon: fa:server
    name: Instance
    resource: AWS::EC2::Instance
    model:
      vpc:
        type: relationship_to
        model: in_ec2_vpc
        target: ec2_vpc
      subnet:
        type: relationship_to
        model: in_ec2_subnet
        target: ec2_subnet
      key_pair:
        type: relationship_to
        model: using_ec2_key_pair
        target: ec2_key_pair
  ec2_internet_gateway:
    client: ec2
    icon: fa:cube
    name: Internet Gateway
    resource: AWS::EC2::InternetGateway
  ec2_key_pair:
    client: ec2
    icon: fa:key
    name: Key Pair
    resource: AWS::EC2::KeyPair
  ec2_route_table:
    client: ec2
    icon: fa:cube
    name: Route Table
    resource: AWS::EC2::RouteTable
  ec2_security_group:
    client: ec2
    icon: fa:cubes
    name: Security Group
    resource: AWS::EC2::SecurityGroup
  ec2_subnet:
    client: ec2
    icon: fa:cube
    name: Subnet
    resource: AWS::EC2::Subnet
  ec2_vpc:
    client: ec2
    icon: fa:cubes
    name: VPC
    resource: AWS::EC2::VPC
  ec2_vpc_gateway_attachment:
    client: ec2
    icon: fa:cube
    name: VPC Gateway Attachment
    resource: AWS::EC2::VPCGatewayAttachment
  s3_bucket:
    client: s3
    icon: fa:hdd-o
    name: Bucket
    resource: AWS::S3::Bucket

OpenStack Cloud Resources

Configuration for keystone v2.0 and keystone v3 clouds. Configuration sample for single tenant access.

scope: local
region_name: RegionOne
auth:
  username: {{ user-name }}
  password: {{ user-password }}
  project_name: {{ project-name }}
  auth_url: https://{{ keystone-api }}:5000/v2.0

Config for managing resources of entire cloud, including hypervisors, tenants, etc in given region.

scope: global
region_name: RegionOne
auth:
  username: {{ admin-name }}
  password: {{ admin-password }}
  project_name: admin
  auth_url: https://{{ keystone-api }}:5000/v2.0

The metadata schema for OpenStack manager:

query:
  os_complete_graph:
    name: Complete Cloud
    layout: graph
  os_clear_project_graph:
    name: Project Resources
    layout: graph
    filter_node_types:
    - os_server
    - os_key_pair
    - os_flavor
    - os_network
    - os_subnet
    - os_floating_ip
    - os_port
    - os_router
    filter_lone_nodes:
    - os_key_pair
    - os_flavor
  os_network_topology_graph:
    name: Network Topology
    layout: graph
    filter_node_types:
    - os_server
    - os_network
    - os_subnet
    - os_port
    - os_floating_ip
    - os_router
relation:
  in_os_project:
    relation:
      default: project
  in_os_stack:
    relation:
      default: stack
  in_os_network:
    relation:
      default: network
  use_os_port:
    relation:
      default: port
      os_server: network
  use_os_image:
    relation:
      os_server: image
  use_os_flavor:
    relation:
      os_server: flavor
  use_os_key_pair:
    relation:
      default: key_pair
  on_os_hypervisor:
    relation:
      os_server: hypervisor
      os_port: hypervisor
  in_os_aggregate:
    relation:
      os_hypervisor: aggregate
default_resource: os_server
resource:
  os_aggregate:
    resource: OS::Nova::Aggregate
    client: nova
    name: Aggregate
    icon: fa:cube
  os_flavor:
    resource: OS::Nova::Flavor
    client: nova
    name: Flavor
    icon: fa:cube
  os_floating_ip:
    resource: OS::Neutron::FloatingIP
    client: neutron
    name: Floating IP
    icon: fa:cube
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
      port:
        type: relationship_to
        model: use_os_port
        target: os_port
  os_floating_ip_association:
    resource: OS::Neutron::FloatingIPAssociation
    client: neutron
    name: Floating IP Association
    icon: fa:cube
  os_group:
    resource: OS::Keystone::Group
    client: keystone
    name: Group
    icon: fa:cube
  os_hypervisor:
    resource: OS::Nova::Hypervisor
    client: nova
    name: Hypervisor
    icon: fa:server  
    model:
      aggregate:
        type: relationship_to
        model: in_os_aggregate
        target: os_aggregate
  os_image:
    resource: Glance::Image
    client: glance
    name: Image
    icon: fa:cube
  os_key_pair:
    resource: OS::Nova::KeyPair
    client: nova
    name: Key Pair
    icon: fa:key
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
  os_network:
    resource: OS::Neutron::Net
    client: neutron
    name: Network
    icon: fa:share-alt
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
      subnets:
        type: relationship_from
        model: in_os_network
        target: os_subnet
  os_port:
    resource: OS::Neutron::Port
    client: neutron
    name: Port
    icon: fa:cube
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
      hypervisor:
        type: relationship_to
        model: on_os_hypervisor
        target: os_hypervisor
      network:
        type: relationship_to
        model: in_os_network
        target: os_network
  os_project:
    resource: OS::Keystone::Tenant
    client: keystone
    name: Project
    icon: fa:cube
  os_resource_type:
    resource: OS::Heat::ResourceType
    client: heat
    name: Resource Type
    icon: fa:cube
  os_router:
    resource: OS::Neutron::Router
    client: neutron
    name: Router
    icon: fa:arrows-alt
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
      port:
        type: relationship_to
        model: use_os_port
        target: os_port
  os_server:
    resource: OS::Nova::Server
    client: nova
    name: Server
    icon: fa:server
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
      network:
        type: relationship_to
        model: use_os_port
        target: os_port
      hypervisor:
        type: relationship_to
        model: on_os_hypervisor
        target: os_hypervisor
      key_pair:
        type: relationship_to
        model: use_os_key_pair
        target: os_key_pair
      image:
        type: relationship_to
        model: use_os_image
        target: os_image
      flavor:
        type: relationship_to
        model: use_os_flavor
        target: os_flavor
  os_stack:
    resource: OS::Heat::Stack
    client: heat
    name: Stack
    icon: fa:cubes
    model:
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
  os_subnet:
    resource: OS::Neutron::Subnet
    client: neutron
    name: Subnet
    icon: fa:share-alt
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project
      network:
        type: relationship_to
        model: in_os_network
        target: os_network
  os_user:
    resource: OS::Keystone::User
    client: keystone
    name: User
    icon: fa:cube
  os_volume:
    resource: OS::Cinder::Volume
    client: cinder
    name: Volume
    icon: fa:cube
    model:
      stack:
        type: relationship_to
        model: in_os_stack
        target: os_stack
      project:
        type: relationship_to
        model: in_os_project
        target: os_project