スクリプトを使用してINIに似たファイルを編集する

スクリプトを使用してINIに似たファイルを編集する

DockerでPuppetエージェント設定ファイルを自動的に設定するスクリプトを作成しています。

デフォルトでは、次のセクションがあることを確認する必要があります/etc/puppet/puppet.conf

[agent]
server=$PUPPETMASTER_HOSTNAME
masterport=$PUPPETMASTER_PORT

これまで、Puppet Agent runitスクリプトで実行した操作は次のとおりです。

function write_puppet_config () {
    read -d '' puppet_config <<EOF
[agent]
server=$1
masterport=$2
EOF

    echo -e "$puppet_config" >> /etc/puppet/puppet.conf
}

# default puppet master port is 8410
test -z "$PUPPET_MASTER_TCP_PORT" && export PUPPET_MASTER_TCP_PORT="8410"

# if there is a puppet master host defined, rewrite the config to match
if [ ! -z "$PUPPET_MASTER_TCP_HOST" ]; then 
    write_puppet_config "$PUPPET_MASTER_TCP_HOST" "$PUPPET_MASTER_TCP_PORT"
fi

問題は明らかでなければなりません。 Puppet設定がすでに設定を指定している場合は、他の[agent]部分を追加するだけですが、これはお勧めできません。

条件付きロジックをオンにすることはできますが(たとえば、grepがある場合はsedで再構築)、コマンドラインで編集する方法はありますか?デフォルトでは、「プロキシセクションがない場合は追加した後、そのセクションでサーバーとメインポートが正しい値に設定されていることを確認してください」というコマンドを実行したいと思います。

XML用にそのような構造化ツールがあることを知っていますが、INIスタイルファイルはどうですか?

ベストアンサー1

見るcrudini、この目的のために設計されたシェルツールです。

conf=/etc/puppet/puppet.conf
crudini --set "$conf" agent server "$PUPPET_MASTER_TCP_HOST"
crudini --set "$conf" agent masterport "$PUPPET_MASTER_TCP_PORT"

または、次の単一原子呼び出し:

echo "
[agent]
server=$1
masterport=$2" |

crudini --merge /etc/puppet/puppet.conf

おすすめ記事