Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add boto3action to aws pack - #37

Closed
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master
Closed

Add boto3action to aws pack#37
xydinesh wants to merge 11 commits into
StackStorm-Exchange:masterfrom
xydinesh:master

Conversation

@xydinesh

@xydineshxydinesh commented Jul 15, 2017

Copy link
Copy Markdown

I create this pull request as a result of discussion happened in, StackStorm-Exchange/exchange-incubator#10. Main features in this pull request are,

  • Ability to assume_role for cross account access
  • Ability to specify region for cross region access

For example, I have a st2 deployment in aws account 123456 and us-east-1. I want to deploy VPC in account 456789 and us-west-1.

assume_role:
action: aws.assume_roleinput:
role_arn: “arn:aws:iam:456789:role/st2_role”publish:
credentials: <% task(assume_role).result.result %>on-success:
- create_vpccreate_vpc:
action: aws.boto3actioninput:
service: ec2action_name: create_vpcregion: "us-west-1"params: <% dict(CidrBlock => "10.0.0.0/16", InstanceTenancy => "default") %>credentials: <% $.credentials %>publish:
vpc_id: <% task(create_vpc).result.result.Vpc.VpcId %>on-success:
- create_subnetcreate_subnet:
action: aws.boto3actioninput:
service: ec2region: "us-west-1"action_name: create_subnetparams: <% dict(AvailabilityZone =>"us-west-1a", CidrBlock =>"10.0.0.0/24", VpcId => $.vpc_id) %>credentials: <% $.credentials %>publish:
subnet_ids: <% task(create_subnets).result.result.Subnet.SubnetId %>on-success:
- create_igwcreate_igw:
action: aws.boto3actioninput:
service: ec2action_name: create_internet_gatewayregion: <% $.region %>credentials: <% $.credentials %>publish:
igw_id: <% task(create_igw).result.result.InternetGateway.InternetGatewayId %>

In addition, aws.boto3action created with following opinions.

  • aws credentials
    Boto3 is the official SDK for AWS. As a user/developer, If I have boto3 configured I expect aws pack to work without doing any additional configuration. For example,
st2 pack install aws
st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1"

In addition, if I want to use use boto3 profiles

st2 run aws.boto3action service="ec2" action_name="decribe_vpcs" region="us-west-1" env="AWS_PROFILE=production"
  • yaml generation
    Long term, I don’t believe yaml generation scale based on the number of services AWS have and introduce. In addition, IMO Boto3 documentation is detailed, has examples. Having yaml for each action is redundant and add no value to the end user.

  • pack maintenance

    Since there are no yaml to generate, this pack should be easy to maintain. Any new service boto3 introduce, available to pack user right away.

@Mierdin

Copy link
Copy Markdown

Thanks for opening this - might be worth including a link to https://github.com/StackStorm-Exchange/exchange-incubator, as there was some useful context captured there. Summarizing the intention in the description would be good too. I have a feeling the future of this pack will refer back to this PR at least a few times 😄

@xydinesh

Copy link
Copy Markdown
Author

@Mierdin Good call. I brought over, what I thought important points to description. Please see if I am missing anything.

@warrenvw

warrenvw commented Jul 17, 2017

Copy link
Copy Markdown
Contributor

Thanks for the PR.

Per our conversation, I'd suggest updating the README with examples on how to use the new actions. Document examples with and without using assume_role.

@AndyMoore

Copy link
Copy Markdown
Contributor

as discussed with Dinesh the main issue i have with this approach is it stops actions being discreet and independent - you'd need to call the assume_role action each time before any other action, which means to run any action against a second account will force each action to become a workflow.

The model I'd prefer is to have the assume_role and region as arguments within each action, which would then be passed through run.py and lib/action.py so each action can still be called individually

have raised #38 to show this approach. Haven't regenerated the actions in the pack though to make it easier to see the actual change

@xydinesh

Copy link
Copy Markdown
Author

Andy, case you are making is useful for testing and debugging cross account calls. I agree that we should consider adding assume_role to boto3action, to make it independent. However, in a workflow, I don't think it is make sense to call assume_role for every action. In a workflow, I prefer to assume_role once and reuse credentials in actions.

@AndyMoore

Copy link
Copy Markdown
Contributor

the difference is the action run at the beginning to get credentials, and everything else relying on that being there, as opposed to all actions standing on their own and being discrete

you either have to update every action to be able to take credentials, which i'd prefer not to pass between actions - that's managed on a pack level imo - or you're updating every action to be able to assume a role. both require every action to be updated (via the generator), but its whether you allow a user to enter credentials, or whether you let stackstorm/aws pack look after credentials under the hood instead. obviously both could be added and maybe that's the way that allows the most flexibility, but then you have a large generated pack with one single non-generated action

one for the stackstorm guys as it's not really a technical question @warrenvw

@xydinesh

Copy link
Copy Markdown
Author

Should we close this ? As we have same PR against boto3 branch.

@warrenvw

Copy link
Copy Markdown
Contributor

Closing. This PR is replaced by #44.

@warrenvwwarrenvw closed this Aug 8, 2017
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@xydinesh@Mierdin@warrenvw@AndyMoore