Here's a patch that removes the strong requirement to have "master" and "slave" types. Instead, instances have one or more roles, which are stored in EC2 as security groups. The instance uses knowledge of its role to start the relevant daemons at boot time - for example the "nn" role will start up the namenode.
Here's how you launch one master node (running a namenode, secondary namenode, and a jobtracker) and 10 datanodes/tasktrackers:
hadoop-ec2 launch-cluster my-hadoop-cluster 1 nn,snn,jt 10 dn,tt
The following command will launch a namenode and a separate jobtracker (and 10 datanodes/tasktrackers).
hadoop-ec2 launch-cluster my-hadoop-cluster 1 nn,snn 1 jt 10 dn,tt
This patch is fairly large, but there is little new code, since it is mainly refactoring. Previously, the logic for each command was spread between cli.py and commands.py. Now, cli.py is responsible only for command line parsing, and it delegates to service.py, which contains the class HadoopService.py for the Hadoop-specific logic.