mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
Enforce the new providers configuration. Refs #239.
* Updated the `old_to_new()` function to produce a more salt like syntax. * Added a cli option argument to allow providing a different file which would contain the several cloud providers configuration. * Besides the separate file for the could providers configuration, we also added support to include any `*.conf` file from `cloud.providers.d/` which is relative to the parent directory of the provided cloud providers configuration file. * Update the several documentation files in order to include examples of both the old and new cloud providers configuration syntax side-to-side.
This commit is contained in:
parent
4c6b33f72a
commit
ccacbaed02
@ -7,6 +7,8 @@ platforms Salt Cloud has been built to support.
|
|||||||
|
|
||||||
Set up the cloud config at ``/etc/salt/cloud``:
|
Set up the cloud config at ``/etc/salt/cloud``:
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# Set up the location of the salt master
|
# Set up the location of the salt master
|
||||||
@ -51,23 +53,113 @@ Set up the cloud config at ``/etc/salt/cloud``:
|
|||||||
AWS.ssh_username: ec2-user
|
AWS.ssh_username: ec2-user
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-southeast-public-ips:
|
||||||
|
# Set up the location of the salt master
|
||||||
|
#
|
||||||
|
minion:
|
||||||
|
master: saltmaster.example.com
|
||||||
|
|
||||||
|
# Specify whether to use public or private IP for deploy script.
|
||||||
|
#
|
||||||
|
# Valid options are:
|
||||||
|
# private_ips - The salt-master is also hosted with AWS
|
||||||
|
# public_ips - The salt-master is hosted outside of AWS
|
||||||
|
#
|
||||||
|
ssh_interface: public_ips
|
||||||
|
|
||||||
|
# Set the AWS access credentials (see below)
|
||||||
|
#
|
||||||
|
id: HJGRYCILJLKJYG
|
||||||
|
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
|
||||||
|
|
||||||
|
# Make sure this key is owned by root with permissions 0400.
|
||||||
|
#
|
||||||
|
private_key: /etc/salt/my_test_key.pem
|
||||||
|
keyname: my_test_key
|
||||||
|
securitygroup: default
|
||||||
|
|
||||||
|
# Optionally configure default region
|
||||||
|
#
|
||||||
|
location: ap-southeast-1
|
||||||
|
availability_zone: ap-southeast-1b
|
||||||
|
|
||||||
|
# Configure which user to use to run the deploy script. This setting is
|
||||||
|
# dependent upon the AMI that is used to deploy. It is usually safer to
|
||||||
|
# configure this individually in a profile, than globally. Typical users
|
||||||
|
# are:
|
||||||
|
#
|
||||||
|
# Amazon Linux -> ec2-user
|
||||||
|
# RHEL -> ec2-user
|
||||||
|
# CentOS -> ec2-user
|
||||||
|
# Ubuntu -> ubuntu
|
||||||
|
#
|
||||||
|
ssh_username: ec2-user
|
||||||
|
|
||||||
|
|
||||||
|
aws-southeast-private-ips:
|
||||||
|
# Set up the location of the salt master
|
||||||
|
#
|
||||||
|
minion:
|
||||||
|
master: saltmaster.example.com
|
||||||
|
|
||||||
|
# Specify whether to use public or private IP for deploy script.
|
||||||
|
#
|
||||||
|
# Valid options are:
|
||||||
|
# private_ips - The salt-master is also hosted with AWS
|
||||||
|
# public_ips - The salt-master is hosted outside of AWS
|
||||||
|
#
|
||||||
|
ssh_interface: private_ips
|
||||||
|
|
||||||
|
# Set the AWS access credentials (see below)
|
||||||
|
#
|
||||||
|
id: HJGRYCILJLKJYG
|
||||||
|
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
|
||||||
|
|
||||||
|
# Make sure this key is owned by root with permissions 0400.
|
||||||
|
#
|
||||||
|
private_key: /etc/salt/my_test_key.pem
|
||||||
|
keyname: my_test_key
|
||||||
|
securitygroup: default
|
||||||
|
|
||||||
|
# Optionally configure default region
|
||||||
|
#
|
||||||
|
location: ap-southeast-1
|
||||||
|
availability_zone: ap-southeast-1b
|
||||||
|
|
||||||
|
# Configure which user to use to run the deploy script. This setting is
|
||||||
|
# dependent upon the AMI that is used to deploy. It is usually safer to
|
||||||
|
# configure this individually in a profile, than globally. Typical users
|
||||||
|
# are:
|
||||||
|
#
|
||||||
|
# Amazon Linux -> ec2-user
|
||||||
|
# RHEL -> ec2-user
|
||||||
|
# CentOS -> ec2-user
|
||||||
|
# Ubuntu -> ubuntu
|
||||||
|
#
|
||||||
|
ssh_username: ec2-user
|
||||||
|
|
||||||
|
|
||||||
Access Credentials
|
Access Credentials
|
||||||
==================
|
==================
|
||||||
The ``id`` and ``key`` settings may be found in the Security Credentials area
|
The ``id`` and ``key`` settings may be found in the Security Credentials area
|
||||||
of the AWS Account page:
|
of the AWS Account page:
|
||||||
|
|
||||||
https://portal.aws.amazon.com/gp/aws/securityCredentials
|
https://portal.aws.amazon.com/gp/aws/securityCredentials
|
||||||
|
|
||||||
Both are located in the Access Credentials area of the page, under the Access
|
Both are located in the Access Credentials area of the page, under the Access
|
||||||
Keys tab. The ``id`` setting is labeled Access Key ID, and the ``key`` setting
|
Keys tab. The ``id`` setting is labeled Access Key ID, and the ``key`` setting
|
||||||
is labeled Secret Access Key.
|
is labeled Secret Access Key.
|
||||||
|
|
||||||
|
|
||||||
Key Pairs
|
Key Pairs
|
||||||
=========
|
=========
|
||||||
In order to create an instance with Salt installed and configured, a key pair
|
In order to create an instance with Salt installed and configured, a key pair
|
||||||
will need to be created. This can be done in the EC2 Management Console, in the
|
will need to be created. This can be done in the EC2 Management Console, in the
|
||||||
Key Pairs area. These key pairs are unique to a specific region. Keys in the
|
Key Pairs area. These key pairs are unique to a specific region. Keys in the
|
||||||
us-east-1 region can be configured at:
|
us-east-1 region can be configured at:
|
||||||
|
|
||||||
https://console.aws.amazon.com/ec2/home?region=us-east-1#s=KeyPairs
|
https://console.aws.amazon.com/ec2/home?region=us-east-1#s=KeyPairs
|
||||||
@ -76,23 +168,24 @@ Keys in the us-west-1 region can be configured at
|
|||||||
|
|
||||||
https://console.aws.amazon.com/ec2/home?region=us-west-1#s=KeyPairs
|
https://console.aws.amazon.com/ec2/home?region=us-west-1#s=KeyPairs
|
||||||
|
|
||||||
...and so on. When creating a key pair, the browser will prompt to download a
|
...and so on. When creating a key pair, the browser will prompt to download a
|
||||||
pem file. This file must be placed in a directory accessable by Salt Cloud,
|
pem file. This file must be placed in a directory accessable by Salt Cloud,
|
||||||
with permissions set to either 0400 or 0600.
|
with permissions set to either 0400 or 0600.
|
||||||
|
|
||||||
|
|
||||||
Security Groups
|
Security Groups
|
||||||
===============
|
===============
|
||||||
An instance on AWS needs to belong to a security group. Like key pairs, these
|
An instance on AWS needs to belong to a security group. Like key pairs, these
|
||||||
are unique to a specific region. These are also configured in the EC2 Management
|
are unique to a specific region. These are also configured in the EC2
|
||||||
Console. Security groups for the us-east-1 region can be configured at:
|
Management Console. Security groups for the us-east-1 region can be configured
|
||||||
|
at:
|
||||||
|
|
||||||
https://console.aws.amazon.com/ec2/home?region=us-east-1#s=SecurityGroups
|
https://console.aws.amazon.com/ec2/home?region=us-east-1#s=SecurityGroups
|
||||||
|
|
||||||
...and so on.
|
...and so on.
|
||||||
|
|
||||||
A security group defines firewall rules which an instance will adhere to. If
|
A security group defines firewall rules which an instance will adhere to. If
|
||||||
the salt-master is configured outside of AWS, the security group must open the
|
the salt-master is configured outside of AWS, the security group must open the
|
||||||
SSH port (usually port 22) in order for Salt Cloud to install Salt.
|
SSH port (usually port 22) in order for Salt Cloud to install Salt.
|
||||||
|
|
||||||
|
|
||||||
@ -100,26 +193,49 @@ Cloud Profiles
|
|||||||
==============
|
==============
|
||||||
Set up an initial profile at ``/etc/salt/cloud.profiles``:
|
Set up an initial profile at ``/etc/salt/cloud.profiles``:
|
||||||
|
|
||||||
|
* Using the old cloud providers configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
base_aws:
|
base_aws:
|
||||||
provider: aws
|
provider: aws
|
||||||
image: ami-e565ba8c
|
image: ami-e565ba8c
|
||||||
size: Micro Instance
|
size: Micro Instance
|
||||||
ssh-user: ec2-user
|
ssh-user: ec2-user
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud providers configuration format and the example
|
||||||
|
configuration above:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
base_aws_private:
|
||||||
|
provider: aws-southeast-private-ips
|
||||||
|
image: ami-e565ba8c
|
||||||
|
size: Micro Instance
|
||||||
|
ssh-user: ec2-user
|
||||||
|
|
||||||
|
base_aws_public:
|
||||||
|
provider: aws-southeast-public-ips
|
||||||
|
image: ami-e565ba8c
|
||||||
|
size: Micro Instance
|
||||||
|
ssh-user: ec2-user
|
||||||
|
|
||||||
|
|
||||||
The profile can be realized now with a salt command:
|
The profile can be realized now with a salt command:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# salt-cloud -p base_aws ami.example.com
|
# salt-cloud -p base_aws ami.example.com
|
||||||
|
# salt-cloud -p base_aws_public ami.example.com
|
||||||
|
# salt-cloud -p base_aws_private ami.example.com
|
||||||
|
|
||||||
This will create an instance named ``ami.example.com`` in EC2. The minion that
|
This will create an instance named ``ami.example.com`` in EC2. The minion that
|
||||||
is installed on this instance will have an ``id`` of ``ami.example.com``. If
|
is installed on this instance will have an ``id`` of ``ami.example.com``. If
|
||||||
the command was executed on the salt-master, its Salt key will automatically be
|
the command was executed on the salt-master, its Salt key will automatically be
|
||||||
signed on the master.
|
signed on the master.
|
||||||
|
|
||||||
Once the instance has been created with salt-minion installed, connectivity to
|
Once the instance has been created with salt-minion installed, connectivity to
|
||||||
it can be verified with Salt:
|
it can be verified with Salt:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -131,6 +247,8 @@ Required Settings
|
|||||||
=================
|
=================
|
||||||
The following settings are always required for AWS:
|
The following settings are always required for AWS:
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# Set the AWS login data
|
# Set the AWS login data
|
||||||
@ -141,21 +259,51 @@ The following settings are always required for AWS:
|
|||||||
AWS.private_key: /root/test.pem
|
AWS.private_key: /root/test.pem
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
# Set the AWS login data
|
||||||
|
aws-config:
|
||||||
|
id: HJGRYCILJLKJYG
|
||||||
|
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
|
||||||
|
keyname: test
|
||||||
|
securitygroup: quick-start
|
||||||
|
private_key: /root/test.pem
|
||||||
|
provider: aws
|
||||||
|
|
||||||
|
|
||||||
Optional Settings
|
Optional Settings
|
||||||
=================
|
=================
|
||||||
AWS allows a location to be set for servers to be deployed in. Availability
|
|
||||||
|
AWS allows a location to be set for servers to be deployed in. Availability
|
||||||
zones exist inside regions, and may be added to increase specificity.
|
zones exist inside regions, and may be added to increase specificity.
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# Optionally configure default region
|
# Optionally configure default region
|
||||||
AWS.location: ap-southeast-1
|
AWS.location: ap-southeast-1
|
||||||
AWS.availability_zone: ap-southeast-1b
|
AWS.availability_zone: ap-southeast-1b
|
||||||
|
|
||||||
AWS instances can have a public or private IP, or both. When an instance is
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-config:
|
||||||
|
# Optionally configure default region
|
||||||
|
location: ap-southeast-1
|
||||||
|
availability_zone: ap-southeast-1b
|
||||||
|
|
||||||
|
|
||||||
|
AWS instances can have a public or private IP, or both. When an instance is
|
||||||
deployed, Salt Cloud needs to log into it via SSH to run the deploy script.
|
deployed, Salt Cloud needs to log into it via SSH to run the deploy script.
|
||||||
By default, the public IP will be used for this. If the salt-cloud command
|
By default, the public IP will be used for this. If the salt-cloud command is
|
||||||
is run from another AWS instance, the private IP should be used.
|
run from another AWS instance, the private IP should be used.
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -163,21 +311,45 @@ is run from another AWS instance, the private IP should be used.
|
|||||||
# private_ips or public_ips
|
# private_ips or public_ips
|
||||||
AWS.ssh_interface: public_ips
|
AWS.ssh_interface: public_ips
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-config:
|
||||||
|
# Specify whether to use public or private IP for deploy script
|
||||||
|
# private_ips or public_ips
|
||||||
|
ssh_interface: public_ips
|
||||||
|
|
||||||
|
|
||||||
Many AWS instances do not allow remote access to the root user by default.
|
Many AWS instances do not allow remote access to the root user by default.
|
||||||
Instead, another user must be used to run the deploy script using sudo. Some
|
Instead, another user must be used to run the deploy script using sudo. Some
|
||||||
common usernames include ec2-user (for Amazon Linux), ubuntu (for Ubuntu
|
common usernames include ec2-user (for Amazon Linux), ubuntu (for Ubuntu
|
||||||
instances), admin (official Debian) and bitnami (for images provided by
|
instances), admin (official Debian) and bitnami (for images provided by
|
||||||
Bitnami).
|
Bitnami).
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# Configure which user to use to run the deploy script
|
# Configure which user to use to run the deploy script
|
||||||
AWS.ssh_username: ec2-user
|
AWS.ssh_username: ec2-user
|
||||||
|
|
||||||
Multiple usernames can be provided, in which case Salt Cloud will attempt to
|
* Using the new cloud configuration format:
|
||||||
guess the correct username. This is mostly useful in the main configuration
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-config
|
||||||
|
# Configure which user to use to run the deploy script
|
||||||
|
ssh_username: ec2-user
|
||||||
|
|
||||||
|
|
||||||
|
Multiple usernames can be provided, in which case Salt Cloud will attempt to
|
||||||
|
guess the correct username. This is mostly useful in the main configuration
|
||||||
file:
|
file:
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
AWS.ssh_username:
|
AWS.ssh_username:
|
||||||
@ -186,8 +358,23 @@ file:
|
|||||||
- admin
|
- admin
|
||||||
- bitnami
|
- bitnami
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-config:
|
||||||
|
ssh_username:
|
||||||
|
- ec2-user
|
||||||
|
- ubuntu
|
||||||
|
- admin
|
||||||
|
- bitnami
|
||||||
|
|
||||||
|
|
||||||
Multiple security groups can also be specified in the same fashion:
|
Multiple security groups can also be specified in the same fashion:
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
AWS.securitygroup:
|
AWS.securitygroup:
|
||||||
@ -207,10 +394,20 @@ each cloud profile:
|
|||||||
VirtualName: ephemeral1
|
VirtualName: ephemeral1
|
||||||
|
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-config:
|
||||||
|
securitygroup:
|
||||||
|
- default
|
||||||
|
- extra
|
||||||
|
|
||||||
|
|
||||||
Modify AWS Tags
|
Modify AWS Tags
|
||||||
===============
|
===============
|
||||||
One of the features of AWS is the ability to tag resources. In fact, under the
|
One of the features of AWS is the ability to tag resources. In fact, under the
|
||||||
hood, the names given to EC2 instances by salt-cloud are actually just stored
|
hood, the names given to EC2 instances by salt-cloud are actually just stored
|
||||||
as a tag called Name. Salt Cloud has the ability to manage these tags:
|
as a tag called Name. Salt Cloud has the ability to manage these tags:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -222,8 +419,8 @@ as a tag called Name. Salt Cloud has the ability to manage these tags:
|
|||||||
|
|
||||||
Rename AWS Instances
|
Rename AWS Instances
|
||||||
====================
|
====================
|
||||||
As mentioned above, AWS instances are named via a tag. However, renaming an
|
As mentioned above, AWS instances are named via a tag. However, renaming an
|
||||||
instance by renaming its tag will cause the salt keys to mismatch. A rename
|
instance by renaming its tag will cause the salt keys to mismatch. A rename
|
||||||
function exists which renames both the instance, and the salt keys.
|
function exists which renames both the instance, and the salt keys.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -233,7 +430,7 @@ function exists which renames both the instance, and the salt keys.
|
|||||||
|
|
||||||
AWS Termination Protection
|
AWS Termination Protection
|
||||||
==========================
|
==========================
|
||||||
AWS allows the user to enable and disable termination protection on a specific
|
AWS allows the user to enable and disable termination protection on a specific
|
||||||
instance. An instance with this protection enabled cannot be destroyed.
|
instance. An instance with this protection enabled cannot be destroyed.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -244,31 +441,43 @@ instance. An instance with this protection enabled cannot be destroyed.
|
|||||||
|
|
||||||
Rename on Destroy
|
Rename on Destroy
|
||||||
=================
|
=================
|
||||||
When instances on AWS are destroyed, there will be a lag between the time that
|
When instances on AWS are destroyed, there will be a lag between the time that
|
||||||
the action is sent, and the time that Amazon cleans up the instance. During this
|
the action is sent, and the time that Amazon cleans up the instance. During
|
||||||
time, the instance still retails a Name tag, which will cause a collision if the
|
this time, the instance still retails a Name tag, which will cause a collision
|
||||||
creation of an instance with the same name is attempted before the cleanup
|
if the creation of an instance with the same name is attempted before the
|
||||||
occurs. In order to avoid such collisions, Salt Cloud can be configured to
|
cleanup occurs. In order to avoid such collisions, Salt Cloud can be configured
|
||||||
rename instances when they are destroyed. The new name will look something like:
|
to rename instances when they are destroyed. The new name will look something
|
||||||
|
like:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
myinstance-DEL20f5b8ad4eb64ed88f2c428df80a1a0c
|
myinstance-DEL20f5b8ad4eb64ed88f2c428df80a1a0c
|
||||||
|
|
||||||
In order to enable this, add AWS.rename_on_destroy line to the main
|
|
||||||
|
In order to enable this, add AWS.rename_on_destroy line to the main
|
||||||
configuration file:
|
configuration file:
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
AWS.rename_on_destroy: True
|
AWS.rename_on_destroy: True
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-config:
|
||||||
|
rename_on_destroy: True
|
||||||
|
|
||||||
|
|
||||||
EC2 Images
|
EC2 Images
|
||||||
==========
|
==========
|
||||||
The following are lists of available AMI images, generally sorted by OS. These
|
The following are lists of available AMI images, generally sorted by OS. These
|
||||||
lists are on 3rd-party websites, are not managed by Salt Stack in any way. They
|
lists are on 3rd-party websites, are not managed by Salt Stack in any way. They
|
||||||
are provided here as a reference for those who are interested, and contain no
|
are provided here as a reference for those who are interested, and contain no
|
||||||
warranty (express or implied) from anyone affiliated with Salt Stack. Most of
|
warranty (express or implied) from anyone affiliated with Salt Stack. Most of
|
||||||
them have never been used, much less tested, by the Salt Stack team.
|
them have never been used, much less tested, by the Salt Stack team.
|
||||||
|
|
||||||
* `Arch Linux`__
|
* `Arch Linux`__
|
||||||
@ -298,10 +507,12 @@ them have never been used, much less tested, by the Salt Stack team.
|
|||||||
|
|
||||||
Experimental EC2 Driver
|
Experimental EC2 Driver
|
||||||
=======================
|
=======================
|
||||||
An experimental driver has been added to Salt Cloud called EC2. The
|
An experimental driver has been added to Salt Cloud called EC2. The
|
||||||
configuration for this driver is the same as for AWS, but with EC2 in the
|
configuration for this driver is the same as for AWS, but with EC2 in the
|
||||||
argument names:
|
argument names:
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# Set the EC2 login data
|
# Set the EC2 login data
|
||||||
@ -311,21 +522,35 @@ argument names:
|
|||||||
EC2.securitygroup: quick-start
|
EC2.securitygroup: quick-start
|
||||||
EC2.private_key: /root/test.pem
|
EC2.private_key: /root/test.pem
|
||||||
|
|
||||||
This driver contains optimizations over the old AWS driver, which increase
|
|
||||||
speed and functionality. However, because this is a new driver, it is currently
|
* Using the new cloud configuration format:
|
||||||
considered to be experimental, and as such, the old AWS driver may still be
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
ec2-config:
|
||||||
|
# Set the EC2 login data
|
||||||
|
id: HJGRYCILJLKJYG
|
||||||
|
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
|
||||||
|
keyname: test
|
||||||
|
securitygroup: quick-start
|
||||||
|
private_key: /root/test.pem
|
||||||
|
|
||||||
|
|
||||||
|
This driver contains optimizations over the old AWS driver, which increase
|
||||||
|
speed and functionality. However, because this is a new driver, it is currently
|
||||||
|
considered to be experimental, and as such, the old AWS driver may still be
|
||||||
used as before.
|
used as before.
|
||||||
|
|
||||||
IMPORTANT: Because this driver is in experimental status, its usage and
|
IMPORTANT: Because this driver is in experimental status, its usage and
|
||||||
configuration should be expected to change.
|
configuration should be expected to change.
|
||||||
|
|
||||||
The remainder of this document describes settings which may be used with the
|
The remainder of this document describes settings which may be used with the
|
||||||
EC2 driver.
|
EC2 driver.
|
||||||
|
|
||||||
|
|
||||||
show_image
|
show_image
|
||||||
==========
|
==========
|
||||||
This is a function that describes an AMI on EC2. This will give insight as to
|
This is a function that describes an AMI on EC2. This will give insight as to
|
||||||
the defaults that will be applied to an instance using a particular AMI.
|
the defaults that will be applied to an instance using a particular AMI.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -335,9 +560,9 @@ the defaults that will be applied to an instance using a particular AMI.
|
|||||||
|
|
||||||
show_instance
|
show_instance
|
||||||
=============
|
=============
|
||||||
This action is a thin wrapper around --full-query, which displays details on a
|
This action is a thin wrapper around --full-query, which displays details on a
|
||||||
single instance only. In an environment with several machines, this will save a
|
single instance only. In an environment with several machines, this will save a
|
||||||
user from having to sort through all instance data, just to examine a single
|
user from having to sort through all instance data, just to examine a single
|
||||||
instance.
|
instance.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -347,10 +572,10 @@ instance.
|
|||||||
|
|
||||||
delvol_on_destroy
|
delvol_on_destroy
|
||||||
=================
|
=================
|
||||||
This argument overrides the default DeleteOnTermination setting in the AMI for
|
This argument overrides the default DeleteOnTermination setting in the AMI for
|
||||||
the root EBS volume for an instance. Many AMIs contain 'false' as a default,
|
the root EBS volume for an instance. Many AMIs contain 'false' as a default,
|
||||||
resulting in orphaned volumes in the EC2 account, which may unknowingly be
|
resulting in orphaned volumes in the EC2 account, which may unknowingly be
|
||||||
charged to the account. This setting can be added to the profile or map file
|
charged to the account. This setting can be added to the profile or map file
|
||||||
for an instance.
|
for an instance.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
@ -358,14 +583,25 @@ for an instance.
|
|||||||
delvol_on_destroy: True
|
delvol_on_destroy: True
|
||||||
|
|
||||||
|
|
||||||
This can also be set as a global setting in the EC2 cloud configuration:
|
This can also be set as a cloud provider setting in the EC2 cloud
|
||||||
|
configuration:
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
EC2.delvol_on_destroy: True
|
EC2.delvol_on_destroy: True
|
||||||
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
The setting for this may be changed on an existing instance using one of the
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
ec2-config:
|
||||||
|
delvol_on_destroy: True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The setting for this may be changed on an existing instance using one of the
|
||||||
following commands:
|
following commands:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -376,8 +612,9 @@ following commands:
|
|||||||
|
|
||||||
EC2 Termination Protection
|
EC2 Termination Protection
|
||||||
==========================
|
==========================
|
||||||
AWS allows the user to enable and disable termination protection on a specific
|
|
||||||
instance. An instance with this protection enabled cannot be destroyed. The EC2
|
AWS allows the user to enable and disable termination protection on a specific
|
||||||
|
instance. An instance with this protection enabled cannot be destroyed. The EC2
|
||||||
driver adds a show_term_protect action to the regular AWS functionality.
|
driver adds a show_term_protect action to the regular AWS functionality.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -389,21 +626,23 @@ driver adds a show_term_protect action to the regular AWS functionality.
|
|||||||
|
|
||||||
Alternate Endpoint
|
Alternate Endpoint
|
||||||
==================
|
==================
|
||||||
Normally, ec2 endpoints are build using the region and the service_url. The
|
Normally, EC2 endpoints are build using the region and the service_url. The
|
||||||
resulting endpoint would follow this pattern:
|
resulting endpoint would follow this pattern:
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
ec2.<region>.<service_url>
|
ec2.<region>.<service_url>
|
||||||
|
|
||||||
|
|
||||||
This results in an endpoint that looks like:
|
This results in an endpoint that looks like:
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
|
|
||||||
ec2.us-east-1.amazonaws.com
|
ec2.us-east-1.amazonaws.com
|
||||||
|
|
||||||
There are other projects that support an EC2 compatibility layer, which this
|
|
||||||
scheme does not account for. This can be overridden by specifying the endpoint
|
There are other projects that support an EC2 compatibility layer, which this
|
||||||
|
scheme does not account for. This can be overridden by specifying the endpoint
|
||||||
directly in the main cloud configuration file:
|
directly in the main cloud configuration file:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
@ -419,8 +658,8 @@ The EC2 driver has several functions and actions for management of EBS volumes.
|
|||||||
Creating Volumes
|
Creating Volumes
|
||||||
----------------
|
----------------
|
||||||
A volume may be created, independent of an instance. A zone must be specified.
|
A volume may be created, independent of an instance. A zone must be specified.
|
||||||
A size or a snapshot may be specified (in GiB). If neither is given, a default
|
A size or a snapshot may be specified (in GiB). If neither is given, a default
|
||||||
size of 10 GiB will be used. If a snapshot is given, the size of the snapshot
|
size of 10 GiB will be used. If a snapshot is given, the size of the snapshot
|
||||||
will be used.
|
will be used.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -432,8 +671,8 @@ will be used.
|
|||||||
|
|
||||||
Attaching Volumes
|
Attaching Volumes
|
||||||
-----------------
|
-----------------
|
||||||
Unattached volumes may be attached to an instance. The following values are
|
Unattached volumes may be attached to an instance. The following values are
|
||||||
required: name or instance_id, volume_id and device.
|
required; name or instance_id, volume_id and device.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -442,7 +681,7 @@ required: name or instance_id, volume_id and device.
|
|||||||
|
|
||||||
Show a Volume
|
Show a Volume
|
||||||
-------------
|
-------------
|
||||||
The details about an existing volume may be retreived.
|
The details about an existing volume may be retrieved.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@ -475,9 +714,9 @@ The EC2 driver has the ability to manage key pairs.
|
|||||||
|
|
||||||
Creating a Key Pair
|
Creating a Key Pair
|
||||||
-------------------
|
-------------------
|
||||||
A key pair is required in order to create an instance. When creating a key pair
|
A key pair is required in order to create an instance. When creating a key pair
|
||||||
with this function, the return data will contain a copy of the private key.
|
with this function, the return data will contain a copy of the private key.
|
||||||
This private key is not stored by Amazon, and will not be obtainable past this
|
This private key is not stored by Amazon, and will not be obtainable past this
|
||||||
point, and should be stored immediately.
|
point, and should be stored immediately.
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -487,7 +726,7 @@ point, and should be stored immediately.
|
|||||||
|
|
||||||
Show a Key Pair
|
Show a Key Pair
|
||||||
---------------
|
---------------
|
||||||
This function will show the details related to a key pair, not including the
|
This function will show the details related to a key pair, not including the
|
||||||
private key itself (which is not stored by Amazon).
|
private key itself (which is not stored by Amazon).
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
@ -2,15 +2,15 @@
|
|||||||
Core Configuration
|
Core Configuration
|
||||||
==================
|
==================
|
||||||
|
|
||||||
A number of core configuration options and some options that are global to the
|
A number of core configuration options and some options that are global to the
|
||||||
VM profiles can be set in the cloud config file. By default this file is
|
VM profiles can be set in the cloud configuration file. By default this file is
|
||||||
located at ``/etc/salt/cloud``.
|
located at ``/etc/salt/cloud``.
|
||||||
|
|
||||||
|
|
||||||
Minion Configuration
|
Minion Configuration
|
||||||
====================
|
====================
|
||||||
|
|
||||||
The default minion configuration is set up in this file. This is where the
|
The default minion configuration is set up in this file. This is where the
|
||||||
minions that are created derive their configuration.
|
minions that are created derive their configuration.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
@ -18,6 +18,7 @@ minions that are created derive their configuration.
|
|||||||
minion:
|
minion:
|
||||||
master: saltmaster.example.com
|
master: saltmaster.example.com
|
||||||
|
|
||||||
|
|
||||||
This is the location in particular to specify the location of the salt master.
|
This is the location in particular to specify the location of the salt master.
|
||||||
|
|
||||||
|
|
||||||
@ -26,21 +27,58 @@ Cloud Configurations
|
|||||||
|
|
||||||
The data specific to interacting with public clouds is set up here.
|
The data specific to interacting with public clouds is set up here.
|
||||||
|
|
||||||
|
**ATTENTION**: Since version 0.8.7 a new cloud provider configuration syntax
|
||||||
|
was implemented. It will allow for multiple configurations of the same cloud
|
||||||
|
provider where only minor details can change, for example, the region for an
|
||||||
|
EC2 instance. While the old format is still supported and automatically
|
||||||
|
migrated every time salt-cloud configuration is parsed, a choice was made to
|
||||||
|
warn the user or even exit with an error if both formats are mixed.
|
||||||
|
|
||||||
|
While moving towards an improved and extensible configuration handling
|
||||||
|
regarding the cloud providers, ``--providers-config``, which defaults to
|
||||||
|
``/etc/salt/cloud.providers`` was added to the cli parser. It allows for the
|
||||||
|
cloud providers configuration to be provided in a different file, and/or even
|
||||||
|
any matching file on a sub-directory, ``cloud.providers.d/*.conf`` which is
|
||||||
|
relative to the providers configuration file(with the above configuration file
|
||||||
|
as an example, ``/etc/salt/cloud.providers.d/*.conf``).
|
||||||
|
|
||||||
|
|
||||||
Rackspace
|
Rackspace
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Rackspace cloud requires two configuration options:
|
Rackspace cloud requires two configuration options:
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
RACKSPACE.user: example_user
|
RACKSPACE.user: example_user
|
||||||
RACKSPACE.apikey: 123984bjjas87034
|
RACKSPACE.apikey: 123984bjjas87034
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rackspace-config:
|
||||||
|
user: example_user
|
||||||
|
apikey: 123984bjjas87034
|
||||||
|
provider: rackspace
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have ``provider:
|
||||||
|
rackspace-config`` instead of ``provider: rackspace`` on a profile
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
|
||||||
Amazon AWS
|
Amazon AWS
|
||||||
----------
|
----------
|
||||||
|
|
||||||
A number of configuration options are required for Amazon AWS:
|
A number of configuration options are required for Amazon AWS:
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
AWS.id: HJGRYCILJLKJYG
|
AWS.id: HJGRYCILJLKJYG
|
||||||
@ -49,27 +87,72 @@ A number of configuration options are required for Amazon AWS:
|
|||||||
AWS.securitygroup: quick-start
|
AWS.securitygroup: quick-start
|
||||||
AWS.private_key: /root/test.pem
|
AWS.private_key: /root/test.pem
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
aws-quick-start:
|
||||||
|
id: HJGRYCILJLKJYG
|
||||||
|
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
|
||||||
|
keyname: test
|
||||||
|
securitygroup: quick-start
|
||||||
|
private_key: /root/test.pem
|
||||||
|
provider: aws
|
||||||
|
|
||||||
|
aws-default:
|
||||||
|
id: HJGRYCILJLKJYG
|
||||||
|
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
|
||||||
|
keyname: test
|
||||||
|
securitygroup: default
|
||||||
|
private_key: /root/test.pem
|
||||||
|
provider: aws
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have
|
||||||
|
``provider: aws-quick-start`` or ``provider: aws-default`` instead of
|
||||||
|
``provider: aws`` on a profile configuration.
|
||||||
|
|
||||||
Linode
|
Linode
|
||||||
------
|
------
|
||||||
|
|
||||||
Linode requires a single api key, but the default root password also needs
|
Linode requires a single API key, but the default root password also needs to
|
||||||
to be set:
|
be set:
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
LINODE.apikey: asldkgfakl;sdfjsjaslfjaklsdjf;askldjfaaklsjdfhasldsadfghdkf
|
LINODE.apikey: asldkgfakl;sdfjsjaslfjaklsdjf;askldjfaaklsjdfhasldsadfghdkf
|
||||||
LINODE.password: F00barbaz
|
LINODE.password: F00barbaz
|
||||||
|
|
||||||
The password needs to be 8 characters and contain lowercase, uppercase and
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
linode-foo:
|
||||||
|
apikey: asldkgfakl;sdfjsjaslfjaklsdjf;askldjfaaklsjdfhasldsadfghdkf
|
||||||
|
password: F00barbaz
|
||||||
|
provider: linode
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have ``provider:
|
||||||
|
linode-foo`` instead of ``provider: linode`` on a profile configuration.
|
||||||
|
|
||||||
|
The password needs to be 8 characters and contain lowercase, uppercase and
|
||||||
numbers.
|
numbers.
|
||||||
|
|
||||||
|
|
||||||
Joyent Cloud
|
Joyent Cloud
|
||||||
------------
|
------------
|
||||||
|
|
||||||
The Joyent cloud requires three configuration paramaters. The user name and
|
The Joyent cloud requires three configuration parameters. The user name and
|
||||||
password that are used to log into the Joyent system, and the location of
|
password that are used to log into the Joyent system, and the location of the
|
||||||
the private ssh key associated with the Joyent account. The ssh key is needed
|
private ssh key associated with the Joyent account. The ssh key is needed to
|
||||||
to send the provisioning commands up to the freshly created virtual machine,
|
send the provisioning commands up to the freshly created virtual machine,
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -77,29 +160,65 @@ to send the provisioning commands up to the freshly created virtual machine,
|
|||||||
JOYENT.password: saltybacon
|
JOYENT.password: saltybacon
|
||||||
JOYENT.private_key: /root/joyent.pem
|
JOYENT.private_key: /root/joyent.pem
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
joyent-config:
|
||||||
|
user: fred
|
||||||
|
password: saltybacon
|
||||||
|
private_key: /root/joyent.pem
|
||||||
|
provider: joyent
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have ``provider:
|
||||||
|
joyent-config`` instead of ``provider: joyent`` on a profile configuration.
|
||||||
|
|
||||||
|
|
||||||
GoGrid
|
GoGrid
|
||||||
------
|
------
|
||||||
|
|
||||||
To use Salt Cloud with GoGrid log into the GoGrid web interface and
|
To use Salt Cloud with GoGrid log into the GoGrid web interface and create an
|
||||||
create an api key. Do this by clicking on "My Account" and then going to the
|
API key. Do this by clicking on "My Account" and then going to the API Keys
|
||||||
API Keys tab.
|
tab.
|
||||||
|
|
||||||
The GOGRID.apikey and the GOGRID.sharedsecret configuration paramaters need to
|
The GOGRID.apikey and the GOGRID.sharedsecret configuration parameters need to
|
||||||
be set in the config file to enable interfacing with GoGrid:
|
be set in the configuration file to enable interfacing with GoGrid:
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
GOGRID.apikey: asdff7896asdh789
|
GOGRID.apikey: asdff7896asdh789
|
||||||
GOGRID.sharedsecret: saltybacon
|
GOGRID.sharedsecret: saltybacon
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
gogrid-config:
|
||||||
|
apikey: asdff7896asdh789
|
||||||
|
sharedsecret: saltybacon
|
||||||
|
provider: gogrid
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have
|
||||||
|
``provider: gogrid-config`` instead of ``provider: gogrid`` on a profile
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
|
||||||
OpenStack
|
OpenStack
|
||||||
---------
|
---------
|
||||||
|
|
||||||
OpenStack configuration differs between providers, and at the moment several
|
OpenStack configuration differs between providers, and at the moment several
|
||||||
options need to be specified. This module has been officially tested against
|
options need to be specified. This module has been officially tested against
|
||||||
the HP and the Rackspace implementations, and some examples are provided for
|
the HP and the Rackspace implementations, and some examples are provided for
|
||||||
both.
|
both.
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# For HP
|
# For HP
|
||||||
@ -122,33 +241,94 @@ both.
|
|||||||
OPENSTACK.tenant: 5555555
|
OPENSTACK.tenant: 5555555
|
||||||
OPENSTACK.password: mypass
|
OPENSTACK.password: mypass
|
||||||
|
|
||||||
If you have an API key for your provider, it may be specified instead of a
|
|
||||||
|
If you have an API key for your provider, it may be specified instead of a
|
||||||
password:
|
password:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
OPENSTACK.apikey: 901d3f579h23c8v73q9
|
OPENSTACK.apikey: 901d3f579h23c8v73q9
|
||||||
|
|
||||||
You will certainly need to configure the ``user``, ``tenant`` and either
|
|
||||||
``password`` or ``apikey``.
|
|
||||||
|
|
||||||
If your OpenStack instances only have private IP addresses and a CIDR range of
|
* Using the new configuration format:
|
||||||
private addresses are not reachable from the salt-master, you may set your
|
|
||||||
preference to have Salt ignore it:
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
OPENSTACK.ignore_cidr: 192.168.0.0/16
|
# For HP
|
||||||
|
openstack-hp-config:
|
||||||
|
identity_url:
|
||||||
|
'https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/'
|
||||||
|
compute_name: Compute
|
||||||
|
compute_region: 'az-1.region-a.geo-1'
|
||||||
|
tenant: myuser-tenant1
|
||||||
|
user: myuser
|
||||||
|
ssh_key_name: mykey
|
||||||
|
ssh_key_file: '/etc/salt/hpcloud/mykey.pem'
|
||||||
|
password: mypass
|
||||||
|
provider: openstack
|
||||||
|
|
||||||
|
# For Rackspace
|
||||||
|
openstack-rackspace-config:
|
||||||
|
identity_url: 'https://identity.api.rackspacecloud.com/v2.0/tokens'
|
||||||
|
compute_name: cloudServersOpenStack
|
||||||
|
protocol: ipv4
|
||||||
|
compute_region: DFW
|
||||||
|
protocol: ipv4
|
||||||
|
user: myuser
|
||||||
|
tenant: 5555555
|
||||||
|
password: mypass
|
||||||
|
provider: openstack
|
||||||
|
|
||||||
|
|
||||||
|
If you have an API key for your provider, it may be specified instead of a
|
||||||
|
password:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
openstack-hp-config:
|
||||||
|
apikey: 901d3f579h23c8v73q9
|
||||||
|
|
||||||
|
openstack-rackspace-config:
|
||||||
|
apikey: 901d3f579h23c8v73q9
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have
|
||||||
|
``provider: openstack-hp-config`` or ``provider: openstack-rackspace-config``
|
||||||
|
instead of ``provider: openstack`` on a profile configuration.
|
||||||
|
|
||||||
|
|
||||||
|
You will certainly need to configure the ``user``, ``tenant`` and either
|
||||||
|
``password`` or ``apikey``.
|
||||||
|
|
||||||
|
|
||||||
|
If your OpenStack instances only have private IP addresses and a CIDR range of
|
||||||
|
private addresses are not reachable from the salt-master, you may set your
|
||||||
|
preference to have Salt ignore it. Using the old could configurations syntax:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
OPENSTACK.ignore_cidr: 192.168.0.0/16
|
||||||
|
|
||||||
|
|
||||||
|
Using the new syntax:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
openstack-config:
|
||||||
|
ignore_cidr: 192.168.0.0/16
|
||||||
|
|
||||||
|
|
||||||
IBM SmartCloud Enterprise
|
IBM SmartCloud Enterprise
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
In addition to a username and password, the IBM SCE module requires an SSH key,
|
In addition to a username and password, the IBM SCE module requires an SSH key,
|
||||||
which is currently configured inside IBM's web interface. A location is also
|
which is currently configured inside IBM's web interface. A location is also
|
||||||
required to create instances, but not to query their cloud. This is important,
|
required to create instances, but not to query their cloud. This is important,
|
||||||
because you need to use salt-cloud --list-locations (with the other options
|
because you need to use salt-cloud --list-locations (with the other options
|
||||||
already set) in order to find the name of the location that you want to use.
|
already set) in order to find the name of the location that you want to use.
|
||||||
|
|
||||||
|
* Using the old format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
IBMSCE.user: myuser@mycorp.com
|
IBMSCE.user: myuser@mycorp.com
|
||||||
@ -158,3 +338,20 @@ already set) in order to find the name of the location that you want to use.
|
|||||||
IBMSCE.location: Raleigh
|
IBMSCE.location: Raleigh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
ibmsce-config:
|
||||||
|
user: myuser@mycorp.com
|
||||||
|
password: mypass
|
||||||
|
ssh_key_name: mykey
|
||||||
|
ssh_key_file: '/etc/salt/ibm/mykey.pem'
|
||||||
|
location: Raleigh
|
||||||
|
provider: ibmsce
|
||||||
|
|
||||||
|
|
||||||
|
**NOTE**: With the new providers configuration syntax you would have
|
||||||
|
``provider: imbsce-config`` instead of ``provider: ibmsce`` on a profile
|
||||||
|
configuration.
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
Getting Started With Parallels
|
Getting Started With Parallels
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
Parallels Cloud Server is a product by Parallels that delivers a cloud hosting
|
Parallels Cloud Server is a product by Parallels that delivers a cloud hosting
|
||||||
solution. The PARALLELS module for Salt Cloud enables you to manage instances
|
solution. The PARALLELS module for Salt Cloud enables you to manage instances
|
||||||
hosted by a provider using PCS. Further information can be found at:
|
hosted by a provider using PCS. Further information can be found at:
|
||||||
|
|
||||||
http://www.parallels.com/products/pcs/
|
http://www.parallels.com/products/pcs/
|
||||||
|
|
||||||
Set up the cloud config at ``/etc/salt/cloud``:
|
* Using the old format, set up the cloud configuration at ``/etc/salt/cloud``:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -27,15 +27,42 @@ Set up the cloud config at ``/etc/salt/cloud``:
|
|||||||
PARALLELS.url: https://api.cloud.xmission.com:4465/paci/v1.0/
|
PARALLELS.url: https://api.cloud.xmission.com:4465/paci/v1.0/
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new format, set up the cloud configuration at
|
||||||
|
``/etc/salt/cloud.providers`` or
|
||||||
|
``/etc/salt/cloud.providers.d/parallels.conf``:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
parallels-config:
|
||||||
|
# Set up the location of the salt master
|
||||||
|
#
|
||||||
|
minion:
|
||||||
|
master: saltmaster.example.com
|
||||||
|
|
||||||
|
# Set the PARALLELS access credentials (see below)
|
||||||
|
#
|
||||||
|
user: myuser
|
||||||
|
password: badpass
|
||||||
|
|
||||||
|
# Set the access URL for your PARALLELS provider
|
||||||
|
#
|
||||||
|
url: https://api.cloud.xmission.com:4465/paci/v1.0/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Access Credentials
|
Access Credentials
|
||||||
==================
|
==================
|
||||||
The ``user``, ``password`` and ``url`` will be provided to you by your cloud
|
The ``user``, ``password`` and ``url`` will be provided to you by your cloud
|
||||||
provider. These are all required in order for the PARALLELS driver to work.
|
provider. These are all required in order for the PARALLELS driver to work.
|
||||||
|
|
||||||
|
|
||||||
Cloud Profiles
|
Cloud Profiles
|
||||||
==============
|
==============
|
||||||
Set up an initial profile at ``/etc/salt/cloud.profiles``:
|
Set up an initial profile at ``/etc/salt/cloud.profiles`` or
|
||||||
|
``/etc/salt/cloud.profiles.d/parallels.conf``:
|
||||||
|
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -43,18 +70,30 @@ Set up an initial profile at ``/etc/salt/cloud.profiles``:
|
|||||||
provider: parallels
|
provider: parallels
|
||||||
image: ubuntu-12.04-x86_64
|
image: ubuntu-12.04-x86_64
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format and the cloud configuration example
|
||||||
|
from above:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
parallels-ubuntu:
|
||||||
|
provider: parallels-config
|
||||||
|
image: ubuntu-12.04-x86_64
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
The profile can be realized now with a salt command:
|
The profile can be realized now with a salt command:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
# salt-cloud -p parallels-ubuntu myubuntu
|
# salt-cloud -p parallels-ubuntu myubuntu
|
||||||
|
|
||||||
This will create an instance named ``myubuntu`` on the cloud provider. The
|
This will create an instance named ``myubuntu`` on the cloud provider. The
|
||||||
minion that is installed on this instance will have an ``id`` of ``myubuntu``.
|
minion that is installed on this instance will have an ``id`` of ``myubuntu``.
|
||||||
If the command was executed on the salt-master, its Salt key will automatically
|
If the command was executed on the salt-master, its Salt key will automatically
|
||||||
be signed on the master.
|
be signed on the master.
|
||||||
|
|
||||||
Once the instance has been created with salt-minion installed, connectivity to
|
Once the instance has been created with salt-minion installed, connectivity to
|
||||||
it can be verified with Salt:
|
it can be verified with Salt:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -66,6 +105,9 @@ Required Settings
|
|||||||
=================
|
=================
|
||||||
The following settings are always required for PARALLELS:
|
The following settings are always required for PARALLELS:
|
||||||
|
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
PARALLELS.user: myuser
|
PARALLELS.user: myuser
|
||||||
@ -73,12 +115,23 @@ The following settings are always required for PARALLELS:
|
|||||||
PARALLELS.url: https://api.cloud.xmission.com:4465/paci/v1.0/
|
PARALLELS.url: https://api.cloud.xmission.com:4465/paci/v1.0/
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
parallels-config:
|
||||||
|
user: myuser
|
||||||
|
password: badpass
|
||||||
|
url: https://api.cloud.xmission.com:4465/paci/v1.0/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Optional Settings
|
Optional Settings
|
||||||
=================
|
=================
|
||||||
Unlike other cloud providers in Salt Cloud, Parallels does not utilize a
|
Unlike other cloud providers in Salt Cloud, Parallels does not utilize a
|
||||||
``size`` setting. This is because Parallels allows the end-user to specify a
|
``size`` setting. This is because Parallels allows the end-user to specify a
|
||||||
more detailed configuration for their instances, than is allowed by many other
|
more detailed configuration for their instances, than is allowed by many other
|
||||||
cloud providers. The following options are available to be used in a profile,
|
cloud providers. The following options are available to be used in a profile,
|
||||||
with their default settings listed.
|
with their default settings listed.
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
@ -2,7 +2,7 @@ VM Profiles
|
|||||||
===========
|
===========
|
||||||
|
|
||||||
Salt cloud designates virtual machines inside the profile configuration file.
|
Salt cloud designates virtual machines inside the profile configuration file.
|
||||||
The profile configuration file defaults to ``/etc/salt/cloud.profiles`` and is
|
The profile configuration file defaults to ``/etc/salt/cloud.profiles`` and is
|
||||||
a yaml configuration. The syntax for declaring profiles is simple:
|
a yaml configuration. The syntax for declaring profiles is simple:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
@ -13,7 +13,8 @@ a yaml configuration. The syntax for declaring profiles is simple:
|
|||||||
size: 256 server
|
size: 256 server
|
||||||
script: Fedora
|
script: Fedora
|
||||||
|
|
||||||
A few key peices of information need to be declared and can change based on the
|
|
||||||
|
A few key pieces of information need to be declared and can change based on the
|
||||||
public cloud provider. A number of additional parameters can also be inserted:
|
public cloud provider. A number of additional parameters can also be inserted:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
@ -29,6 +30,7 @@ public cloud provider. A number of additional parameters can also be inserted:
|
|||||||
grains:
|
grains:
|
||||||
role: webserver
|
role: webserver
|
||||||
|
|
||||||
|
|
||||||
The image must be selected from available images. Similarly, sizes must be
|
The image must be selected from available images. Similarly, sizes must be
|
||||||
selected from the list of sizes. To get a list of available images and sizes
|
selected from the list of sizes. To get a list of available images and sizes
|
||||||
use the following command:
|
use the following command:
|
||||||
@ -38,19 +40,24 @@ use the following command:
|
|||||||
salt-cloud --list-images openstack
|
salt-cloud --list-images openstack
|
||||||
salt-cloud --list-sizes openstack
|
salt-cloud --list-sizes openstack
|
||||||
|
|
||||||
Some parameters can be specified in the main Salt cloud config file and then
|
|
||||||
are applied to all cloud profiles. For instance if only a single cloud provider
|
|
||||||
is being used then the provider option can be declared in the Salt cloud config
|
|
||||||
file.
|
|
||||||
|
|
||||||
Multiple Config Files
|
Some parameters can be specified in the main Salt cloud configuration file and
|
||||||
---------------------
|
then are applied to all cloud profiles. For instance if only a single cloud
|
||||||
|
provider is being used then the provider option can be declared in the Salt
|
||||||
|
cloud configuration file.
|
||||||
|
|
||||||
|
|
||||||
|
Multiple Configuration Files
|
||||||
|
----------------------------
|
||||||
|
|
||||||
In addition to ``/etc/salt/cloud.profiles``, profiles can also be specified in
|
In addition to ``/etc/salt/cloud.profiles``, profiles can also be specified in
|
||||||
any file matching ``/etc/salt/cloud.profiles.d/*conf``. This allows for more
|
any file matching ``cloud.profiles.d/*conf`` which is a sub-directory relative
|
||||||
|
to the profiles configuration file(with the above configuration file as an
|
||||||
|
example, ``/etc/salt/cloud.profiles.d/*.conf``). This allows for more
|
||||||
extensible configuration, and plays nicely with various configuration
|
extensible configuration, and plays nicely with various configuration
|
||||||
management tools as well as version control systems.
|
management tools as well as version control systems.
|
||||||
|
|
||||||
|
|
||||||
Larger Example
|
Larger Example
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
Getting Started With Rackspace
|
Getting Started With Rackspace
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
Rackspace is a major public cloud platform and is one of the core platforms
|
Rackspace is a major public cloud platform and is one of the core platforms
|
||||||
that Salt Cloud has been built to support.
|
that Salt Cloud has been built to support.
|
||||||
|
|
||||||
Set up the cloud config at ``/etc/salt/cloud``:
|
* Using the old format, set up the cloud configuration at ``/etc/salt/cloud``:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -31,8 +31,39 @@ Set up the cloud config at ``/etc/salt/cloud``:
|
|||||||
OPENSTACK.apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
OPENSTACK.apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new format, set up the cloud configuration at
|
||||||
|
``/etc/salt/cloud.providers`` or
|
||||||
|
``/etc/salt/cloud.providers.d/rackspace.conf``:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
rackspace-config:
|
||||||
|
# Set the location of the salt-master
|
||||||
|
#
|
||||||
|
minion:
|
||||||
|
master: saltmaster.example.com
|
||||||
|
|
||||||
|
# Configure Rackspace using the OpenStack plugin
|
||||||
|
#
|
||||||
|
identity_url: 'https://identity.api.rackspacecloud.com/v2.0/tokens'
|
||||||
|
compute_name: cloudServersOpenStack
|
||||||
|
protocol: ipv4
|
||||||
|
|
||||||
|
# Set the compute region:
|
||||||
|
#
|
||||||
|
compute_region: DFW
|
||||||
|
|
||||||
|
# Configure Rackspace authentication credentials
|
||||||
|
#
|
||||||
|
user: myname
|
||||||
|
tenant: 123456
|
||||||
|
apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Compute Region
|
Compute Region
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Rackspace currently has three compute regions which may be used:
|
Rackspace currently has three compute regions which may be used:
|
||||||
|
|
||||||
.. code-block::
|
.. code-block::
|
||||||
@ -49,12 +80,17 @@ Note: if you are using LON with a UK account, you must use the following identit
|
|||||||
|
|
||||||
Authentication
|
Authentication
|
||||||
==============
|
==============
|
||||||
The ``user`` is the same user as is used to log into the Rackspace Control
|
|
||||||
Panel. The ``tenant`` and ``apikey`` can be found in the API Keys area of the
|
The ``user`` is the same user as is used to log into the Rackspace Control
|
||||||
Control Panel. The ``apikey`` will be labeled as API Key (and may need to be
|
Panel. The ``tenant`` and ``apikey`` can be found in the API Keys area of the
|
||||||
|
Control Panel. The ``apikey`` will be labeled as API Key (and may need to be
|
||||||
generated), and ``tenant`` will be labeled as Cloud Account Number.
|
generated), and ``tenant`` will be labeled as Cloud Account Number.
|
||||||
|
|
||||||
An initial profile will be configured in ``/etc/salt/cloud.profiles``:
|
An initial profile can be configured in ``/etc/salt/cloud.profiles`` or
|
||||||
|
``/etc/salt/cloud.profiles.d/openstack.conf``:
|
||||||
|
|
||||||
|
|
||||||
|
* Using the old cloud configuration format:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
@ -63,6 +99,18 @@ An initial profile will be configured in ``/etc/salt/cloud.profiles``:
|
|||||||
size: 512MB Standard Instance
|
size: 512MB Standard Instance
|
||||||
image: Ubuntu 12.04 LTS (Precise Pangolin)
|
image: Ubuntu 12.04 LTS (Precise Pangolin)
|
||||||
|
|
||||||
|
|
||||||
|
* Using the new cloud configuration format and the example configuration from
|
||||||
|
above:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
openstack_512:
|
||||||
|
provider: openstack-config
|
||||||
|
size: 512MB Standard Instance
|
||||||
|
image: Ubuntu 12.04 LTS (Precise Pangolin)
|
||||||
|
|
||||||
|
|
||||||
To instantiate a machine based on this profile:
|
To instantiate a machine based on this profile:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@ -70,10 +118,10 @@ To instantiate a machine based on this profile:
|
|||||||
# salt-cloud -p openstack_512 myinstance
|
# salt-cloud -p openstack_512 myinstance
|
||||||
|
|
||||||
This will create a virtual machine at Rackspace with the name ``myinstance``.
|
This will create a virtual machine at Rackspace with the name ``myinstance``.
|
||||||
This operation may take several minutes to complete, depending on the current
|
This operation may take several minutes to complete, depending on the current
|
||||||
load at the Rackspace data center.
|
load at the Rackspace data center.
|
||||||
|
|
||||||
Once the instance has been created with salt-minion installed, connectivity to
|
Once the instance has been created with salt-minion installed, connectivity to
|
||||||
it can be verified with Salt:
|
it can be verified with Salt:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
@ -4,6 +4,7 @@ Manage configuration files in salt-cloud
|
|||||||
|
|
||||||
# Import python libs
|
# Import python libs
|
||||||
import os
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
# Import salt libs
|
# Import salt libs
|
||||||
import salt.config
|
import salt.config
|
||||||
@ -40,6 +41,13 @@ VM_CONFIG_DEFAULTS = {
|
|||||||
'default_include': 'cloud.profiles.d/*.conf',
|
'default_include': 'cloud.profiles.d/*.conf',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PROVIDER_CONFIG_DEFAULTS = {
|
||||||
|
'default_include': 'cloud.providers.d/*.conf',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def cloud_config(path, env_var='SALT_CLOUD_CONFIG', defaults=None):
|
def cloud_config(path, env_var='SALT_CLOUD_CONFIG', defaults=None):
|
||||||
'''
|
'''
|
||||||
@ -108,13 +116,11 @@ def apply_cloud_config(overrides, defaults=None):
|
|||||||
|
|
||||||
# Migrate old configuration
|
# Migrate old configuration
|
||||||
opts = old_to_new(opts)
|
opts = old_to_new(opts)
|
||||||
opts = prov_dict(opts)
|
|
||||||
|
|
||||||
return opts
|
return opts
|
||||||
|
|
||||||
|
|
||||||
def old_to_new(opts):
|
def old_to_new(opts):
|
||||||
optskeys = opts.keys()
|
|
||||||
providers = ('AWS',
|
providers = ('AWS',
|
||||||
'EC2',
|
'EC2',
|
||||||
'GOGRID',
|
'GOGRID',
|
||||||
@ -123,36 +129,24 @@ def old_to_new(opts):
|
|||||||
'LINODE',
|
'LINODE',
|
||||||
'OPENSTACK',
|
'OPENSTACK',
|
||||||
'RACKSPACE')
|
'RACKSPACE')
|
||||||
for opt in optskeys:
|
|
||||||
for provider in providers:
|
|
||||||
if opt.startswith(provider):
|
|
||||||
if provider.lower() not in opts:
|
|
||||||
opts[provider.lower()] = {}
|
|
||||||
comps = opt.split('.')
|
|
||||||
opts[provider.lower()][comps[1]] = opts[opt]
|
|
||||||
return opts
|
|
||||||
|
|
||||||
|
|
||||||
def prov_dict(opts):
|
|
||||||
providers = ('AWS',
|
|
||||||
'EC2',
|
|
||||||
'GOGRID',
|
|
||||||
'IBMSCE',
|
|
||||||
'JOYENT',
|
|
||||||
'LINODE',
|
|
||||||
'OPENSTACK',
|
|
||||||
'RACKSPACE')
|
|
||||||
optskeys = opts.keys()
|
|
||||||
opts['providers'] = {}
|
|
||||||
for provider in providers:
|
for provider in providers:
|
||||||
lprov = provider.lower()
|
|
||||||
opts['providers'][lprov] = {}
|
provider_config = {}
|
||||||
for opt in optskeys:
|
for opt in opts.keys():
|
||||||
if opt == lprov:
|
if not opt.startswith(provider):
|
||||||
opts['providers'][lprov][lprov] = opts[opt]
|
continue
|
||||||
elif type(opts[opt]) is dict and 'provider' in opts[opt]:
|
value = opts.pop(opt)
|
||||||
if opts[opt]['provider'] == lprov:
|
name = opt.split('.', 1)[1]
|
||||||
opts['providers'][lprov][opt] = opts[opt]
|
provider_config[name] = value
|
||||||
|
|
||||||
|
if provider_config:
|
||||||
|
provider_config['provider'] = provider.lower()
|
||||||
|
opts.setdefault('providers', {}).setdefault(
|
||||||
|
provider.lower(), []).append(
|
||||||
|
provider_config
|
||||||
|
)
|
||||||
|
|
||||||
return opts
|
return opts
|
||||||
|
|
||||||
|
|
||||||
@ -195,3 +189,51 @@ def apply_vm_profiles_config(overrides, defaults=None):
|
|||||||
vms.append(val)
|
vms.append(val)
|
||||||
|
|
||||||
return vms
|
return vms
|
||||||
|
|
||||||
|
|
||||||
|
def cloud_providers_config(path,
|
||||||
|
env_var='SALT_CLOUD_PROVIDERS_CONFIG',
|
||||||
|
defaults=None):
|
||||||
|
'''
|
||||||
|
Read in the salt cloud providers configuration file
|
||||||
|
'''
|
||||||
|
if defaults is None:
|
||||||
|
defaults = PROVIDER_CONFIG_DEFAULTS
|
||||||
|
|
||||||
|
overrides = salt.config.load_config(path, env_var)
|
||||||
|
default_include = overrides.get(
|
||||||
|
'default_include', defaults['default_include']
|
||||||
|
)
|
||||||
|
include = overrides.get('include', [])
|
||||||
|
|
||||||
|
overrides.update(
|
||||||
|
salt.config.include_config(default_include, path, verbose=False)
|
||||||
|
)
|
||||||
|
overrides.update(
|
||||||
|
salt.config.include_config(include, path, verbose=True)
|
||||||
|
)
|
||||||
|
return apply_cloud_providers_config(overrides, defaults)
|
||||||
|
|
||||||
|
|
||||||
|
def apply_cloud_providers_config(overrides, defaults=None):
|
||||||
|
if defaults is None:
|
||||||
|
defaults = PROVIDER_CONFIG_DEFAULTS
|
||||||
|
|
||||||
|
opts = defaults.copy()
|
||||||
|
if overrides:
|
||||||
|
opts.update(overrides)
|
||||||
|
|
||||||
|
# Is the user still using the old format in the new configuration file?!
|
||||||
|
converted_opts = old_to_new(opts.copy())
|
||||||
|
if opts != converted_opts:
|
||||||
|
log.warn('Please switch to the new providers configuration syntax')
|
||||||
|
opts = converted_opts
|
||||||
|
|
||||||
|
providers = {}
|
||||||
|
|
||||||
|
for key, val in opts.items():
|
||||||
|
if key in ('conf_file', 'include', 'default_include'):
|
||||||
|
continue
|
||||||
|
providers[key] = val
|
||||||
|
|
||||||
|
return providers
|
||||||
|
@ -27,6 +27,7 @@ class CloudConfigMixIn(object):
|
|||||||
self.master_config = {}
|
self.master_config = {}
|
||||||
self.cloud_config = {}
|
self.cloud_config = {}
|
||||||
self.profiles_config = {}
|
self.profiles_config = {}
|
||||||
|
self.providers_config = {}
|
||||||
group = self.config_group = optparse.OptionGroup(
|
group = self.config_group = optparse.OptionGroup(
|
||||||
self,
|
self,
|
||||||
"Configuration Options",
|
"Configuration Options",
|
||||||
@ -50,6 +51,12 @@ class CloudConfigMixIn(object):
|
|||||||
help='The location of the saltcloud VM config file. '
|
help='The location of the saltcloud VM config file. '
|
||||||
'Default: /etc/salt/cloud.profiles'
|
'Default: /etc/salt/cloud.profiles'
|
||||||
)
|
)
|
||||||
|
group.add_option(
|
||||||
|
'--providers-config',
|
||||||
|
default=None,
|
||||||
|
help='The location of the salt cloud VM providers '
|
||||||
|
'configuration file. Default: /etc/salt/cloud.providers'
|
||||||
|
)
|
||||||
self.add_option_group(group)
|
self.add_option_group(group)
|
||||||
|
|
||||||
def __assure_absolute_paths(self, name):
|
def __assure_absolute_paths(self, name):
|
||||||
@ -84,7 +91,20 @@ class CloudConfigMixIn(object):
|
|||||||
# Loaded in CloudConfigMixIn.process_vm_config()
|
# Loaded in CloudConfigMixIn.process_vm_config()
|
||||||
self.config['vm'] = self.profiles_config
|
self.config['vm'] = self.profiles_config
|
||||||
|
|
||||||
# 4th - Override config with cli options
|
# 4th - Include Cloud Providers
|
||||||
|
if 'providers' in self.config and self.providers_config:
|
||||||
|
self.error(
|
||||||
|
'Do not mix the old cloud providers configuration with '
|
||||||
|
'the new one. The providers configuration should now go in '
|
||||||
|
'the file `/etc/salt/cloud.providers` or a separate `*.conf` '
|
||||||
|
'file within `cloud.providers.d/` which is relative to '
|
||||||
|
'`/etc/salt/cloud.providers`. To provide another location '
|
||||||
|
'for the providers configuration file, please use '
|
||||||
|
'`--providers-config`.'
|
||||||
|
)
|
||||||
|
self.config['providers'] = self.providers_config
|
||||||
|
|
||||||
|
# 5th - Override config with cli options
|
||||||
# Done in parsers.MergeConfigMixIn.__merge_config_with_cli()
|
# Done in parsers.MergeConfigMixIn.__merge_config_with_cli()
|
||||||
|
|
||||||
# Remove log_level_logfile from config if set to None so it can be
|
# Remove log_level_logfile from config if set to None so it can be
|
||||||
@ -120,6 +140,13 @@ class CloudConfigMixIn(object):
|
|||||||
self.options.vm_config = self.cloud_config.get(
|
self.options.vm_config = self.cloud_config.get(
|
||||||
'vm_config', '/etc/salt/cloud.profiles'
|
'vm_config', '/etc/salt/cloud.profiles'
|
||||||
)
|
)
|
||||||
|
if self.options.providers_config is None:
|
||||||
|
# No providers config was provided from cli
|
||||||
|
# Set the profiles configuration file path to the one provided in
|
||||||
|
# the cloud's configuration or the default path.
|
||||||
|
self.options.providers_config = self.cloud_config.get(
|
||||||
|
'providers_config', '/etc/salt/cloud.providers'
|
||||||
|
)
|
||||||
|
|
||||||
def process_master_config(self):
|
def process_master_config(self):
|
||||||
self.master_config = salt.config.master_config(
|
self.master_config = salt.config.master_config(
|
||||||
@ -132,9 +159,16 @@ class CloudConfigMixIn(object):
|
|||||||
self.profiles_config = config.vm_profiles_config(
|
self.profiles_config = config.vm_profiles_config(
|
||||||
self.options.vm_config
|
self.options.vm_config
|
||||||
)
|
)
|
||||||
# Force process_vm_config to run AFTER process_cloud_config
|
# Force process_vm_config to run AFTER process_master_config
|
||||||
process_vm_config._mixin_prio_ = -998
|
process_vm_config._mixin_prio_ = -998
|
||||||
|
|
||||||
|
def process_providers_config(self):
|
||||||
|
self.providers_config = config.cloud_providers_config(
|
||||||
|
self.options.providers_config
|
||||||
|
)
|
||||||
|
# Force process_providers_config to run AFTER process_vm_config
|
||||||
|
process_providers_config._mixin_prio_ = -997
|
||||||
|
|
||||||
|
|
||||||
class ExecutionOptionsMixIn(object):
|
class ExecutionOptionsMixIn(object):
|
||||||
__metaclass__ = parsers.MixInMeta
|
__metaclass__ = parsers.MixInMeta
|
||||||
@ -154,18 +188,18 @@ class ExecutionOptionsMixIn(object):
|
|||||||
group.add_option(
|
group.add_option(
|
||||||
'-a', '--action',
|
'-a', '--action',
|
||||||
default='',
|
default='',
|
||||||
help=('Perform an action that may be specific to this cloud '
|
help='Perform an action that may be specific to this cloud '
|
||||||
'provider. This argument requires one or more instance '
|
'provider. This argument requires one or more instance '
|
||||||
'names to be specified.')
|
'names to be specified.'
|
||||||
)
|
)
|
||||||
group.add_option(
|
group.add_option(
|
||||||
'-f', '--function',
|
'-f', '--function',
|
||||||
nargs=2,
|
nargs=2,
|
||||||
default='',
|
default='',
|
||||||
metavar='<FUNC-NAME> <PROVIDER>',
|
metavar='<FUNC-NAME> <PROVIDER>',
|
||||||
help=('Perform an function that may be specific to this cloud '
|
help='Perform an function that may be specific to this cloud '
|
||||||
'provider, that does not apply to an instance. This '
|
'provider, that does not apply to an instance. This '
|
||||||
'argument requires a provider to be specified (i.e.: nova).')
|
'argument requires a provider to be specified (i.e.: nova).'
|
||||||
)
|
)
|
||||||
group.add_option(
|
group.add_option(
|
||||||
'-p', '--profile',
|
'-p', '--profile',
|
||||||
|
Loading…
Reference in New Issue
Block a user