该文章描述了Salt Cloud中可用的其他各种配置参数。
自定义部署脚本不太可能需要将自定义参数传递给它们,但是salt-bootstrap已经扩展了很多,这也可能是必需的。 可以在profile配置文件或map映射文件中指定script_args,以将参数传递给部署脚本:
ec2-amazon:
provider: my-ec2-config
image: ami-1624987f
size: t1.micro
ssh_username: ec2-user
script: bootstrap-salt
script_args: -c /tmp/
如果需要,这也已经过测试可以与管道一起使用:
script_args: '| head'
默认情况下,Salt Cloud使用SFTP将文件传输到Linux主机。 但是,如果SFTP不可用,或者需要特定的SCP功能,则可以将Salt Cloud配置为使用SCP。
file_transport: sftp
file_transport: scp
Salt允许用户创建自定义模块、grains和states,这些可以与minions同步以扩展Salt的功能。
该配置项将通知Salt Cloud在创建minion后将其自定义模块、grains、状态或所有这些同步到minion。 为此,需要将以下行添加到主要的云配置文件中:
sync_after_install: all
可选的取值列表是:
modules
grains
states
all
用户使用Salt Cloud建立多层次的基础架构已变得越来越普遍。 有时,这涉及将实例设置为除minions以外的其他角色。 考虑到这一点,您现在可以通过在profile配置文件或map映射文件中指定master选项来在计算机上设置master配置。
make_master: True
这将使得Salt Cloud为实例生成master密钥,并告诉salt-bootstrap除salt-minion软件包之外还需要安装salt-master软件包。
默认的master配置通常已经适合大多数用户,除非将特定的master配置添加到配置文件或映射中,否则不会更改默认master配置:
master:
user: root
interface: 0.0.0.0
除了设置新的Salt Master之外,还可以使用Salt Cloud来配置Syndic。 为了通过Salt Cloud设置Salt Syndic,需要在新计算机上安装Salt Master,并且需要使用make_master配置项来设置master配置文件。 可以在profile配置文件或map映射文件中定义此设置:
make_master: True
要安装Salt Syndic,唯一需要配置的其他参数是syndic_master
键,用于指定该syndic向哪一个mater服务器报告。 此修改需要放置在主设置中,可以在profile配置文件、provider驱动程序配置文件或是/etc/salt/cloud配置文件中:
master:
syndic_master: 123.456.789 # may be either an IP address or a hostname
可以通过主配置设置将许多其他Salt Syndic配置设置和参数传递给新的Syndic机器。 有关更多信息,请参见Salt Syndic文档。
默认情况下,ssh端口设置为端口22。如果要在provider驱动程序、profile配置文件或map映射块中使用自定义端口,请使用ssh_port选项。
New in version 2015.5.0.
ssh_port: 2222
当Salt Cloud部署实例时,该实例的SSH pub key将添加到运行salt-cloud命令的用户的known_hosts文件中。 部署实例后,云主机通常会回收该实例的IP地址。 当Salt Cloud尝试使用以前从同一台计算机访问过的回收IP地址来部署实例时,known_hosts文件中的旧密钥将引起冲突。
为了缓解此问题,可以将Salt Cloud配置为在销毁节点时从known_hosts文件中删除旧密钥。 为此,需要将以下行添加到主云配置文件:
delete_sshkeys: True
Salt Cloud部署实例时,会将临时文件上传到/tmp/以便放置salt-bootstrap。 脚本运行后,将删除它们。 为了保留这些文件(主要用于调试目的),可以添加--keep-tmp
选项:
salt-cloud -p myprofile mymachine --keep-tmp
对于那些想知道为什么使用/tmp/而不是/root/的用户,这是由于必须对需要使用sudo的镜像执行此操作,不允许远程root用户登录(这使得/root/不可用) 。
默认情况下,Salt Cloud会将minion部署脚本的输出直接流式传输到STDOUT。 尽管这可能非常有用,但是在某些情况下,您可能希望将其关闭。 可以使用以下配置选项来启用或禁用此输出:
display_ssh_output: False
部署Salt时有几个阶段,其中Salt Cloud需要等待某些事情发生。 像是虚拟机获取其IP地址、虚拟机的SSH端口变成可用等。
如果您发现Salt Cloud等待时间的默认值还不够,并且由于Salt Cloud没有等待足够的时间而导致部署失败,则可以调整一些超时的设置。
注意
所有设置应以小写形式提供,且所有值应以秒为单位提供。
您可以针对每个云提供商全局调整这些设置,也可以针对每个云主机的配置文件定义调整事件。
Salt Cloud应该等待VM启动并从云主机获取IP的时间。 默认值:因云提供商而异(5到25分钟之间)
在查询VM的IP时,Salt Cloud应该休眠的时间。 默认值:因云提供商而异(5到10秒之间)
Salt Cloud与虚拟机成功建立SSH连接前应该等待的时间。 默认值:因云提供商而异(5到15分钟之间)
可以通过密码或ssh密钥建立ssh连接的时间。 默认值:因云提供商而异(通常为15秒)
在放弃之前尝试连接到VM的次数。 默认值:15次尝试
一些云驱动程序使用函数检查可用的IP或SSH成功连接,比较典型的如SoftLayer和SoftLayer-HW。 因此,该参数定义了Salt Cloud在失败之前应重试此类功能函数的时间。 默认值:15分钟。
Salt Cloud在EC2 Spot实例可用之前应等待的时间。 此设置仅适用于EC2云驱动程序。 默认值:10分钟
Salt Cloud可以为支持的云提供商维护节点数据的缓存。 以下选项用于管理此功能。
在受支持的云平台驱动程序上,是否维护从--full-query返回的节点的缓存。 数据将以msgpack
格式存储在<SALT_CACHEDIR>/cloud/active/<DRIVER> /<PROVIDER>/<NODE_NAME>.p
下。 此设置可以为True或False。
在管理云缓存目录时,如果从云主机实时返回的数据与缓存中的数据之间遇到差异,则将触发描述更改的事件。 此设置可以为True或False。
其中一些事件将包含描述节点的数据。 由于返回的某些字段可能包含敏感数据,因此存在cache_event_strip_fields
配置选项以从事件返回中剥离这些字段。
cache_event_strip_fields:
- password
- priv_key
以下是可以基于此数据触发的事件。
salt/cloud/minionid/cache_node_new
在云缓存目录中未列出的云主机上找到了新节点。 描述新节点的字典将包含在事件中。
salt/cloud/minionid/cache_node_missing
先前在云缓存目录中列出的节点在云主机上不再可用。
salt/cloud/minionid/cache_node_diff
云缓存目录中的一个或多个数据已在云主机上更改。 包含旧数据和新数据的字典将包含在事件中。
通常,引导虚拟机时,Salt Cloud会忽略SSH主机密钥。 这是因为在启动之前它不知道主机密钥是什么(因为它尚不存在)。 如果打开了严格的主机密钥检查,但在known_hosts文件中没有密钥,则该主机将永远不可用,也无法引导。
如果云平台驱动程序能够在尝试引导前确定主机密钥,则该云平台的驱动程序可以将其添加到known_hosts文件中,然后打开严格的主机密钥检查。 可以在主云配置文件(通常为/etc/salt/cloud)中或在provider特定的配置文件中进行设置:
known_hosts_file: /path/to/.ssh/known_hosts
如果未设置,它将默认为/dev/null,并且严格的主机密钥检查将关闭。
强烈建议不要设置此选项,除非用户已验证云平台驱动支持此功能,并且所使用的镜像能够提供必要的信息。 目前,只有EC2驱动程序支持此功能。
New in version 2015.5.0.
如果ssh密钥未存储在正在运行的服务器salt-cloud上,请设置ssh_agent,salt-cloud将使用转发的ssh-agent进行身份验证。
ssh_agent: True
New in version 2014.7.0.
file_map
选项允许在运行部署脚本之前将任意一组文件上传到目标系统。 此功能要求云平台驱动支持使用salt.utils.cloud.bootstrap(),目前仅限于ec2、gce、openstack和nova驱动程序。
可以在/etc/salt/cloud或任何云驱动程序或profile配置文件中全局配置file_map
。 例如,要上传额外的软件包或自定义部署脚本,使用file_map
的云配置文件可能类似于:
ubuntu14:
provider: ec2-config
image: ami-98aa1cf0
size: t1.micro
ssh_username: root
securitygroup: default
file_map:
/local/path/to/custom/script: /remote/path/to/use/custom/script
/local/path/to/package: /remote/path/to/store/package
New in version 2018.3.0.
要在运行部署脚本之前在VM上执行指定的preflight Shell命令,请使用preflight_cmds
选项。 这些必须定义为云配置文件中的列表。 例如:
my-cloud-profile:
provider: linode-config
image: Ubuntu 16.04 LTS
size: Linode 2048
preflight_cmds:
- whoami
- echo 'hello world!'
这些命令将在执行引导脚本之前按顺序运行。
New in version 2018.3.0.
force_minion_config
选项请求引导过程中覆盖现有的minion配置文件和public/private密钥文件。 默认值:False
这对于希望接管以前的salt master管理权限的驱动程序(例如saltify)可能很重要。
my_saltify_provider:
driver: saltify
force_minion_config: true