class Pangea::DirectoryRenderer
def artifact_json
def artifact_json File.join(init_dir, %(artifact.tf.json)) end
def create_prepped_state_directory(dir, synthesis)
def create_prepped_state_directory(dir, synthesis) system %(mkdir -p #{dir}) unless Dir.exist?(dir) File.write(File.join(dir, %(artifact.tf.json)), JSON[synthesis]) system %(cd #{dir} && #{BIN} init -json) unless Dir.exist?(File.join(dir, %(.terraform))) true end
def home_dir
def home_dir %(#{Dir.home}/.pangea) end
def infra_dir
def infra_dir %(#{home_dir}/infra) end
def init_dir
def init_dir %(#{infra_dir}/init) end
def plan(dir)
def plan(dir) pretty(JSON[File.read(File.join(dir, %(plan.json)))]) end
def pretty(content)
def pretty(content) JSON.pretty_generate(content) end
def render_component(&block)
component is a single resource wrapped in state
def render_component(&block) synthesizer.synthesize(&block) resource_type = synthesizer.synthesis[:resource].keys[0] resource_name = synthesizer.synthesis[:resource][synthesizer.synthesis[:resource].keys[0]].keys[0] dir = File.join(init_dir, resource_type.to_s, resource_name.to_s) create_prepped_state_directory(dir, synthesizer.synthesis) system %(cd #{dir} && #{BIN} apply -auto-approve) synthesizer.clear_synthesis! { resource: resource(dir), state: state(dir), plan: plan(dir) } end
def resource(dir)
def resource(dir) JSON[File.read(File.join(dir, %(artifact.tf.json)))] end
def state(dir)
def state(dir) pretty(JSON[File.read(File.join(dir, %(terraform.tfstate)))]) end