![Python pip 経由でパッケージをインストールするための Puppet 3.8 レシピ](https://rvso.com/image/1465793/Python%20pip%20%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%20Puppet%203.8%20%E3%83%AC%E3%82%B7%E3%83%94.png)
pip3 プロバイダー用の Puppet 4.2 以降を持っていないので、 'pip3' コマンドを使用して手動で Python パッケージをインストールする代わりの方法は何ですか?
「exec」アプローチを使用する場合、パッケージが常に再インストールされないように制御するにはどうすればよいですか? (つまり、「puppet apply」にパッケージがすでにインストールされていることをどのように伝えるのですか)
答え1
私自身がこの件に対処した後...
インストールしたいパッケージがあるかどうかを確認できます
exec { 'install python packages':
command => 'pip3 install flask flask_restful apiai',
path => ['/usr/bin/'],
unless => '/usr/bin/test -f /usr/local/lib/python3.4/dist-packages/flask/app.py'
}
もしそれがうまくいかない場合(たくさんのパッケージをインストールしたい場合など)、カスタムファクトを使用して、そのファクトが存在しない場合にのみインストールを実行することができます。次のようにする必要があります -
if ($need_to_install == undef ) {
exec { 'install python packages':
command => 'pip3 install flask flask_restful apiai; touch /root/installed.txt',
path => ['/usr/bin/'],
before => Exec['create custom facter'],
}
exec { 'create custom facter':
command => "mkdir -p /etc/facter/facts.d; echo 'need_to_install=false' > /etc/facter/facts.d/check_pip_install.txt",
provider => shell,
}
}
ちなみに、このスクリプトを使用して、通常の Puppet の方法で pip3 パッケージをインストールすることもできます。 https://github.com/openstack-infra/puppet-pip/blob/master/lib/puppet/provider/package/pip3.rb