19 KiB
Core Configuration
A number of core configuration options and some options that are
global to the VM profiles can be set in the cloud configuration file. By
default this file is located at /etc/salt/cloud
.
Thread Pool Size
When salt cloud is operating in parallel mode via the -P
argument, you can control the thread pool size by specifying the
pool_size
parameter with a positive integer value.
By default, the thread pool size will be set to the number of VMs that salt cloud is operating on.
pool_size: 10
Minion Configuration
The default minion configuration is set up in this file. Minions
created by salt-cloud derive their configuration from this file. Almost
all parameters found in Configuring the Salt Minion <configuration-salt-minion>
can be used here.
minion:
master: saltmaster.example.com
In particular, this is the location to specify the location of the salt master and its listening port, if the port is not set to the default.
Similar to most other settings, Minion configuration settings are
inherited across configuration files. For example, the master setting
might be contained in the main cloud
configuration file as
demonstrated above, but additional settings can be placed in the
provider, profile or map configuration files:
ec2-web:
size: t1.micro
minion:
environment: test
startup_states: sls
sls_list:
- web
When salt cloud creates a new minon, it can automatically add grain information to the minion configuration file identifying the sources originally used to define it.
The generated grain information will appear similar to:
grains:
salt-cloud:
driver: ec2
provider: my_ec2:ec2
profile: ec2-web
The generation of the salt-cloud grain can be suppressed by the
option enable_cloud_grains: 'False'
in the cloud
configuration file.
Cloud Configuration Syntax
The data specific to interacting with public clouds is set up here
<cloud-provider-specifics>
.
Cloud provider configuration settings can live in several places. The
first is in /etc/salt/cloud
:
# /etc/salt/cloud
providers:
my-aws-migrated-config:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
Cloud provider configuration data can also be housed in
/etc/salt/cloud.providers
or any file matching
/etc/salt/cloud.providers.d/*.conf
. All files in any of
these locations will be parsed for cloud provider data.
Using the example configuration above:
# /etc/salt/cloud.providers
# or could be /etc/salt/cloud.providers.d/*.conf
my-aws-config:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
Note
Salt Cloud provider configurations within
/etc/cloud.provider.d/
should not specify the
providers
starting key.
It is also possible to have multiple cloud configuration blocks within the same alias block. For example:
production-config:
- id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
- user: example_user
apikey: 123984bjjas87034
driver: rackspace
However, using this configuration method requires a change with profile configuration blocks. The provider alias needs to have the provider key value appended as in the following example:
rhel_aws_dev:
provider: production-config:ec2
image: ami-e565ba8c
size: t1.micro
rhel_aws_prod:
provider: production-config:ec2
image: ami-e565ba8c
size: High-CPU Extra Large Instance
database_prod:
provider: production-config:rackspace
image: Ubuntu 12.04 LTS
size: 256 server
Notice that because of the multiple entries, one has to be explicit
about the provider alias and name, from the above example,
production-config: ec2
.
This data interactions with the salt-cloud
binary
regarding its --list-location
, --list-images
,
and --list-sizes
which needs a cloud provider as an
argument. The argument used should be the configured cloud provider
alias. If the provider alias has multiple entries,
<provider-alias>: <provider-name>
should be
used.
To allow for a more extensible configuration,
--providers-config
, which defaults to
/etc/salt/cloud.providers
, was added to the cli parser. It
allows for the providers' configuration to be added on a per-file
basis.
Pillar Configuration
It is possible to configure cloud providers using pillars. This is
only used when inside the cloud module. You can setup a variable called
cloud
that contains your profile, provider, and map to pass
that information to the cloud servers instead of having to copy the full
configuration to every minion. In your pillar file, you would use
something like this:
cloud:
ssh_key_name: saltstack
ssh_key_file: /root/.ssh/id_rsa
update_cachedir: True
diff_cache_events: True
providers:
my-openstack:
driver: openstack
region_name: ORD
cloud: mycloud
profiles:
ubuntu-openstack:
provider: my-openstack
size: ds512M
image: CentOS 7
script_args: git develop
maps:
my-dev-map:
ubuntu-openstack:
- dev-test01
- dev-test02
- dev-test03
- dev-test04
my-prd-map:
ubuntu-openstack:
- prd-web01
- prd-web02
minion:
id: custom-minion-id-app1-stack1-frontend
grains:
roles:
- webserver
deployment: datacenter4-openstack
- prod-db01
- prod-db02
Cloud Configurations
Scaleway
To use Salt Cloud with Scaleway, you need to get an
access key
and an API token
.
API tokens
are unique identifiers associated with your
Scaleway account. To retrieve your access key
and
API token
, log-in to the Scaleway control panel, open the
pull-down menu on your account name and click on "My Credentials"
link.
If you do not have API token
you can create one by
clicking the "Create New Token" button on the right corner.
my-scaleway-config:
access_key: 15cf404d-4560-41b1-9a0c-21c3d5c4ff1f
token: a7347ec8-5de1-4024-a5e3-24b77d1ba91d
driver: scaleway
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-scaleway-config
.
Rackspace
Rackspace cloud requires two configuration options; a
user
and an apikey
:
my-rackspace-config:
user: example_user
apikey: 123984bjjas87034
driver: rackspace
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-rackspace-config
.
Amazon AWS
A number of configuration options are required for Amazon AWS
including id
, key
, keyname
,
securitygroup
, and private_key
:
my-aws-quick-start:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
driver: ec2
my-aws-default:
id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: default
private_key: /root/test.pem
driver: ec2
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be either
provider: my-aws-quick-start
or
provider: my-aws-default
.
Linode
Linode requires a single API key, but the default root password also needs to be set:
my-linode-config:
apikey: asldkgfakl;sdfjsjaslfjaklsdjf;askldjfaaklsjdfhasldsadfghdkf
password: F00barbaz
ssh_pubkey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKHEOLLbeXgaqRQT9NBAopVz366SdYc0KKX33vAnq+2R user@host
ssh_key_file: ~/.ssh/id_ed25519
driver: linode
The password needs to be 8 characters and contain lowercase, uppercase, and numbers.
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-linode-config
Joyent Cloud
The Joyent cloud requires three configuration parameters: The username and password that are used to log into the Joyent system, as well as the location of the private SSH key associated with the Joyent account. The SSH key is needed to send the provisioning commands up to the freshly created virtual machine.
my-joyent-config:
user: fred
password: saltybacon
private_key: /root/joyent.pem
driver: joyent
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-joyent-config
GoGrid
To use Salt Cloud with GoGrid, log into the GoGrid web interface and create an API key. Do this by clicking on "My Account" and then going to the API Keys tab.
The apikey
and the sharedsecret
configuration parameters need to be set in the configuration file to
enable interfacing with GoGrid:
my-gogrid-config:
apikey: asdff7896asdh789
sharedsecret: saltybacon
driver: gogrid
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-gogrid-config
.
OpenStack
Using Salt for OpenStack uses the shade <https://docs.openstack.org/shade/latest/> driver managed by the openstack-infra team.
This driver can be configured using the
/etc/openstack/clouds.yml
file with os-client-config
<https://docs.openstack.org/os-client-config/latest/>
myopenstack:
driver: openstack
region_name: RegionOne
cloud: mycloud
Or by just configuring the same auth block directly in the cloud provider config.
myopenstack:
driver: openstack
region_name: RegionOne
auth:
username: 'demo'
password: secret
project_name: 'demo'
auth_url: 'http://openstack/identity'
Both of these methods support using the vendor <https://docs.openstack.org/os-client-config/latest/user/vendor-support.html> options.
For more information, look at Openstack Cloud Driver Docs <salt.cloud.clouds.openstack>
DigitalOcean
Using Salt for DigitalOcean requires a client_key
and an
api_key
. These can be found in the DigitalOcean web
interface, in the "My Settings" section, under the API Access tab.
my-digitalocean-config:
driver: digitalocean
personal_access_token: xxx
location: New York 1
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-digital-ocean-config
.
Parallels
Using Salt with Parallels requires a user
,
password
and URL
. These can be obtained from
your cloud provider.
my-parallels-config:
user: myuser
password: xyzzy
url: https://api.cloud.xmission.com:4465/paci/v1.0/
driver: parallels
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-parallels-config
.
Proxmox
Using Salt with Proxmox requires a user
,
password
, and URL
. These can be obtained from
your cloud host. Both PAM and PVE users can be used.
my-proxmox-config:
driver: proxmox
user: saltcloud@pve
password: xyzzy
url: your.proxmox.host
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: my-proxmox-config
.
LXC
The lxc driver uses saltify to install salt and attach the lxc container as a new lxc minion. As soon as we can, we manage baremetal operation over SSH. You can also destroy those containers via this driver.
devhost10-lxc:
target: devhost10
driver: lxc
And in the map file:
devhost10-lxc:
provider: devhost10-lxc
from_container: ubuntu
backing: lvm
sudo: True
size: 3g
ip: 10.0.3.9
minion:
master: 10.5.0.1
master_port: 4506
lxc_conf:
- lxc.utsname: superlxc
Note
In the cloud profile that uses this provider configuration, the
syntax for the provider
required field would be
provider: devhost10-lxc
.
Saltify
The Saltify driver is a new, experimental driver designed to install
Salt on a remote machine, virtual or bare metal, using SSH. This driver
is useful for provisioning machines which are already installed, but not
Salted. For more information about using this driver and for
configuration examples, please see the Gettting Started with Saltify <getting-started-with-saltify>
documentation.
Vagrant
The Vagrant driver is a new, experimental driver for controlling a
VagrantBox virtual machine, and installing Salt on it. The target host
machine must be a working salt minion, which is controlled via the salt
master using salt-api. For more information, see Getting Started With Vagrant <getting-started-with-vagrant>
.
Extending Profiles and Cloud Providers Configuration
As of 0.8.7, the option to extend both the profiles and cloud
providers configuration and avoid duplication was added. The extends
feature works on the current profiles configuration, but, regarding the
cloud providers configuration, only works in the new
syntax and respective configuration files, i.e.
/etc/salt/salt/cloud.providers
or
/etc/salt/cloud.providers.d/*.conf
.
Note
Extending cloud profiles and providers is not recursive. For example, a profile that is extended by a second profile is possible, but the second profile cannot be extended by a third profile.
Also, if a profile (or provider) is extending another profile and each contains a list of values, the lists from the extending profile will override the list from the original profile. The lists are not merged together.
Extending Profiles
Some example usage on how to use extends
with profiles.
Consider /etc/salt/salt/cloud.profiles
containing:
development-instances:
provider: my-ec2-config
size: t1.micro
ssh_username: ec2_user
securitygroup:
- default
deploy: False
Amazon-Linux-AMI-2012.09-64bit:
image: ami-54cf5c3d
extends: development-instances
Fedora-17:
image: ami-08d97e61
extends: development-instances
CentOS-5:
provider: my-aws-config
image: ami-09b61d60
extends: development-instances
The above configuration, once parsed would generate the following profiles data:
'deploy': False,
[{'image': 'ami-08d97e61',
'profile': 'Fedora-17',
'provider': 'my-ec2-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'},
'deploy': False,
{'image': 'ami-09b61d60',
'profile': 'CentOS-5',
'provider': 'my-aws-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'},
'deploy': False,
{'image': 'ami-54cf5c3d',
'profile': 'Amazon-Linux-AMI-2012.09-64bit',
'provider': 'my-ec2-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'},
'deploy': False,
{'profile': 'development-instances',
'provider': 'my-ec2-config',
'securitygroup': ['default'],
'size': 't1.micro',
'ssh_username': 'ec2_user'}]
Pretty cool right?
Extending Providers
Some example usage on how to use extends
within the
cloud providers configuration. Consider
/etc/salt/salt/cloud.providers
containing:
my-develop-envs:
- id: HJGRYCILJLKJYG
key: 'kdjgfsgm;woormgl/aserigjksjdhasdfgn'
keyname: test
securitygroup: quick-start
private_key: /root/test.pem
location: ap-southeast-1
availability_zone: ap-southeast-1b
driver: ec2
- user: myuser@mycorp.com
password: mypass
ssh_key_name: mykey
ssh_key_file: '/etc/salt/ibm/mykey.pem'
location: Raleigh
driver: ibmsce
my-productions-envs:
- extends: my-develop-envs:ibmsce
user: my-production-user@mycorp.com
location: us-east-1
availability_zone: us-east-1
The above configuration, once parsed would generate the following providers data:
'providers': {
'my-develop-envs': [
'availability_zone': 'ap-southeast-1b',
{'id': 'HJGRYCILJLKJYG',
'key': 'kdjgfsgm;woormgl/aserigjksjdhasdfgn',
'keyname': 'test',
'location': 'ap-southeast-1',
'private_key': '/root/test.pem',
'driver': 'aws',
'securitygroup': 'quick-start'
},'location': 'Raleigh',
{'password': 'mypass',
'driver': 'ibmsce',
'ssh_key_file': '/etc/salt/ibm/mykey.pem',
'ssh_key_name': 'mykey',
'user': 'myuser@mycorp.com'
}
],'my-productions-envs': [
'availability_zone': 'us-east-1',
{'location': 'us-east-1',
'password': 'mypass',
'driver': 'ibmsce',
'ssh_key_file': '/etc/salt/ibm/mykey.pem',
'ssh_key_name': 'mykey',
'user': 'my-production-user@mycorp.com'
}
] }