itchef/cookbooks/cpe_flatpak/resources/flatpak.rb (76 lines of code) (raw):
# Cookbook Name:: cpe_flatpak
# Resources:: cpe_flatpak
#
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
resource_name :cpe_flatpak_linux
provides :cpe_flatpak, :os => 'linux'
default_action :manage
property :fp, String, :name_property => true
action :manage do
return unless node['cpe_flatpak']['manage']
ign_failure = node['cpe_flatpak']['ignore_failure']
# Keep Flatpak up to date
package 'flatpak' do # ~FB012
action :upgrade
end
# Remove any packages that have been removed from the recipe
delta = (flatpak_packages_receipt - node['cpe_flatpak']['pkgs'].to_h.keys)
delta.each do |p|
cpe_flatpak_pkg p do
pkg p
action :remove
ignore_failure ign_failure
end
end
# Remove any remotes that have been removed from the recipe.
delta = (flatpak_remotes_receipt - node['cpe_flatpak']['remotes'].to_h.keys)
delta.each do |r|
cpe_flatpak_repo r do
repo_name r
action :remove
ignore_failure ign_failure
end
end
# Install any new remotes
node['cpe_flatpak']['remotes'].each do |r, u|
cpe_flatpak_repo r do
repo_name r
url u
ignore_failure ign_failure
end
end
# Install any new packages
node['cpe_flatpak']['pkgs'].each do |p, cfg|
if cfg.is_a?(String)
r = cfg
else # assume it's a hash
r = cfg['repo']
if cfg['ignore_failure'].nil?
ign_f = ign_failure
else
ign_f = cfg['ignore_failure']
end
end
cpe_flatpak_pkg p do
pkg p
repo_name r
ignore_failure ign_f
end
end
cache_dir = "#{chef_cache}/cpe_flatpak"
directory cache_dir do
mode 0755
owner 'root'
group 'root'
end
rem = node['cpe_flatpak']['remotes'].keys.sort
# Keep track of what remotes are installed for idempotency.
file flatpak_remotes_receipt_path do
content Chef::JSONCompat.to_json_pretty(rem)
mode '644'
owner 'root'
group 'root'
action :create
end
packages = node['cpe_flatpak']['pkgs'].keys.sort
# Keep track of what packages are installed for idempotency.
file flatpak_packages_receipt_path do
content Chef::JSONCompat.to_json_pretty(packages)
mode '644'
owner 'root'
group 'root'
action :create
end
end
action_class do
include CPE::Flatpak
end