os-apply-config

os-apply-config是一个配置工具,它主要是从多个json格式的配置文件中,读取配置项,然后渲染预先定制好的模板,生成最终的配置文件,然后放置到相应的位置中去。

这个json格式的配置文件,在os-apply-config中叫做metadata,就是定义了一些key-value值,用来渲染模板,os-apply-config提供了好几种方式来确定这些json文件,按照优先级如下:

  1. 通过命令行中的--metadata选项来指定多个json文件:--metadata [METADATA_FILE [METADATA_FILE ...]]
  2. 如果--metadata没有指定,那么通过环境变量OS_CONFIG_FILES来指定,每个json文件以”:”分隔
  3. 如果OS_CONFIG_FILES没有指定,那么通过命令行中的--os-config-files来指定,这个选项默认的值是OS_CONFIG_FILES_PATH环境变量指定的,这个环境变量默认的值为:/var/lib/os-collect-config/os_config_files.json
  4. 如果前面的选项都没有找到json文件,那么用/var/run/os-collect-config/os_config_files.json这个位置的json文件,这个是以前旧的配置项,要被dreprecated了
  5. 不管前面的选项有没有找到json文件,都会使用--fallback-metadata指定的json文件,这个选项默认指定了3个json文件:
    • /var/cache/heat-cfntools/last_metadata
    • /var/lib/heat-cfntools/cfn-init-data
    • /var/lib/cloud/data/cfn-init-data

这些json配置文件中的配置项最终都会被合并到一个dict对象中,用来渲染模板。

os-apply-config的模板由配置项--templates指定,这个配置项默认值由以下方式确定:

  1. OS_CONFIG_APPLIER_TEMPLATES环境变量指定,默认为None
  2. /opt/stack/os-apply-config/templates
  3. /opt/stack/os-config-applier/templates
  4. /usr/libexec/os-apply-config/templates,该值为默认值

生成的最终的配置文件,放置的位置由--output配置项指定,默认为根目录”/“。

举个例子,有如下的文件:

  1. [root@localhost os-apply-config]# tree
  2. .
  3. ├── config
  4. └── os_config_files.json
  5. ├── output
  6. └── templates
  7. └── etc
  8. └── nova.conf

templates/etc/nova.conf内容如下:

  1. [database]
  2. {{#nova.db}}
  3. connection={{nova.db}}
  4. {{/nova.db}}

config/os_config_files.json内容如下:

  1. {
  2. "nova":{
  3. "db": "mysql://nova:unset@localhost/nova"
  4. }
  5. }

执行下面的命令:

  1. # os-apply-config -t templates/ -m config/os_config_files.json -o output/
  2. [2017/03/05 11:59:07 PM] [INFO] writing output/etc/nova.conf
  3. [2017/03/05 11:59:07 PM] [INFO] success

在output目录下就会生成相应的配置文件:

  1. [root@localhost os-apply-config]# tree
  2. .
  3. ├── config
  4. └── os_config_files.json
  5. ├── output
  6. └── etc
  7. └── nova.conf
  8. └── templates
  9. └── etc
  10. └── nova.conf

output/etc/nova.conf内容如下:

  1. [database]
  2. connection=mysql://nova:unset@localhost/nova

可见,使用os-apply-config可以方便的生成一组配置文件,默认的output是根目录,就会将etc等配置文件全部配置到相应的位置,这在部署undercloud和overcloud时都会被用到。

os-apply-config还有一个作用就是指定key值,然后输出对应的value值,如下:

  1. # os-apply-config -t templates/ -m config/os_config_files.json --key nova --type raw
  2. {"db": "mysql://nova:unset@localhost/nova"}
  3. # os-apply-config -t templates/ -m config/os_config_files.json --key nova.db --type raw
  4. mysql://nova:unset@localhost/nova