title: python string replacement str type error dynamically building aws user-data script
body: <p>The problem: I'm trying to dynamically build a python user-data script for amazon in a jenkins deploy script and pass it to an ASG to be executed at runtime. I pass my vars to the deploy script and then dynamically create the python script based on arguments.</p>
  
  <p>I'm getting an unexpected string replacement error and I'm not entirely sure why handoff.sh is what passed the arguments from jenkins to the deploy script:</p>
  
  <p>the error:</p>
  
  <pre><code>    [deploy-and-configure-test] $ /bin/sh -xe /tmp/hudson8978997207867591628.sh
  + sh /var/lib/jenkins/workspace/deploy-and-configure-test/handoff.sh
  Traceback (most recent call last):
    File "/var/lib/jenkins/workspace/deploy-and-configure-test/asgBuilder.py", line 393, in &lt;module&gt;
      ''' % (str(repo), str(playbook),str(user_data_ins), str(in_user_data)))
  TypeError: %u format: a number is required, not str
  </code></pre>
  
  <p>the dynamic portion of my deploy script:</p>
  
  <pre><code>in_user_data = args.in_user_data
  playbook = args.playbook
  repo = args.repo
  
  user_data_ins = ('''export CLOUD_ENVIRONMENT=%s\n
                      export CLOUD_MONITOR_BUCKET=%s\n
                      export CLOUD_APP=%s\n
                      export CLOUD_STACK=%s\n
                      export CLOUD_CLUSTER=%s\n
                      export CLOUD_AUTO_SCALE_GROUP=%s\n
                      export CLOUD_LAUNCH_CONFIG=%s\n
                      export EC2_REGION=%s\n
                      export CLOUD_DEV_PHASE=%s\n
                      export CLOUD_REVISION=%s\n
                      export CLOUD_DOMAIN=%s\n
                      export SG_GROUP=%s\n''' % (cloud_environment,
                                                  cluster_monitor_bucket,
                                                  cluster_name,
                                                  cloud_stack,
                                                  cloud_cluster,
                                                  cloud_auto_scale_group,
                                                  cloud_launch_config,
                                                  provider_region,
                                                  cloud_dev_phase,
                                                  cloud_revision,
                                                  cloud_domain,
                                                  export_env_sg_name))
  user_data_ins = ('''
  #!/usr/bin/python
  
  import os
  import subprocess
  import time
  import uuid
  
  
  def shell_command_execute(command):
      p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
      (output, err) = p.communicate()
      print output
      return output
  
  repo = "%s"
  playbook = "%s"
  
  
  echo_bash_profile = "echo %s &gt;&gt; ~/.bash_profile" % user_echo
  shell_command_execute(echo_bash_profile)
  
  var_user_data = "%s"
  
  for varb in var_user_data.split('|'):
      echo_bash_profile_passed = "echo " + varb  + " &gt;&gt; ~/.bash_profile"
      shell_command_execute(echo_bash_profile_passed)
  
  command = 'git clone ' + repo
  shell_command_execute(command)
  
  folder = repo.split('/')[4].replace('.git','')
  #https://github.com/test/test.git # replaced for security.
  execute_playbook = ('ansible-playbook -i "localhost," -c local' +  '/' + os.path.dirname(os.path.realpath(__file__)) + '/' + folder + '/' + playbook &gt;&gt; ansible.log')
  print execute_playbook
  shell_command_execute(execute_playbook)
  ''' % (str(repo), str(playbook),str(user_data_ins), str(in_user_data)))
  
  text_file = open("user-data.py", "wa")
  text_file.write(user_data_ins)    
  text_file.close()    
  lc_user_data = '${file("%s/user-data.py")}' %wd
  </code></pre>
  
  <p>updated still not working</p>
  
  <pre><code>user_data_ins = ('''export CLOUD_ENVIRONMENT=%s\n
                      export CLOUD_MONITOR_BUCKET=%s\n
                      export CLOUD_APP=%s\n
                      export CLOUD_STACK=%s\n
                      export CLOUD_CLUSTER=%s\n
                      export CLOUD_AUTO_SCALE_GROUP=%s\n
                      export CLOUD_LAUNCH_CONFIG=%s\n
                      export EC2_REGION=%s\n
                      export CLOUD_DEV_PHASE=%s\n
                      export CLOUD_REVISION=%s\n
                      export CLOUD_DOMAIN=%s\n
                      export SG_GROUP=%s\n''' % (cloud_environment,
                                                  cluster_monitor_bucket,
                                                  cluster_name,
                                                  cloud_stack,
                                                  cloud_cluster,
                                                  cloud_auto_scale_group,
                                                  cloud_launch_config,
                                                  provider_region,
                                                  cloud_dev_phase,
                                                  cloud_revision,
                                                  cloud_domain,
                                                  export_env_sg_name))
  
  
  
  user_data_ins = ('''
  #!/usr/bin/python
  
  import os
  import subprocess
  import time
  import uuid
  
  
  def shell_command_execute(command):
      p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
      (output, err) = p.communicate()
      print output
      return output
  
  repo = "%s"
  playbook = "%s"
  
  
  echo_bash_profile = "echo %s &gt;&gt; ~/.bash_profile" % user_echo
  shell_command_execute(echo_bash_profile)
  
  var_user_data = "%s"
  
  for varb in var_user_data.split('|'):
      echo_bash_profile_passed = "echo " + varb  + " &gt;&gt; ~/.bash_profile"
      shell_command_execute(echo_bash_profile_passed)
  
  command = 'git clone ' + repo
  shell_command_execute(command)
  
  folder = repo.split('/')[4].replace('.git','')
  #https://github.com/zukeru/vision_provis.git
  execute_playbook = ('ansible-playbook -i "localhost," -c local' +  '/' + os.path.dirname(os.path.realpath(__file__)) + '/' + folder + '/' + playbook &gt;&gt; ansible.log')
  print execute_playbook
  shell_command_execute(execute_playbook)
  ''' % (str(repo), str(playbook),str(user_data_ins), str(in_user_data)))
  
  text_file = open("user-data.py", "wa")
  text_file.write(user_data_ins)    
  text_file.close()    
  lc_user_data = '${file("%s/user-data.py")}' %wd
  </code></pre>