Giter VIP home page Giter VIP logo

rundeck-ec2-nodes-plugin's Introduction

Rundeck EC2 Nodes Plugin

Version: 1.5

Build Status

This is a Resource Model Source plugin for RunDeck 1.5+ that provides Amazon EC2 Instances as nodes for the RunDeck server.

NOTE: For Rundeck 1.4, you will need to use plugin version 1.2.

Installation

Download from the releases page.

Put the rundeck-ec2-nodes-plugin-1.5.x.jar into your $RDECK_BASE/libext dir.

Release Notes

Release Notes

Usage

You can configure the Resource Model Sources for a project either via the RunDeck GUI, under the "Admin" page, or you can modify the project.properties file to configure the sources.

See: Resource Model Source Configuration

The provider name is: aws-ec2

Here are the configuration properties:

  • accessKey: API AccessKey value (if not using IAM profile)
  • secretKey: API SecretKey value (if not using IAM profile)
  • endpoint - The URL of the AWS endpoint to use, or blank for the default endpoint. Can be a comma-separated list of endpoints (e.g. https://ec2.us-west-1.amazonaws.com, https://ec2.us-east-1.amazonaws.com) to integrate with multiple regions. See Amazon EC2 Regions and Endpoints for list of endpoints.
  • synchronousLoad: Do not use internal async loading behavior. (boolean, default: true)
  • refreshInterval: Unless using Synchronous Loading, time in seconds used as minimum interval between calls to the AWS API. (default 30)
  • filter A set of ";" separated query filters ("$Name=$Value") for the AWS EC2 API, see below.
  • runningOnly: if "true", automatically filter the * instances by "instance-state-name=running"
  • useDefaultMapping: if "true", base all mapping definitions off the default mapping provided.
  • mappingParams: A set of ";" separated mapping entries
  • mappingFile: Path to a java properties-formatted mapping definition file.
  • pageResults: Max elements per page for AWS API calls - REQUIRED

If you leave accessKey and secretKey blank, the EC2 IAM profile will be used.

Note: Rundeck 2.6.3+ uses an asynchronous nodes cache by default. You should enable synchronousLoad if you are using the rundeck nodes cache, or set the refreshInterval to 0.

Filter definition

The syntax for defining filters uses $Name=$Value1,$Value2[;$Name=$value[;...]] for any of the allowed filter names (see DescribeInstances for the available filter Names).

Note: you do not need to specify Filter.1.Name=$Name, etc. as described in the EC2 API documentation, this will handled for you. Simply list the Name = Value pairs, separated by ;.

You can specify multiple values in the filter by separating the values with ,.

Example: to filter based on a Tag named "MyTag" with a value of "Some Tag Value":

tag:MyTag=Some Tag Value

Example: to filter any instance with a Tag named MyTag:

tag-key=MyTag

Example combining matching a tag value and the instance type:

tag:MyTag=Some Tag Value;instance-type=m1.small

Example including two instance types, the results will have one or the other instance-type:

instance-type=m1.small,m1.large

Mapping Definition

RunDeck Node attributes are configured by mapping EC2 Instance properties via a mapping configuration.

The mapping declares the node attributes that will be set, and what their values will be set to using a "selector" on properties of the EC2 Instance object.

Here is the default mapping:

description.default=EC2 node instance
editUrl.default=https://console.aws.amazon.com/ec2/home#s=Instances&selectInstance=${node.instanceId}
hostname.selector=publicDnsName,privateIpAddress
sshport.default=22
sshport.selector=tags/ssh_config_Port
instanceId.selector=instanceId
nodename.selector=tags/Name,instanceId
osArch.selector=architecture
osFamily.default=unix
osFamily.selector=platform
osName.default=Linux
osName.selector=platform
privateDnsName.selector=privateDnsName
privateIpAddress.selector=privateIpAddress
state.selector=state.name
tag.pending.selector=state.name=pending
tag.running.selector=state.name=running
tag.shutting-down.selector=state.name=shutting-down
tag.stopped.selector=state.name=stopped
tag.stopping.selector=state.name=stopping
tag.terminated.selector=state.name=terminated
tags.default=ec2
tags.selector=tags/Rundeck-Tags
username.default=ec2-user
username.selector=tags/Rundeck-User

Configuring the Mapping

You can configure your source to start with the above default mapping with the useDefaultMapping property.

You can then selectively change it either by setting the mappingParams or pointing to a new properties file with mappingFile.

For example, you can put this in the mappingParams field in the GUI to change the default tags for your nodes, remove the "stopping" tag selector, and add a new "ami_id" selector:

tags.default=mytag, mytag2;tag.stopping.selector=;ami_id.selector=imageId

Mapping format

The mapping consists of defining either a selector or a default for the desired Node fields. The "nodename" field is required, and will automatically be set to the instance ID if no other value is defined.

For purposes of the mapping definition, a field selector is either:

  • An EC2 fieldname, or dot-separated field names
  • "tags/" followed by a Tag name, e.g. "tags/My Tag"
  • "tags/*" for use by the attributes.selector mapping

Selectors use the Apache BeanUtils to extract a property value from the AWS API Instance class. This means you can use dot-separated fieldnames to traverse the object graph. E.g. "state.name" to specify the "name" field of the State property of the Instance.

format:

# define a selector for "property":
<attribute>.selector=<field selector>
# define a default value for "property":
<attribute>.default=<default value>
# Special attributes selector to map all Tags to attributes
attributes.selector=tags/*
# The value for the tags selector will be treated as a comma-separated list of strings
tags.selector=<field selector>
# the default tags list
tags.default=a,b,c
# Define a single tag <name> which will be set if and only if the selector result is not empty
tag.<name>.selector=<field selector>
# Define a single tag <name> which will be set if the selector result equals the <value>
tag.<name>.selector=<field selector>=<value>

Note, a ".selector" value can have multiple selectors defined, separated by commas, and they will be evaluated in order with the first value available being used. E.g. "nodename.selector=tags/Name,instanceId", which will look for a tag named "Name", otherwise use the instanceId.

You can also use the <field selector>=<value> feature to set a tag only if the field selector has a certain value.

Tags selector

When defining field selector for the tags node property, the string value selected (if any) will be treated as a comma-separated list of strings to use as node tags. You could, for example, set a custom EC2 Tag on an instance to contain this list of tags, in this example from the simplemapping.properties file:

tags.selector=tags/Rundeck-Tags

So creating the "Rundeck-Tags" Tag on the EC2 Instance with a value of "alpha, beta" will result in the node having those two node tags.

The tags.selector also supports a "merge" ability, so you can merge multiple Instance Tags into the RunDeck tags by separating multiple selectors with a "|" character:

tags.selector=tags/Environment|tags/Role

Appending values

A field selector can conjoin multiple values using +, and can append literal text like the _ character for example.

# conjoin two fields with no separation between the values
# this will result in "field1field2" 
<attribute>.selector=<field selector>+<field2 selector>

# conjoin multiple fields with a literal string delimiter
# this will result in "field1-*-field2"
<attribute>.selector=<field selector>+"-*-"+<field2 selector>

Use a quoted value to insert a delimiter, with either single or double quotes.

Here is an example to use the "Name" instance tag, and InstanceId, to generate a unique node name for rundeck:

nodename.selector=tags/Name+'-'+instanceId

Mapping EC2 Instances to Rundeck Nodes

Rundeck node definitions specify mainly the pertinent data for connecting to and organizing the Nodes. EC2 Instances have metadata that can be mapped onto the fields used for Rundeck Nodes.

Rundeck nodes have the following metadata fields:

  • nodename - unique identifier
  • hostname - IP address/hostname to connect to the node
  • sshport - The ssh port, if resolved to another port than 22 hostname will be set to <hostname>:<sshport>
  • username - SSH username to connect to the node
  • description - textual description
  • osName - OS name
  • osFamily - OS family: unix, windows, cygwin.
  • osArch - OS architecture
  • osVersion - OS version
  • tags - set of labels for organization
  • editUrl - URL to edit the definition of this node object
  • remoteUrl - URL to edit the definition of this node object using Rundeck-specific integration

In addition, Nodes can have arbitrary attribute values.

EC2 Instance Field Selectors

EC2 Instances have a set of metadata that can be mapped to any of the Rundeck node fields, or to Settings or tags for the node.

EC2 fields:

  • amiLaunchIndex
  • architecture
  • clientToken
  • imageId
  • imageName
  • instanceId
  • instanceLifecycle
  • instanceType
  • kernelId
  • keyName
  • launchTime
  • license
  • platform
  • privateDnsName
  • privateIpAddress
  • publicDnsName
  • publicIpAddress
  • ramdiskId
  • rootDeviceName
  • rootDeviceType
  • spotInstanceRequestId
  • state
  • stateReason
  • stateTransitionReason
  • subnetId
  • virtualizationType
  • vpcId
  • tags/*

EC2 Instances can also have "Tags" which are key/value pairs attached to the Instance. A common Tag is "Name" which could be a unique identifier for the Instance, making it a useful mapping to the Node's name field. Note that EC2 Tags differ from Rundeck Node tags: Rundeck tags are simple string labels and are not key/value pairs.

Authenticating to EC2 Nodes with Rundeck

Once you get your EC2 Instances listed in Rundeck as Nodes, you may be wondering "Now how do I use this?"

Rundeck uses SSH by default with private key authentication, so in order to connect to your EC2 instances out of the box you will need to configure Rundeck to use the right private SSH key to connect to your nodes, which can be done in either of a few ways:

  1. Copy your private key to the default location used by Rundeck which is ~/.ssh/id_rsa
  2. Copy your private key elsewhere, and override it on a project level. Change project.properties and set the project.ssh-keypath to point to the file.
  3. Copy your private key elsewhere, and set the location as an attribute on your nodes (shown below)

To set the ssh keypath attribute on the EC2 Nodes produced by the plugin, you can modify your mapping configuration.

E.g. in the "Mapping Params" field, set:

Mapping Params: ssh-keypath.default=/path/to/key

This will set the "ssh-keypath" attribute on your EC2 Nodes, allowing correct private key ssh authentication.

The default mapping also configures a default username attribute to be ec2-user, but if you want to change the default set:

Mapping Params: ssh-keypath.default=/path/to/key;username.default=my-username

rundeck-ec2-nodes-plugin's People

Contributors

ahormazabal avatar asaf400 avatar carlosrfranco avatar chrismcg14 avatar doradito avatar gschueler avatar imad6639 avatar jsboak avatar l2je avatar ltamaster avatar mariadeanton avatar patelgaurang83 avatar protip avatar qualman avatar sjrd218 avatar smcavoy-travelbird avatar wayneingram avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rundeck-ec2-nodes-plugin's Issues

OutOfMemoryError

I keep running into OutOfMemoryError exceptions when requesting the nodes page on a project configured with the ec2-nodes-plugin. I tried to increase the MaxPermGenSize to higher and higher values with no success. I am running this plugin with Rundeck 2.5.0 and I have recompiled the plugin using Rundeck 2.5.0 (https://github.com/rundeck-plugins/rundeck-ec2-nodes-plugin/blob/master/build.gradle#L38).

With a lack of other issues (of this same nature) being post, I am thinking that something else is wrong with how I am using this plugin. This is a fresh install of Rundeck 2.5.0 and this plugin with a newly created project. No other plugins are installed (except for what comes natively with 2.5.0). Can anyone shed some light on what I am doing wrong?

IAM Profile

Currently the document specifies that this plugin will need to provide accessKey and secretKey in order to talk to AWS. Can this be extended to use IAM profile? This way, there is no need to explicitly store a pair of access and secret keys if the instance host rundeck is an EC2 node. Some applications will switch to IAM role if access key and secret key are not provided.

Grafana Cloudwatch Connection error

Hi,

We have got Grafana installed and configured with AWS/EC2 Cloudwatch Datasource and it is successfully.
However, when we open the Dashboard, it displays all measures with no datapoint.
Below is the error log showing on the server:

lvl=eror msg="CloudWatch: Failed to assume role%!(EXTRA []interface {}=[AccessDenied: User: arn:aws:iam::xxxxxxxx:user/grafana-user is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::xxxxxxxx:role/grafana-role\n\tstatus code: 403, request id:

Any help would be appreciated

Plugin De-Duplicating EC2 Nodes with same name?

I have a number of auto-scaling groups that create nodes that, whilst having different EC2 tags, all have the same instance "name". It seems that the plugin is de-duplicating instances that have the same name and is not displaying them as nodes in Rundeck.

I.e. when I log in to the EC2 console, I have 330 running instances that come up. In Rundeck, only 218 appear when I pull with the same key via the EC2 plugin.

Each ASG that I have for each environment (dev, qa, stage, uat, etc) has multiple instances, all with the same instance name (although different tags, security groups, etc). Like:

Name Tag

fff-dev1-cq5-stack AuthorAutoscaleGroup
fff-dev1-cq5-stack PublishAutoscaleGroup
fff-dev1-cq5-stack DispatchAutoscaleGroup

But in Rundeck, only one of the above appears.

Is there something I can do to convince it that different instances are different, even if they have the same name?

saved filter appears in other projects

Not sure this is the issue in rundeck or rundeck-ec2-nodes-plugin.

In AWS system, I have three environments (tags environment=dev/uat/prod), So I create three rundeck projects (dev/uat/prod), each environment has several groups, such as abc1, abc2, etc. So for one aws ec2 instance, the tags will be

Name:  hostname
environment:  [dev|uat|prod]
Group:  [abc1|abc2|abc3]

In rundeck dev project, I save the filter (group: abc1), I can see all instances (dev and abc1) in that group, so saved the filter as "dev.abc1"

So I move to uat project, then i found the filter (dev.abc1) is also appeared in project uat, and if I choice it, show the dev instances, that's not right. I shouldn't see any dev instances in uat project.

Could you please help if there are something I can fixe?

My environment:

latest rundeck version 2.5
latest ec2 plugin version 1.5
centos 6.5
all instances include rundeck are aws ec2 instances.

Node list not populated

Hi there,

Using a fresh install of Rundeck 2.6.2 and rundeck-ec2-nodes-plugin-1.5.1.jar (I also tried master), the node list is not populated at all:

I can confirm the IAM profile has correct access to ec2:* and used a token as well with full access to test:

The xml is pretty much empty on the server:

root@noop-i-7d2780a5 /var/lib/rundeck/var/resourceModelSourceCache/antho # ll
total 12K
drwxrwxr-x 2 rundeck rundeck 4.0K Feb 22 23:19 ./
drwxrwxr-x 3 rundeck rundeck 4.0K Feb 22 23:18 ../
-rw-rw-r-- 1 rundeck rundeck   51 Feb 22 23:38 2.aws-ec2.xml

root@noop-i-7d2780a5 /var/lib/rundeck/var/resourceModelSourceCache/antho # cat 2.aws-ec2.xml
<?xml version="1.0" encoding="UTF-8"?>

<project/>

Any ideas ? The logs don't show anything unfortunately.

Thanks in advance!

default hostname selector should fallback to privateIpAddress

Hey,

So I'm getting all this working and noticed that anything that requires SSH to a remote node, the rundeck server seems to using its own local ip instead. I think maybe it's not mapping the privateipaddress correctly for the remote node?

Example:

Executing command on node: example-node-1234, NodeEntryImpl{tags=[pony, staging, worker, running], attributes={tags=ec2, osFamily=unix, osArch=x86_64, state=running, instanceId=i-b62a5032, editUrl=https://console.aws.amazon.com/ec2/home#s=Instances&selectInstance=${node.instanceId}, hostname=, privateDnsName=ip-10-0-11-25.ec2.internal, sshport=22, privateIpAddress=10.0.11.25, username=test, description=EC2 node instance, nodename=example-node-1234, osName=Linux}, project='null'}
15:29:42    example-node-1234    1. Copying manage_applications.sh to the remote server @ /tmp/manage_applications.sh   [workflow] beginExecuteNodeStep(example-node-1234): NodeDispatch: StepExecutionItem{type='NodeDispatch', keepgoingOnSuccess=false, hasFailureHandler=false}
15:29:42            Begin copy 1173 bytes to node example-node-1234: /var/lib/rundeck/repos/rundeck/manage_applications.sh -> /tmp/manage_applications.sh
15:29:42            Using ssh keyfile: /var/lib/rundeck/.ssh/id_rsa
15:29:42            copying file: '/var/lib/rundeck/repos/rundeck/manage_applications.sh' to: 'example-node-1234:/tmp/manage_applications.sh'
15:29:42            Using private key file: /var/lib/rundeck/.ssh/id_rsa
15:29:42            Set timeout to 0
15:29:42            Connecting to :22  <--- Is this supposed to have an ipaddress?
15:29:42            Connecting to  port 22
15:29:42            Connection established

unable to execute a script locally on the server node

It appears that ~/var/resourceModelSourceCache/{project_name}/1.aws-ec2.xml which describes EC2 nodes list overrides or doesn't merge nodes defined within resources.xml of a project. That means the localhost node is not described and we are not able to run local scripts.

As improvement, it would be great to have the resulting nodes list, as a merge of those from the EC2 plugin with those from resources.xml

No nodes listed, no errors

I have installed 1.5.2 on 2.6.6 and am not seeing any nodes populating.

I tried a false key and received and error. Fixed it, no nodes.
I checked the key is authorised to run describe-instances
And I have seen https between rundeck and a AWS IP that was timed with the reload of the node list.

I do not see any errors related to getting the details from AWS. I see no option to increase the verbosity of logging to determine why this is not working.

The only odd thing in the logs I found is below:

2016-04-26 10:19:31,399 - Evaluating Decision for: res subject action env: authorized: true: GRANTED, reason: GRANTED, evaluations:        ACLRule{'Admin, all access.' context={project='.*'} type='resource' for: { group='admin'} allow=[*]} GRANTED for action read => GRANTED (0ms)
2016-04-26 10:19:31,399 - Evaluating Decision for: res subject action env: authorized: false:      No context matches subject or environment => REJECTED_NO_SUBJECT_OR_ENV_FOUND (0ms)

Has this behaviour been seen before? Is there anyway to further debug this problem?
Thanks,

Sean

nodelist is stuck and not updating

I'm facing with ec2 plugin bug. Sometimes my ec2 nodelist stops to update.

root@ml-batch01:/rundeck/var/resourceModelSourceCache/Machine-Learning# ls -la
total 204
drwxrwxr-x 2 rundeck rundeck   4096 Nov 18 14:00 .
drwxrwxr-x 3 rundeck rundeck   4096 Oct 26 17:48 ..
-rw-rw-r-- 1 rundeck rundeck 197353 Nov 17 14:15 2.aws-ec2.xml
root@ml-batch01:/rundeck/var/resourceModelSourceCache/Machine-Learning# date
Wed Nov 18 14:07:04 GMT+5 2015

I was trying to pull nodelist by visiting the node page or running any job - It doesn't resolve anything. Sometimes it's just sticking like that. Rundeck restart helps tho.

Log

WARN  LoggingResourceModelSourceCache: [ResourceModelSource: 2.aws-ec2 (AWS EC2 Resources), project: Machine-Learning] Returning cached model data
ERROR ExceptionCatchingResourceModelSource: [ResourceModelSource: 2.aws-ec2 (AWS EC2 Resources), project: Machine-Learning]
java.lang.NoClassDefFoundError: com/amazonaws/services/ec2/AmazonEC2AsyncClient
        at com.dtolabs.rundeck.plugin.resources.ec2.InstanceToNodeMapper.performQueryAsync(InstanceToNodeMapper.java:105)
        at com.dtolabs.rundeck.plugin.resources.ec2.EC2ResourceModelSource.getNodes(EC2ResourceModelSource.java:208)
        at com.dtolabs.rundeck.core.resources.ExceptionCatchingResourceModelSource.getNodes(ExceptionCatchingResourceModelSource.java:45)
        at com.dtolabs.rundeck.core.common.ProjectNodeSupport.getNodeSet(ProjectNodeSupport.java:88)
        at com.dtolabs.rundeck.core.common.FrameworkProject.getNodeSet(FrameworkProject.java:380)
        at com.dtolabs.rundeck.core.common.IRundeckProject$getNodeSet$2.call(Unknown Source)
        at rundeck.services.FrameworkService$_filterNodeSet_closure4.doCall(FrameworkService.groovy:283)
        at rundeck.services.FrameworkService$_filterNodeSet_closure4.doCall(FrameworkService.groovy)
        at sun.reflect.GeneratedMethodAccessor851.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
        at groovy.lang.Closure.call(Closure.java:423)
        at groovy.lang.Closure.call(Closure.java:417)
        at com.codahale.metrics.Timer.time(Timer.java:99)
        at com.codahale.metrics.Timer$time$0.call(Unknown Source)
        at MetricswebGrailsPlugin$_addDynamicMetricMethods_closure26.doCall(MetricswebGrailsPlugin.groovy:174)
        at sun.reflect.GeneratedMethodAccessor578.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
        at groovy.lang.Closure.call(Closure.java:423)
        at org.codehaus.groovy.runtime.metaclass.ClosureStaticMetaMethod.invoke(ClosureStaticMetaMethod.java:59)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:248)
        at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124)
        at rundeck.services.FrameworkService.filterNodeSet(FrameworkService.groovy:282)
        at rundeck.services.FrameworkService$filterNodeSet$24.call(Unknown Source)
        at rundeck.services.ExecutionService.createContext(ExecutionService.groovy:1061)
        at rundeck.services.ExecutionService$createContext$26.callCurrent(Unknown Source)
        at rundeck.services.ExecutionService.executeAsyncBegin(ExecutionService.groovy:794)
        at rundeck.services.ExecutionService.executeAsyncBegin(ExecutionService.groovy)
        at rundeck.services.ExecutionService$$FastClassBySpringCGLIB$$ffb73873.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
        at rundeck.services.ExecutionService$$EnhancerBySpringCGLIB$$e0364ca7.executeAsyncBegin(<generated>)
        at rundeck.services.ExecutionService$executeAsyncBegin$15.call(Unknown Source)
        at rundeck.quartzjobs.ExecutionJob.executeCommand(ExecutionJob.groovy:290)
        at rundeck.quartzjobs.ExecutionJob$executeCommand$6.callCurrent(Unknown Source)
        at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:125)
        at sun.reflect.GeneratedMethodAccessor1281.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
        at groovy.lang.Closure.call(Closure.java:423)
        at groovy.lang.Closure.call(Closure.java:417)
        at com.codahale.metrics.Timer.time(Timer.java:99)
        at com.codahale.metrics.Timer$time$0.call(Unknown Source)
        at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:73)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

discussion: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/rundeck-discuss/7L5zlPRcaw4/FYVziqLIAgAJ

Allow merging multiple Instance tags into the RunDeck tags

if Instances have tags such as Role and Environment, allow the mapping to merge multiple Instance Tags into the RunDeck tags.

suggested syntax:

tags.selector=tags/FirstTag|tags/SecondTag

If the Instance tag values are FirstTag=a and SecondTag=b,c, then the RunDeck tags result should be "a,b,c".

show all hosts from 2 different aws accounts in 1 project

Hi Greg ,

I would like to know if there is an options to get all aws hosts from 2 different account in 1 rundeck project .

For now i have 2 different aws accounts.
1 rundeck project for example called : X-project and use IAM role to access X account
another rundeck project called : Y-project and use access_key & secret_key to access Y account

is there any other options to get all the hosts from X & Y accounts in 1 rundeck project ?

Thanks ,
Amit

Log4j problems with Rundeck 1.6

Hi. After an upgrade to 1.6 the plugin is no longer working and everytime I try to list nodes I get this error

Class org.apache.commons.logging.impl.Log4JLogger does not implement Log

After doing some research it seems to be related to rundeck/rundeck#419.
Rollbacking to Rundeck 1.5 fixes the problem

Update the docs to be non-java developer friendly

Not everyone is familiar with properties files layout, or even may have missed the part of the Rundeck docs on configuring resources. The documentation for the plugin seems to make some assumptions about it's user base that may not be correct given the adoption of Rundeck.

  1. A great example of how to improve the docs would be specifying how to add the parameters to the project.properties in the proper format (with example code)
    for example, instead of showing the final result in the UI when changing the username, show the line in the properties files

    if you want to change the default set: 
    Mapping Params: ssh-keypath.default=/path/to/key;username.default=my-username
    

    vs:

    resources.source.1.config.mappingParams=ssh-keypath.default=/path/to/key;username.default=my-username
    
  2. Adding an example file for the custom mappingFile would be handy, so newcomers would be able to base their configs on a know working example instead of hacking away at a file that they don't know the layout for.

  3. Adding an example for mapping the EC2 instance fields to the Rundeck node fields would be rally handy as well

  4. Examples are a great teacher when you come to a new project, so add them as appropriate

Thanks guys, I love the plugin now that I got it working :)

not working with rundeck 2.6.2-1?

The plugin does not appear to show up when following the installation instructions. Steps to reproduce:

Expected behavior

  • Navigate to the system configuration -> List Plugins -> Resource Model Sources. ec2-nodes plugin should be displayed
  • Under project configuration -> Simple Configuration -> Resource Model Sources -> Add Source, ec2-nodes should be an option

Current behavior

  • Plugin does not show up in list plugins
  • Ec2 is not an option under Resource Model Sources
  • When configuring manually, an exception is thrown not recognizing the provider type.

Multiple Maven repos and build failure

I think you hit the following Gradle bug:

http://issues.gradle.org/browse/GRADLE-2034

If I try to build the jar, I get the following error:

A problem occurred evaluating root project 'rundeck-ec2-nodes-plugin'.
Could not resolve all dependencies for configuration ':pluginLibs'.
Artifact 'commons-logging:commons-logging:1.0.3@jar' not found.

The reason is, this specific version isn't in my local repository (I use a newer version in an other project). If I remove the mavenLocal() everything works fine.

Filter improvement

As required in #21, I raise this issue.

I use filter tag:node_environment=uat or tag:node_environment=dev, got the node lists.

But if I merge them as tag:node_environment=uat;tag:node_environment=dev, no node got listed.

I'd like to list both uat and dev nodes.

My environment:
Rundeck and ec2-nodes-plugin are all latest version.
ad48597#diff-1e290ac8433d555bce009b162cb869d0L38

Filter documentation improvement

The docs should have better examples for the filter options. I was trying to filter my instances by AWS TAGs. Going by the documentation here and AWS I thought the filter should look like:
Filter.1.Name=tag:$MYTAGNAME ; Filter.1.Value.1=$MYTAGVALUE

When in reality it should be:
tag:$MYTAGNAME=$MYTAGVALUE

Installation instructions

Your README contains reference to .jar file, which doesn't exists in repository for latest (v1.3) version. Please add this file or update README with instructions how to build this file.

Make AWS access key and secret optional, and use IAM profile instead

It would be great if this plugin was updated to make supplying an AWS access key and secret optional, and if they aren't present to automatically use an associated IAM role if present instead.

See how boto works if it's not clear what I mean - it probably just requires updating the AWS SDK I expect.

Plugin does not provide a way to concatenate EC2 attributes

Rundeck only displays the nodename in "matched nodes" of the job. So it is important that the nodename contains all the relevant information to identify a node when running a job.

The default for this plugin is:
nodename.selector=tags/Name,instanceId

There are two problems with this:

  1. tags/Name will not be unique in autoscaled instances since the tags are propagated.
  2. It uses instanceId only when tags/Name is missing

Therefore, we need a way to make nodename unique which can be done by concatenating the two items - tags/Name + instanceId. Is this possible?

Feature Request: Set Global Configuration for the Plugin

I am using rundeck to administer my production cluster. It is all hosted within AWS. Currently, we have the following configuration in every project:

screen shot 2015-05-07 at 08 11 29

This allows us to get around the current bug of instances being truncated due to the names being the same. It also allows us to specify a deploy user to internal DNS and to filter based on tags

Having to do this in every project seems to be a little bit of over configuration so being able to set configuration for the plugin as follows would make things a lot simplier. We could then override it on a project by project basis:

framework.plugin.ResourceModelSource.Ec2Nodes.MappingParams= value
framework.plugin.ResourceModelSource.Ec2Nodes.AccessKey = value
etc.

RD retuns one node for all auto scaling group instances

It appears that when I filter for an instance name it only returns one of the instances in an auto scaling group. I am not sure if this is the expected functionality. When I checked the details though it has one specific ID listed.

Is the search result being keyed on a name so its de-duplicated?

can't execute on ec2 nodes

ec2 nodes show up in the rundeck GUI, but when running a job/adhoc command the nodes are not found, and the result is "No matched nodes: NodeSet{includes={tags=rundeckdemo, dominant=false, }}"

problem: the ec2 node data is not cached or shared between instances of a Framework, and the RunDeck GUI uses a second Framework instance when it dispatches executions

fix: either cache the discovered ec2 node data to a file, or share the data

Issue with Multiple AWS Accounts in One Project Results in Amazon Returning 403

Rundeck AWS Plugin Issue with Multiple AWS Accounts in One Project

Error as Displayed in the UI

Request: /resources/nodesFragment?inlinepaging=true&project=PROJECT1&declarenone=true&expanddetail=true&max=20&nodeIncludeName=.*&page=0&fullresults=true&nodeExcludePrecedence=true&view=table
Message: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. 
Caused by: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. 
Class: FrameworkController 
At Line: [401] 

from service.log

ERROR GrailsExceptionResolver: Exception occurred when processing request: [POST] /resources/nodesFragment
Stacktrace follows:
Status Code: 403, AWS Request ID: 5425a0ee-f810-4bde-9390-e0bffec2683b, AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
    at com.amazonaws.http.HttpClient.handleErrorResponse(HttpClient.java:490)
    at com.amazonaws.http.HttpClient.execute(HttpClient.java:196)
    at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:3804)
    at com.amazonaws.services.ec2.AmazonEC2Client.describeInstances(AmazonEC2Client.java:452)
    at com.dtolabs.rundeck.plugin.resources.ec2.InstanceToNodeMapper.query(InstanceToNodeMapper.java:140)
    at com.dtolabs.rundeck.plugin.resources.ec2.InstanceToNodeMapper.performQuery(InstanceToNodeMapper.java:78)
    at com.dtolabs.rundeck.plugin.resources.ec2.EC2ResourceModelSource.getNodes(EC2ResourceModelSource.java:178)
    at com.dtolabs.rundeck.core.common.FrameworkProject.getNodeSet(FrameworkProject.java:440)
    at com.dtolabs.rundeck.core.common.FrameworkProject$getNodeSet.call(Unknown Source)
    at rundeck.controllers.FrameworkController.nodesdata(FrameworkController.groovy:203)
    at rundeck.controllers.FrameworkController$_closure5.doCall(FrameworkController.groovy:401)
    at rundeck.controllers.FrameworkController$_closure5.call(FrameworkController.groovy)

from stacktrace.log

2013-12-03 16:52:51,949 [656575672@qtp-407862970-10] ERROR StackTrace  - Sanitizing stacktrace:
Status Code: 403, AWS Request ID: af58d83c-a1d6-41a0-82c5-2806639ed554, AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
    at com.amazonaws.http.HttpClient.handleErrorResponse(HttpClient.java:490)
    at com.amazonaws.http.HttpClient.execute(HttpClient.java:196)
    at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:3804)
    at com.amazonaws.services.ec2.AmazonEC2Client.describeInstances(AmazonEC2Client.java:452)
    at com.dtolabs.rundeck.plugin.resources.ec2.InstanceToNodeMapper.query(InstanceToNodeMapper.java:140)
    at com.dtolabs.rundeck.plugin.resources.ec2.InstanceToNodeMapper.performQuery(InstanceToNodeMapper.java:78)
    at com.dtolabs.rundeck.plugin.resources.ec2.EC2ResourceModelSource.getNodes(EC2ResourceModelSource.java:178)
    at com.dtolabs.rundeck.core.common.FrameworkProject.getNodeSet(FrameworkProject.java:440)
    at com.dtolabs.rundeck.core.common.FrameworkProject$getNodeSet.call(Unknown Source)
    at rundeck.controllers.FrameworkController.nodesdata(FrameworkController.groovy:203)
    at rundeck.controllers.FrameworkController$_closure5.doCall(FrameworkController.groovy:401)
    at rundeck.controllers.FrameworkController$_closure5.call(FrameworkController.groovy)

project.properties

#Dec 1 21:05:39 UTC 2013
service.NodeExecutor.default.provider=jsch-ssh
project.ssh-keypath=/var/lib/rundeck/.ssh/id_rsa
project.name=PROJECT1
project.resources.file=/var/rundeck/projects/PROJECT1/etc/resources.xml
service.FileCopier.default.provider=jsch-scp
resources.source.1.type=aws-ec2
resources.source.1.config.accessKey=KEY1
resources.source.1.config.secretKey=SECRET1 
resources.source.1.config.runningOnly=True
resources.source.1.config.useDefaultMapping=True
resources.source.1.config.mappingParams=username.default\=rd
resources.source.2.type=aws-ec2
resources.source.2.config.accessKey=KEY2
resources.source.2.config.secretKey=SECRET2 
resources.source.2.config.runningOnly=True
resources.source.2.config.useDefaultMapping=True
resources.source.2.config.mappingParams=username.default\=rd
resources.source.3.type=aws-ec2
resources.source.3.config.accessKey=KEY3
resources.source.3.config.secretKey=SECRET3 
resources.source.3.config.runningOnly=True
resources.source.3.config.useDefaultMapping=True
resources.source.3.config.mappingParams=username.default\=rd

Not connecting non-public IP nodes

I can run jobs in nodes that have a public IP address, but not to the internal ones.

Checking on the "Nodes" section, I can see that the user is set as "ec2-user" but the hostname field is empty.

Is there a way to force the connection threw internal IP?

Endpoint config being ignored

I have Rundeck 2.6.4-1 and installed the ec2 plugin v 1.5.2. I added this to the project configuration:

resources.source.1.endpoint=us-west-2
resources.source.1.type=aws-ec2

But in the nodes section, it continues to list all my nodes from the us-east-1 region, basically ignoring the us-west-2 specification in the config. Already restarted the rundeck process but that didn't help.

I see no errors in the logs.

Any ideas what could be wrong?

Support for Rundeck 2.2.1-0 ?

I got this error in the log file, saying that the plugin version is unsupported.
Any chance I can get this running on rundeck 2.2. ?

2014-08-19 10:49:09,941 [main] INFO  grails.app.conf.BootStrap - Starting Rundeck 2.2.1-0...
2014-08-19 10:49:09,950 [main] INFO  grails.app.conf.BootStrap - using rdeck.base config property: /var/lib/rundeck
2014-08-19 10:49:09,970 [main] INFO  grails.app.conf.BootStrap - loaded configuration: /etc/rundeck/framework.properties
2014-08-19 10:49:10,159 [main] INFO  grails.app.conf.BootStrap - RSS feeds disabled
2014-08-19 10:52:09,646 [qtp1441267342-30] ERROR com.dtolabs.rundeck.core.plugins.JarPluginProviderLoader - /var/lib/rundeck/libext/rundeck-ec2-nodes-plugin-1.2.jar: Unsupported plugin version: Rundeck-Plugin-Version: 1.0

rundeck variables do not get translated in mapping file or mapping params

In my mapping file I have
editUrl.default=https://console.aws.amazon.com/ec2/home#s=Instances&selectInstance=${node.instanceId}

The out put is https://console.aws.amazon.com/ec2/home#s=Instances&selectInstance=${node.instanceId}

The variable ${node.instanceId} does not get translated.

For the mapping params I tried
ssh-keypath.default=/path/to/key/${node.ec2-keyname}.pem;ec2-keyname.selector=keyName
This also does not get translated

Jobs set to "Dispatch to Nodes" don't dispatch to nodes

When I create a job that is intended to be dispatched to nodes that are discovered by this plugin, the job actually runs on the local rundeck host, not the target EC2 node. This problem is unique to nodes that are discovered by this plugin. If I manually add the EC2 node to my resources.xml file, the job is correctly dispatched to the node.

The XML below will output the hostname of the rundeck server, not the hostname of the target node.

<joblist>
  <job>
    <id>bd503489-d40f-48c5-ac36-15c670a9b80e</id>
    <loglevel>INFO</loglevel>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <scriptargs />
        <script><![CDATA[
hostname -f
echo "fu"
]]></script>
      </command>
    </sequence>
    <description></description>
    <name>FU</name>
    <context>
      <project>XRE-Guide</project>
    </context>
    <dispatch>
      <threadcount>1</threadcount>
      <keepgoing>false</keepgoing>
      <excludePrecedence>true</excludePrecedence>
      <rankOrder>ascending</rankOrder>
    </dispatch>
    <uuid>bd503489-d40f-48c5-ac36-15c670a9b80e</uuid>
    <nodefilters>
      <filter>.*target.*</filter>
    </nodefilters>
  </job>
</joblist>

Refresh nodes on scheduled jobs

More of a question than an issue itself.

I am running Rundeck 2.6.7 and plugin 1.5.2. I have configured number of project and scheduled jobs that run on EC2 instances that belong to Auto Scaling Groups. Everything works as expected until the ASG scales down and terminates some of the instances. Scheduled jobs are timing out because they cannot connect to the terminated nodes because the node select filter has not been refreshed to see the updated list of the instances.

I have gone through the docs of both Rundeck and the plugin however I could not spot anything that would allow me to refresh the nodes before running those jobs. Is this intended behaviour or have I missed something when configuring jobs/projects,sources? Is there any way I can debug it any further?

Thanks
Greg

Mapping Params key storage

I have found a mapping parameter in documentation for key path:
Mapping Params: ssh-keypath.default=/path/to/key

But I have not found one for key storage path. Could you please add that as an option or document it? Thanks.

Allow merging instance tags and fields into the RunDeck tags

I'd like to be able to merge EC2 fields and EC2 tags in the tags.selector field. For example, we'd like have EC2 availability zone as a tag in rundeck, along side our custom tags:

tags.selector=placement.availabilityZone|tags/role

If role=api and the AZ is us-east-1a, then the RunDeck tags should be "us-east-1a,api".

Update:

I just discovered this exception, caused by the configuration above:

java.lang.NoSuchMethodException: Unknown property 'availabilityZone|tags/role' on class 'class com.amazonaws.services.ec2.model.Placement'

Based on that I guessed that reversing the order might do the trick for now, and it does. But order dependency and the exception looks like a bug.

NullPointerException when trying to save project.

Hi, i updated the plugin version to 1.5 because of eu-central-1 signing issue, and started to receive the NullPointerException on Project save. It's easy reprodusable:

  1. edit project
  2. add ec2 resources
  3. try to delete them
    receive:
java.util.NoSuchElementException
    at java.util.ArrayList$Itr.next(ArrayList.java:834)
    at java.util.Collections.max(Collections.java:698)
    at rundeck.services.PasswordFieldsService.adjust(PasswordFieldsService.groovy:55)
    at rundeck.controllers.FrameworkController$_closure4.doCall(FrameworkController.groovy:901)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1360)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:539)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:288)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:115)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:486)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
    at org.eclipse.jetty.server.Server.handle(Server.java:349)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:925)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:857)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
    at java.lang.Thread.run(Thread.java:745)

I tried to edit my current projects and looks like if i add http proxy password i can change mapping or something, but i still cant delete it.

I'm running Rundeck 2.3.2-1 with MySQL backend.

thanks

two version of ec2-nodes-plugin

I installed two version rundeck-ec2-nodes-plugin (1.5 and 1.5.1) under $RDECK_BASE/libext

I think I should get two ec2 plugins, but I found ec2 plugin is totally disappeared in Rundeck.

Run command with sudo without disabling requiretty

Hi ,

I'm using the rundeck-ec2-nodes-plugin and i need to run command with sudo .

when I'm running them as sudo I'm getting the next error :

sudo: sorry, you must have a tty to run sudo

i don't want to comment : Defaults requiretty from sudoers file .
Also i didn't fine if i can add "sudo authentication" for ec2 plugin .

Thanks for your help
Amit

manage nodes in aws consolidated accounts

We use aws consolidated accounts to manage the resources. So I need the feature to get all nodes from main account and several consolidated accounts.

Rundeck server is installed at main account.

Is this function available already?

Proxy ignored

Hi,
I am using the plugin version 1.5.2
The Proxy is set in the required fields, also set as Java parameters for rundeck and in /etc/environment. The AWS Endpoint is also set correct.
It should be used the Instance IAM-Role to get the Nodes from EC2.
But I get this Exception and the Nodes are not imported
com.amazonaws.AmazonClientException: Unable to execute HTTP request: Connect to sts.amazonaws.com:443 timed out

Thanks in advance!

Autoscaling instance naming problem

Hi!

I'm using Autoscaling and I'm having some troubles.

Autoscaling usually set the same name for all instances of a kind. Rundeck then show as if only one instance exists...

Is there something that I can do to fix this?

Thanks!!
Marcos

only show one aws instance

I installed the latest rundeck (2.4.2) and latest rundeck ec2 nodes plugin. But the rundeck server can only discover 1 aws Node (my match filter is correct), if I stop that one, it shows the next running ec2 instance.

I use rundeck version 1.5.x with ec2 plugin before, have no this issue.

Then I review ec2 plugin release, seems only support rundeck 1.6 (and lower) and 2.0. Does this mean I have to install old rundeck version to match with ec2 plugin?

Could you please confirm?

some links are dead

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.