加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:命令行覆盖配置文件设置?

发布时间:2020-12-16 06:22:32 所属栏目:大数据 来源:网络整理
导读:我正在构建一个利用配置文件(YAML)读取所有必要配置信息的脚本,然后打印出 Linux管理员需要逐步构建服务器所需的所有必要步骤. 对于运行脚本的Linux Admin,必需的选项是能够在命令行覆盖配置文件中的任何项/值对. 我目前正在处理这种方式似乎过于繁琐,我知道
我正在构建一个利用配置文件(YAML)读取所有必要配置信息的脚本,然后打印出 Linux管理员需要逐步构建服务器所需的所有必要步骤.

对于运行脚本的Linux Admin,必需的选项是能够在命令行覆盖配置文件中的任何项/值对.

我目前正在处理这种方式似乎过于繁琐,我知道必须采用更具创新性和更少笨重的方式来实现这一目标.

在代码I中:

>使用YAML::Tiny解析YAML配置文件

location:
    continent: na
    country: us
    city: rh

>使用与配置文件项相同的名称创建变量,从配置文件中分配值.

my $yaml = YAML::Tiny->new;
$yaml = YAML::Tiny->read($config_yml);
my $continent = $yaml->[0]->{location}->{continent};
my $country = $yaml->[0]->{location}->{country};
my $city = $yaml->[0]->{location}->{city};

>使用Getopt::Long并分配变量,覆盖在命令行传递的任何内容.

GetOptions (
    "city=s" => $city,"continent=s" => $continent,"country=s" => $country,);

所以那些只是3个项目/值对,我的实际配置超过40并且将改变…这使得必须继续更新的一些工作.有什么建议?

解决方法

您可以让管理员使用一个类似于 ssh(1) -o的灵活交换机来覆盖YAML设置.如果配置设置很多且可能更改,这尤其适用.

$myscript -o location:city=rh --option location:country=us

现在,在脚本内部,您可以将所有运行时配置捆绑在一起以方便使用(而不是让$this_and_that_opt标量随着时间的推移而扩散).选项解析将看起来像这样:

# First,set up %GlobalAppCfg from defaults and YAML
# now handle "-o location:country=us"
GetOptions('option|o=s' => sub {
                              my (undef,$optstring) = @_;

                              my ($userkey,$val) = split('=',$optstring,2);
                              my ($major,$minor) = split(':',$userkey,2);

                              $GlobalAppCfg->{$major}->{$minor} = $val;
                            },...);

管他呢.你可以规范化配置键和值,处理任意深度的键/子键/子键配置等.这可能会变得很滑,所以你可能希望key-lock那个全局哈希.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读