Comments (3)
This is an excellent suggestion, and I will get on it when I get some time - maybe by the weekend.
If you want to take a crack at it, look at the way lib/cfndsl.rb works. Basically, it sets up the CloudFormation function to create a CloudFormationTemplate, evaluate the block given in its context, run a few tests and the it calls "generateOutput".
generateOutput is stupid - it just calls to_json and prints the result to stdout.
You could write your own version of the CloudFormation function found in lib/cfndsl.rb that does all of the same things, except that instead of calling x.generateOutput it returns x.to_json.
from cfndsl.
I gave it a shot and was able to get it working from irb
, but not through Rails.
Here is my tiny patch: ianneub@f372496
From irb
I do the following:
require './lib/cfndsl'
test =<<-END
Description "asdasdff"
Parameter "AppType" do
Description "Name of the application type run. Either: abc or def"
Type "String"
Default "abc"
AllowedValues ["abc", "def"]
end
END
CloudFormation do
eval(test)
end
This is the output:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "asdasdff",
"Parameters": {
"AppType": {
"Type": "String",
"Description": "Name of the application type run. Either: abc or def",
"Default": "abc",
"AllowedValues": [
"abc",
"def"
]
}
}
}
Perfect!
However, from rails I get this:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "asdasdff",
"Parameters": {
"AppType": "abc"
}
}
Here is my model:
class CloudFormation < ActiveRecord::Base
def to_json
begin
the_code = self.code
CloudFormation do
eval(the_code)
end
rescue => e
"#{e.class} - #{e.message} - #{e.backtrace.join("\n")}"
end
end
end
Not sure why it's not working through the blocks inside the eval
from rails.
Any thoughts?
from cfndsl.
This isn't an ideal solution, but it's what I finally got working...
Instead of running the CloudFormation function in the Rails process I spawn a new process using Open3.
This has the benefit of being isolated from the Rails env so that cfndsl doesn't conflict with Rails and also so that I can eval
user generated code in a safer env.
Here's how I did it:
Created a new file in the root of my rails project that accepts the cfndsl code to run over STDIN and outputs it back to STDOUT:
require 'cfndsl'
x = CfnDsl::CloudFormationTemplate.new
x.instance_eval STDIN.read
puts x.to_json
In my model I use this code to execute the process:
my_code_string = "Description 'asdf'"
stdin, stdout, stderr, wait_thr = Open3.popen3("ruby #{Rails.root}/cfndsl.rb")
stdin.write(my_code_string)
stdin.close
if wait_thr.value.exitstatus == 0
stdout.read
else
stderr.read
end
from cfndsl.
Related Issues (20)
- gitter.im link is broken (gives 404 not found) HOT 2
- Where should we define custom helper methods? HOT 1
- Possible regressions 0.17.5 -> 1.0.0 HOT 8
- Resources ["Foo"] refer to unknown Reference AWS::Partition HOT 4
- Typo in README examples
- CloudFrontOriginAccessIdentity is an undefined method HOT 4
- Issue with DSL generation from cli arguments HOT 1
- unknown type AWSResourceGroupsGroupJson HOT 1
- Shorthand method of accessing resource attributes via FnSub fails reference checks HOT 1
- Outdated assertion in Readme HOT 1
- SecurityGroupIngress is always an array - 1.1.1 HOT 2
- Task: Generate types from CloudFormation resource registry schemas
- Freeze specifications version HOT 2
- Allow ruby versions until eol
- Missing Support for the TimeZone property of AWS::AutoScaling::ScheduledAction HOT 1
- List ItemType in the specification file breaking template generation with spec version 69.0.0 HOT 1
- AWS::CloudFormation::Interface HOT 4
- Missing AWS::ElasticLoadBalancingV2::LoadBalancer SubnetMapping HOT 2
- Undefined method `Name' for `CfnDsl::AWS::Types::AWS_SSM_Association` HOT 8
- Jsonable calls System.exit instead of raising exception
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cfndsl.