Difference between revisions of "Nova/FeatureComparison"
< Nova
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
− | + | This page attempts to enumerate how [[OpenStack]], Eucalyptus and [[CloudStack]] compare. | |
+ | |||
+ | = General API Support = | ||
+ | |||
+ | {| border="1" cellpadding="2" cellspacing="0" | ||
+ | | Feature | ||
+ | | Eucalyptus | ||
+ | | [[OpenStack]] | ||
+ | |- | ||
+ | | EC2 Query API | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | EC2 Soap API | ||
+ | | (./) | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | OpenStack API / Rackspace API | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | | (./) | ||
+ | |- | ||
+ | | SSL Between Components | ||
+ | | (./) | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Horizontal Component Scalability | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | | (./) | ||
+ | |- | ||
+ | | Web-based UI | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Command line interface | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |} | ||
+ | |||
+ | = Amazon EC2 High Level Feature Support = | ||
+ | |||
+ | {| border="1" cellpadding="2" cellspacing="0" | ||
+ | | EC2 feature | ||
+ | | Eucalyptus | ||
+ | | [[OpenStack]] | ||
+ | |- | ||
+ | | Shared AMIs | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Parameterized launch (user-data) | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Instance metadata | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Public AMI's | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Launch/Terminate Instance | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Reboot Instance | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Start/Stop Persisted Instance | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | | (./) | ||
+ | |- | ||
+ | | Retrieve Console Output | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Paid AMI's | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Multiple Instance Types | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Instance Launch Time | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Elastic IP's | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Availability Zones | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Region Support | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | User selectable kernels | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Elastic Block Store | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Booting without a ramdisk | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | Windows Support | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | | (./) | ||
+ | |- | ||
+ | | Reserved Instances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Auto Scaling | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Elastic Load Balancing | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | [[CloudWatch]] | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Virtual Private Cloud (IPSec) | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Shared Snapshots | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | AMI's backed by EBS | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | | (./) | ||
+ | |- | ||
+ | | Spot Instances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Sticky session in Elastic LB | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | cc1.4xlarge | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Specify IP address for inst in VPC | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Tags | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Filters | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Idempotent [[RunInstance]] Calls | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | Import keypair | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | | (./) | ||
+ | |- | ||
+ | | SSL termination | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |} | ||
+ | |||
+ | = Amazon EC2 API Compatability = | ||
+ | |||
+ | Note: Info on Eucalyptus was provided entirely by doing a grep of the source code. The Eucalyptus repository is here: https://launchpad.net/eucalyptus. Info on [[CloudStack]]'s [[CloudBridge]] EC2 Commands was provided from [[CloudStack]]'s Cloud Bridge Guide: http://docs.cloudstack.org/@api/deki/files/165/CloudBridgeGuide.pdf. Eucalyptus and [[OpenStack]]'s EC2 support is integrated into the respective code bases. [[CloudStack]]'s support is provided by running a [[CloudBridge]] proxy server. Source code for the [[CloudBridge]] proxy is here: https://github.com/CloudStack/CloudBridge | ||
+ | |||
+ | {| border="1" cellpadding="2" cellspacing="0" | ||
+ | | EC2 API method | ||
+ | | Eucalyptus | ||
+ | | [[OpenStack]] | ||
+ | |- | ||
+ | | AllocateAddress | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | AssociateAddress | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | AttachVolume | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | AuthorizeSecurityGroupIngress | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | BundleInstance | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CancelBundleTask | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CancelSpotInstanceRequests | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ConfirmProductInstance | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CreateImage | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CreateKeyPair | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | CreatePlacementGroup | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CreateSecurityGroup | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | CreateSnapshot | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | CreateSpotDatafeedSubscription | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CreateTags | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | CreateVolume | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DeleteKeyPair | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DeletePlacementGroup | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DeleteSecurityGroup | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DeleteSnapshot | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DeleteSpotDatafeedSubscription | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DeleteTags | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DeleteVolume | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DeregisterImage | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeAddresses | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeAvailabilityZones | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeBundleTasks | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeImageAttribute | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeImages | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeInstanceAttribute | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeInstances | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeKeyPairs | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribePlacementGroups | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeRegions | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeReservedInstances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeReservedInstancesOfferings | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeSecurityGroups | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeSnapshotAttribute | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeSnapshots | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DescribeSpotDatafeedSubscription | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeSpotInstanceRequests | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeSpotPriceHistory | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeTags | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | DescribeVolumes | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DetachVolume | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | DisassociateAddress | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | GetConsoleOutput | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | GetPasswordData | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ImportKeyPair | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ModifyImageAttribute | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | ModifyInstanceAttribute | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ModifySnapshotAttribute | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | MonitorInstances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | PurchaseReservedInstancesOffering | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | RebootInstances | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | RegisterImage | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | ReleaseAddress | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | RequestSpotInstances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ResetImageAttribute | ||
+ | | (./) | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ResetInstanceAttribute | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | ResetSnapshotAttribute | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | RevokeSecurityGroupIngress | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | RunInstances | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | StartInstances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | StopInstances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |- | ||
+ | | TerminateInstances | ||
+ | | (./) | ||
+ | | (./) | ||
+ | |- | ||
+ | | UnmonitorInstances | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |<span style="font-size: large; color: white; background: red">|X</span> | ||
+ | |} | ||
+ | |||
+ | ---- | ||
+ | [[Category:Nova]] |
Revision as of 17:58, 6 April 2012
This page attempts to enumerate how OpenStack, Eucalyptus and CloudStack compare.
General API Support
Feature | Eucalyptus | OpenStack |
EC2 Query API | (./) | (./) |
EC2 Soap API | (./) | X |
OpenStack API / Rackspace API | X | (./) |
SSL Between Components | (./) | X |
Horizontal Component Scalability | X | (./) |
Web-based UI | (./) | (./) |
Command line interface | (./) | (./) |
Amazon EC2 High Level Feature Support
EC2 feature | Eucalyptus | OpenStack |
Shared AMIs | (./) | (./) |
Parameterized launch (user-data) | (./) | (./) |
Instance metadata | (./) | (./) |
Public AMI's | (./) | (./) |
Launch/Terminate Instance | (./) | (./) |
Reboot Instance | (./) | (./) |
Start/Stop Persisted Instance | X | (./) |
Retrieve Console Output | (./) | (./) |
Paid AMI's | X | X |
Multiple Instance Types | (./) | (./) |
Instance Launch Time | (./) | (./) |
Elastic IP's | (./) | (./) |
Availability Zones | (./) | (./) |
Region Support | (./) | (./) |
User selectable kernels | (./) | (./) |
Elastic Block Store | (./) | (./) |
Booting without a ramdisk | (./) | (./) |
Windows Support | X | (./) |
Reserved Instances | X | X |
Auto Scaling | X | X |
Elastic Load Balancing | X | X |
CloudWatch | X | X |
Virtual Private Cloud (IPSec) | X | X |
Shared Snapshots | X | X |
AMI's backed by EBS | X | (./) |
Spot Instances | X | X |
Sticky session in Elastic LB | X | X |
cc1.4xlarge | X | X |
Specify IP address for inst in VPC | X | X |
Tags | X | X |
Filters | X | X |
Idempotent RunInstance Calls | X | X |
Import keypair | X | (./) |
SSL termination | X | X |
Amazon EC2 API Compatability
Note: Info on Eucalyptus was provided entirely by doing a grep of the source code. The Eucalyptus repository is here: https://launchpad.net/eucalyptus. Info on CloudStack's CloudBridge EC2 Commands was provided from CloudStack's Cloud Bridge Guide: http://docs.cloudstack.org/@api/deki/files/165/CloudBridgeGuide.pdf. Eucalyptus and OpenStack's EC2 support is integrated into the respective code bases. CloudStack's support is provided by running a CloudBridge proxy server. Source code for the CloudBridge proxy is here: https://github.com/CloudStack/CloudBridge
EC2 API method | Eucalyptus | OpenStack |
AllocateAddress | (./) | (./) |
AssociateAddress | (./) | (./) |
AttachVolume | (./) | (./) |
AuthorizeSecurityGroupIngress | (./) | (./) |
BundleInstance | X | X |
CancelBundleTask | X | X |
CancelSpotInstanceRequests | X | X |
ConfirmProductInstance | X | X |
CreateImage | X | X |
CreateKeyPair | (./) | (./) |
CreatePlacementGroup | X | X |
CreateSecurityGroup | (./) | (./) |
CreateSnapshot | (./) | (./) |
CreateSpotDatafeedSubscription | X | X |
CreateTags | X | X |
CreateVolume | (./) | (./) |
DeleteKeyPair | (./) | (./) |
DeletePlacementGroup | X | X |
DeleteSecurityGroup | (./) | (./) |
DeleteSnapshot | (./) | (./) |
DeleteSpotDatafeedSubscription | X | X |
DeleteTags | X | X |
DeleteVolume | (./) | (./) |
DeregisterImage | (./) | (./) |
DescribeAddresses | (./) | (./) |
DescribeAvailabilityZones | (./) | (./) |
DescribeBundleTasks | X | X |
DescribeImageAttribute | (./) | (./) |
DescribeImages | (./) | (./) |
DescribeInstanceAttribute | X | X |
DescribeInstances | (./) | (./) |
DescribeKeyPairs | (./) | (./) |
DescribePlacementGroups | X | X |
DescribeRegions | (./) | (./) |
DescribeReservedInstances | X | X |
DescribeReservedInstancesOfferings | X | X |
DescribeSecurityGroups | (./) | (./) |
DescribeSnapshotAttribute | X | X |
DescribeSnapshots | (./) | (./) |
DescribeSpotDatafeedSubscription | X | X |
DescribeSpotInstanceRequests | X | X |
DescribeSpotPriceHistory | X | X |
DescribeTags | X | X |
DescribeVolumes | (./) | (./) |
DetachVolume | (./) | (./) |
DisassociateAddress | (./) | (./) |
GetConsoleOutput | (./) | (./) |
GetPasswordData | X | X |
ImportKeyPair | X | X |
ModifyImageAttribute | (./) | (./) |
ModifyInstanceAttribute | X | X |
ModifySnapshotAttribute | X | X |
MonitorInstances | X | X |
PurchaseReservedInstancesOffering | X | X |
RebootInstances | (./) | (./) |
RegisterImage | (./) | (./) |
ReleaseAddress | (./) | (./) |
RequestSpotInstances | X | X |
ResetImageAttribute | (./) | X |
ResetInstanceAttribute | X | X |
ResetSnapshotAttribute | X | X |
RevokeSecurityGroupIngress | (./) | (./) |
RunInstances | (./) | (./) |
StartInstances | X | X |
StopInstances | X | X |
TerminateInstances | (./) | (./) |
UnmonitorInstances | X | X |