require "open3" require "yaml" DOMAIN = ENV.fetch("LOTUS_LAND_STORY_DOMAIN") task bootstrap: "pip:sync" namespace :pip do task :sync => "requirements.txt" do sh "pip-sync requirements.txt" end desc "" task :upgrade do out, _ = Open3.capture2e("pip-compile --upgrade --resolver=backtracking requirements.in") File.write("requirements.txt", out) end file "requirements.txt" => "requirements.in" do |t| out, _ = Open3.capture2e("pip-compile --resolver=backtracking requirements.in") File.write(t.name, out) end end desc "" task terraform: "terraform.tfvars" do sh "terraform apply" end desc "" task :ansible, %i[ playbook ] => "vars.yml" do |_, args| playbook = args.fetch(:playbook, "main") sh "ansible-playbook #{playbook}.yml" end task "terraform.tfvars" do |t| File.write(t.name, "domain = \"#{DOMAIN}\"") end task "vars.yml" do |t| linode_volume = `terraform output -raw lotus_land_story_volume` miniflux_db_password = `op read "op://Private/Miniflux/db password"`.strip miniflux_password = `op read op://Private/Miniflux/password`.strip prometheus_linode_api_token = `op read "op://Private/lotus-land-story/prometheus/linode api token"`.strip File.write(t.name, YAML.dump({ "domain" => DOMAIN, "linode_volume" => linode_volume, "prometheus" => { "linode_api_token" => prometheus_linode_api_token, }, "miniflux" => { "db_password" => miniflux_db_password, "password" => miniflux_password, }, })) end task default: %i[ terraform ansible ]