(command.CommandList
  children: [
    (C {<set>} {<-e>})
    (C {<.>} {<'../proxy_setup.sh'>})
    (C {<printf>} {(DQ <'#### Setup Environment'> <Id.Lit_BadBackslash '\\'> <n>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ENVIRONMENT)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<Test-Laptop>})
                )
              )
            }
          spids: [34]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FIRST_HEAD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<grep>} {<-i>} {(SQ <head>)} {<'../cluster.txt'>})
                      (C {<cut>} {<-f>} {<3>} {<-d> (SQ <' '>)})
                      (C {<tail>} {<-1>})
                    ]
                    negated: F
                  )
              )
            }
          spids: [44]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VIP)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<node>} {<show>} 
                            {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<hostname>}))} {<-a>} {(SQ <bcpc.management.vip>)}
                          )
                          (C {<tail>} {<-1>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [76]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BOOTSTRAP)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<node>} {<show>} 
                            {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<hostname>}))} {<-a>} {(SQ <bcpc.management.ip>)}
                          )
                          (C {<tail>} {<-1>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [114]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLUSTER_NODES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    words: [{<sed>} {<-e>} {(SQ <'s/[^0-9. ]//g'>)} {<-e>} {(SQ <'s/ /,/g'>)}]
                    redirects: [
                      (redir
                        op: <Id.Redir_TLess '<<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: 
                          {
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: (C {<cut>} {<-f>} {<3>} {<-d> (SQ <' '>)} {<'../cluster.txt'>})
                            )
                          }
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [155]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{<ping>} {<-c>} {<1>} {<-W>} {<5>} {($ Id.VSub_DollarName '$FIRST_HEAD')}]
          redirects: [
            (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
            (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
          ]
          do_fork: T
        )
        (C {<printf>} 
          {
            (DQ <'Pinging first headnode: '> (${ Id.VSub_Name FIRST_HEAD) <Id.Lit_BadBackslash '\\'> <n>)
          }
        )
        (command.Subshell
          child: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [
                        {<printf>}
                        {
                          (DQ <'Failed to ping first head node '> (${ Id.VSub_Name FIRST_HEAD) 
                            <Id.Lit_BadBackslash '\\'> <n>
                          )
                        }
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/stderr'>}
                        )
                      ]
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{<ping>} {<-c>} {<1>} {<-W>} {<5>} {($ Id.VSub_DollarName '$VIP')}]
          redirects: [
            (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
            (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
          ]
          do_fork: T
        )
        (C {<printf>} {(DQ <'Pinging VIP: '> (${ Id.VSub_Name VIP) <Id.Lit_BadBackslash '\\'> <n>)})
        (command.Subshell
          child: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [
                        {<printf>}
                        {
                          (DQ <'Failed to ping VIP '> (${ Id.VSub_Name VIP) <Id.Lit_BadBackslash '\\'> 
                            <n>
                          )
                        }
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/stderr'>}
                        )
                      ]
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{<ping>} {<-c>} {<1>} {<-W>} {<5>} {($ Id.VSub_DollarName '$BOOTSTRAP')}]
          redirects: [
            (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
            (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
          ]
          do_fork: T
        )
        (C {<printf>} 
          {(DQ <'Pinging bootstrap: '> (${ Id.VSub_Name BOOTSTRAP) <Id.Lit_BadBackslash '\\'> <n>)}
        )
        (command.Subshell
          child: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [
                        {<printf>}
                        {
                          (DQ <'Failed to ping bootstrap server '> (${ Id.VSub_Name BOOTSTRAP) 
                            <Id.Lit_BadBackslash '\\'> <n>
                          )
                        }
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<'/dev/stderr'>}
                        )
                      ]
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MANAGEMENT_CIDR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<node>} {<show>} 
                            {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<hostname>}))} {<-a>} {(SQ <bcpc.management.cidr>)}
                          )
                          (C {<tail>} {<-1>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [377]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FIXED_CIDR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<node>} {<show>} 
                            {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<hostname>}))} {<-a>} {(SQ <bcpc.fixed.cidr>)}
                          )
                          (C {<tail>} {<-1>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [415]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLOATING_CIDR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<node>} {<show>} 
                            {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<hostname>}))} {<-a>} {(SQ <bcpc.floating.cidr>)}
                          )
                          (C {<tail>} {<-1>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [453]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MANAGEMENT_GLOB)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    words: [
                      {<sed>}
                      {<-e>}
                      {(SQ <'s#/.*##'>)}
                      {<-e>}
                      {(SQ <'s/\\(\\.0\\)*.[0-9]\\{1,3\\}$/.*/'>)}
                    ]
                    redirects: [
                      (redir
                        op: <Id.Redir_TLess '<<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: {($ Id.VSub_DollarName '$MANAGEMENT_CIDR')}
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [495]
        )
      ]
    )
    (C {<printf>} 
      {(DQ <'Management glob: '> (${ Id.VSub_Name MANAGEMENT_GLOB) <Id.Lit_BadBackslash '\\'> <n>)}
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FIXED_GLOB)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    words: [
                      {<sed>}
                      {<-e>}
                      {(SQ <'s#/.*##'>)}
                      {<-e>}
                      {(SQ <'s/\\(\\.0\\)*.[0-9]\\{1,3\\}$/.*/'>)}
                    ]
                    redirects: [
                      (redir
                        op: <Id.Redir_TLess '<<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: {($ Id.VSub_DollarName '$FIXED_CIDR')}
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [527]
        )
      ]
    )
    (C {<printf>} {(DQ <'Fixed glob: '> (${ Id.VSub_Name FIXED_GLOB) <Id.Lit_BadBackslash '\\'> <n>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:FLOATING_GLOB)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    words: [
                      {<sed>}
                      {<-e>}
                      {(SQ <'s#/.*##'>)}
                      {<-e>}
                      {(SQ <'s/\\(\\.0\\)*.[0-9]\\{1,3\\}$/.*/'>)}
                    ]
                    redirects: [
                      (redir
                        op: <Id.Redir_TLess '<<<'>
                        loc: (redir_loc.Fd fd:0)
                        arg: {($ Id.VSub_DollarName '$FLOATING_CIDR')}
                      )
                    ]
                    do_fork: T
                  )
              )
            }
          spids: [559]
        )
      ]
    )
    (C {<printf>} 
      {(DQ <'Floating glob: '> (${ Id.VSub_Name FLOATING_GLOB) <Id.Lit_BadBackslash '\\'> <n>)}
    )
    (C {<printf>} {(DQ <'#### Setup Directories'> <Id.Lit_BadBackslash '\\'> <n>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST_DATA_DIR)
          op: assign_op.Equal
          rhs: {<test_data>}
          spids: [600]
        )
      ]
    )
    (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$TEST_DATA_DIR')})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.DBracket
          expr: 
            (bool_expr.Unary
              op_id: Id.BoolUnary_f
              child: {(${ Id.VSub_Name TEST_DATA_DIR) <'/test_ssh_key'>}
            )
        )
        (C {<ssh-keygen>} {<-t>} {<dsa>} {<-f>} {(${ Id.VSub_Name TEST_DATA_DIR) <'/test_ssh_key'>} {<-P>} {(SQ )})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.DBracket
          expr: 
            (bool_expr.Unary
              op_id: Id.BoolUnary_d
              child: {(${ Id.VSub_Name TEST_DATA_DIR) <'/tempest'>}
            )
        )
        (C {<git>} {<clone>} {<https> <Id.Lit_Colon ':'> <'//github.com/openstack/tempest.git'>} {<-b>} 
          {<'stable/grizzly'>} {(${ Id.VSub_Name TEST_DATA_DIR) <'/tempest'>}
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cobbler_pass)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.CommandList
                      children: [
                        (command.Sentence
                          child: (C {<cd>} {<..>})
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Pipeline
                          children: [
                            (C {<knife>} {<Id.KW_Data data>} {<bag>} {<show>} {<configs>} 
                              {($ Id.VSub_DollarName '$ENVIRONMENT')}
                            )
                            (C {<grep>} {(SQ <'cobbler-root-password:'>)})
                            (C {<sed>} {(SQ <'s/.* //'>)})
                          ]
                          negated: F
                        )
                      ]
                    )
                )
              )
            }
          spids: [678]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SCP_HOST)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'sshpass -p '> ($ Id.VSub_DollarName '$cobbler_pass') 
                <
' scp -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o VerifyHostKeyDNS=no'
                >
              )
            }
          spids: [714]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SSH_HOST)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'sshpass -p '> ($ Id.VSub_DollarName '$cobbler_pass') 
                <
' ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o VerifyHostKeyDNS=no -l ubuntu'
                >
              )
            }
          spids: [721]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {<echo>} {($ Id.VSub_DollarName '$cobbler_pass')})
        (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
          {(SQ <'sudo -S chmod 755 /root/adminrc /root'>)}
        )
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
                          {(SQ <'source /root/adminrc;glance image-list | grep -q Ubuntu'>)}
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {($ Id.VSub_DollarName '$CURL')} 
              {<http> <Id.Lit_Colon ':'> 
                <
'//cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img'
                >
              } {<-o>} {(${ Id.VSub_Name TEST_DATA_DIR) <'/ubuntu.img'>}
            )
            (C {($ Id.VSub_DollarName '$SCP_HOST')} {(${ Id.VSub_Name TEST_DATA_DIR) <'/ubuntu.img'>} 
              {<ubuntu> <Id.Lit_At '@'> (${ Id.VSub_Name FIRST_HEAD) <Id.Lit_Colon ':'> <ubuntu.img>}
            )
            (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
              {
                (SQ 
                  <
'source /root/adminrc; glance image-create --name Ubuntu --disk-format iso --container-format bare --file ubuntu.img --is-public True'
                  >
                )
              }
            )
          ]
          spids: [750 763]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {<echo>} {($ Id.VSub_DollarName '$cobbler_pass')})
        (command.Simple
          words: [
            {($ Id.VSub_DollarName '$SSH_HOST')}
            {($ Id.VSub_DollarName '$FIRST_HEAD')}
            {(SQ <'sudo -S cat /root/.ssh/id_rsa'>)}
          ]
          redirects: [
            (redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {(${ Id.VSub_Name TEST_DATA_DIR) <'/hypervisor_key'>}
            )
          ]
          do_fork: T
        )
      ]
      negated: F
    )
    (C {<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <n>)})
    (C {<printf>} {(DQ <'#### Gather Tempest.CONF configurations'> <Id.Lit_BadBackslash '\\'> <n>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cirros_image_id)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
                    {
                      (SQ 
                        <
'source /root/adminrc; glance image-list | grep Cirros | cut -f 2 -d"|" | grep -v "^+"'
                        >
                      )
                    }
                  )
              )
            }
          spids: [854]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ubuntu_image_id)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
                    {
                      (SQ 
                        <
'source /root/adminrc; glance image-list | grep Ubuntu | cut -f 2 -d"|" | grep -v "^+"'
                        >
                      )
                    }
                  )
              )
            }
          spids: [868]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:flavor_ref)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
                    {(SQ <'source /root/adminrc; nova flavor-list|grep m1.tiny|cut -f 2 -d"|"'>)}
                  )
              )
            }
          spids: [883]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:flavor_ref_alt)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {($ Id.VSub_DollarName '$SSH_HOST')} {($ Id.VSub_DollarName '$FIRST_HEAD')} 
                    {(SQ <'source /root/adminrc; nova flavor-list|grep m1.small|cut -f 2 -d"|"'>)}
                  )
              )
            }
          spids: [897]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:keystone_admin_pass)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<Id.KW_Data data>} {<bag>} {<show>} {<configs>} 
                            {($ Id.VSub_DollarName '$ENVIRONMENT')}
                          )
                          (C {<grep>} {<keystone-admin-password> <Id.Lit_Colon ':'>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [911]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:keystone_test_user)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<Id.KW_Data data>} {<bag>} {<show>} {<configs>} 
                            {($ Id.VSub_DollarName '$ENVIRONMENT')}
                          )
                          (C {<grep>} {<keystone-test-user> <Id.Lit_Colon ':'>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [948]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:keystone_test_user_pass)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<'../'>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<Id.KW_Data data>} {<bag>} {<show>} {<configs>} 
                            {($ Id.VSub_DollarName '$ENVIRONMENT')}
                          )
                          (C {<grep>} {<keystone-test-password> <Id.Lit_Colon ':'>})
                          (C {<sed>} {(SQ <'s/.* //'>)})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [982]
        )
      ]
    )
    (C {<export>} {<Id.Lit_VarLike 'IMAGE_ID='> ($ Id.VSub_DollarName '$ubuntu_image_id')})
    (C {<export>} {<Id.Lit_VarLike 'IMAGE_ID_ALT='> ($ Id.VSub_DollarName '$cirros_image_id')})
    (C {<printf>} {(DQ <'#### Modify tempest.conf for cluster'> <Id.Lit_BadBackslash '\\'> <n>)})
    (C {<pushd>} {(${ Id.VSub_Name TEST_DATA_DIR) <'/tempest'>})
    (command.Simple
      words: [{<python>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOPYTHON>}
              here_end_span_id: 1645
              stdin_parts: [
                <'import ConfigParser\n'>
                <'parser=ConfigParser.RawConfigParser()\n'>
                <'with open('>
                <Id.Right_DoubleQuote '"'>
                <'etc/tempest.conf.sample'>
                <Id.Right_DoubleQuote '"'>
                <',mode='>
                <Id.Right_DoubleQuote '"'>
                <r>
                <Id.Right_DoubleQuote '"'>
                <') as input_f:\n'>
                <'    parser.readfp(input_f)\n'>
                <'configDir = {\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <cli>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <enabled>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <true>
                <Id.Right_DoubleQuote '"'>
                <', '>
                <Id.Right_DoubleQuote '"'>
                <cli_dir>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'/usr/bin'>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <compute>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <allow_tenant_isolation>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <true>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <image_ref>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$IMAGE_ID')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <image_ref_alt>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$IMAGE_ID_ALT')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <flavor_ref>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$flavor_ref')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <flavor_ref_alt>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$flavor_ref_alt')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <image_ssh_user>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <ubuntu>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <image_alt_ssh_user>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <cirros>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <image_alt_ssh_password>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'cubswin:)'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <ssh_user>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <ubuntu>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <region>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$ENVIRONMENT')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <path_to_private_key>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>}))
                <'/'>
                (${ Id.VSub_Name TEST_DATA_DIR)
                <'/test_ssh_key'>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <compute-admin>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <tenant_name>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <AdminTenant>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'                   '>
                <Id.Right_DoubleQuote '"'>
                <password>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                (${ Id.VSub_Name keystone_admin_pass)
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <compute-feature-enabled>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <api_v3>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <false>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'                              '>
                <Id.Right_DoubleQuote '"'>
                <api_v3_extensions>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'                              '>
                <Id.Right_DoubleQuote '"'>
                <change_password>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <true>
                <Id.Right_DoubleQuote '"'>
                <', \n'>
                <'                              '>
                <Id.Right_DoubleQuote '"'>
                <create_image>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <true>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <dashboard>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <dashboard_url>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'https://'>
                (${ Id.VSub_Name VIP)
                <'/horizon/'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'               '>
                <Id.Right_DoubleQuote '"'>
                <login_url>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'https://'>
                (${ Id.VSub_Name VIP)
                <'/horizon/auth/login/'>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <identity>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <uri>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'https://'>
                (${ Id.VSub_Name VIP)
                <':5000/v2.0'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <disable_ssl_certificate_validation>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <true>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <region>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$ENVIRONMENT')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <username>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                (${ Id.VSub_Name keystone_test_user)
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <tenant_name>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <AdminTenant>
                <Id.Right_DoubleQuote '"'>
                <', \n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <password>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                (${ Id.VSub_Name keystone_test_user_pass)
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <admin_username>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <admin>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <admin_tenant_name>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <AdminTenant>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'              '>
                <Id.Right_DoubleQuote '"'>
                <admin_password>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                (${ Id.VSub_Name keystone_admin_pass)
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <image>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <region>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$ENVIRONMENT')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'           '>
                <Id.Right_DoubleQuote '"'>
                <http_image>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'http://'>
                (${ Id.VSub_Name BOOTSTRAP)
                <':8080/cirros-0.3.4-x86_64-disk.img'>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <input-scenario>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <image_regex>
                <Id.Right_DoubleQuote '"'>
                <': \'[['>
                <Id.Right_DoubleQuote '"'>
                <'^[Cc]irros.*'>
                <Id.Lit_Dollar '$'>
                <Id.Right_DoubleQuote '"'>
                <','>
                <Id.Right_DoubleQuote '"'>
                <'^[Uu]buntu.*'>
                <Id.Right_DoubleQuote '"'>
                <']]\',\n'>
                <'                    '>
                <Id.Right_DoubleQuote '"'>
                <flavor_regex>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'^m1.tiny'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'                    '>
                <Id.Right_DoubleQuote '"'>
                <ssh_user_regex>
                <Id.Right_DoubleQuote '"'>
                <': \'[['>
                <Id.Right_DoubleQuote '"'>
                <'^.*[Cc]irros.*'>
                <Id.Lit_Dollar '$'>
                <Id.Right_DoubleQuote '"'>
                <', '>
                <Id.Right_DoubleQuote '"'>
                <ubuntu>
                <Id.Right_DoubleQuote '"'>
                <']]\'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <network>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <region>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$ENVIRONMENT')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <tenant_network_cidr>
                <Id.Right_DoubleQuote '"'>
                <' : '>
                <Id.Right_DoubleQuote '"'>
                <'1.127.0.0/16'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'             '>
                <Id.Right_DoubleQuote '"'>
                <tenant_network_mask_bits>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <25>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <object-storage>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <region>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$ENVIRONMENT')
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <service_available>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <swift>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <false>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'                       '>
                <Id.Right_DoubleQuote '"'>
                <ceilometer>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <false>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <stress>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <nova_logdir>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'/var/log/nova'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'            '>
                <Id.Right_DoubleQuote '"'>
                <target_ssh_user>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <root>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'            '>
                <Id.Right_DoubleQuote '"'>
                <target_private_key_path>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                (${ Id.VSub_Name pwd)
                <'/hypervisor_key'>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'            '>
                <Id.Right_DoubleQuote '"'>
                <target_logfiles>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <'nova.*'>
                <Id.Lit_BadBackslash '\\'>
                <.log>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <volume>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <region>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                ($ Id.VSub_DollarName '$ENVIRONMENT')
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'            '>
                <Id.Right_DoubleQuote '"'>
                <backend1_name>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <SSD>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'            '>
                <Id.Right_DoubleQuote '"'>
                <backend2_name>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <HDD>
                <Id.Right_DoubleQuote '"'>
                <',\n'>
                <'            '>
                <Id.Right_DoubleQuote '"'>
                <storage_protocol>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <RBD>
                <Id.Right_DoubleQuote '"'>
                <'},\n'>
                <' '>
                <Id.Right_DoubleQuote '"'>
                <whitebox>
                <Id.Right_DoubleQuote '"'>
                <': {'>
                <Id.Right_DoubleQuote '"'>
                <whitebox_enabled>
                <Id.Right_DoubleQuote '"'>
                <': '>
                <Id.Right_DoubleQuote '"'>
                <false>
                <Id.Right_DoubleQuote '"'>
                <'}\n'>
                <'}\n'>
                <'for sect in configDir:\n'>
                <'    if sect not in parser.sections():\n'>
                <'        continue\n'>
                <'    for opt in configDir[sect]:\n'>
                <'        parser.set(sect, opt, configDir[sect][opt])\n'>
                <'with file('>
                <Id.Right_DoubleQuote '"'>
                <'etc/tempest.conf'>
                <Id.Right_DoubleQuote '"'>
                <', mode='>
                <Id.Right_DoubleQuote '"'>
                <w>
                <Id.Right_DoubleQuote '"'>
                <') as output_f:\n'>
                <'    parser.write(output_f)\n'>
                <'for sect in ['>
                <Id.Right_DoubleQuote '"'>
                <object-storage>
                <Id.Right_DoubleQuote '"'>
                <','>
                <Id.Right_DoubleQuote '"'>
                <boto>
                <Id.Right_DoubleQuote '"'>
                <']:\n'>
                <'    parser.remove_section(sect)\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<popd>})
    (C {<printf>} {(DQ <'#### Install pre-requsite software'> <Id.Lit_BadBackslash '\\'> <n>)})
    (C {<sudo>} {<apt-get>} {<install>} {<-y>} {<testrepository>} {<python-nova>})
    (C {<sudo>} {<-E>} {<easy_install>} {<virtualenv>} {<flake8>})
    (C {<sudo>} {<-E>} {<pip>} {<install>} {<-r>} 
      {(${ Id.VSub_Name TEST_DATA_DIR) <'/tempest/tools/pip-requires'>}
    )
    (C {<printf>} {(DQ <'#### Run Tempest'> <Id.Lit_BadBackslash '\\'> <n>)})
    (C {<export>} 
      {<Id.Lit_VarLike 'NO_PROXY='> 
        (DQ (${ Id.VSub_Name CLUSTER_NODES) (${ Id.VSub_Name BOOTSTRAP) <','> (${ Id.VSub_Name VIP) <','> 
          (${ Id.VSub_Name MANAGEMENT_GLOB) <','> (${ Id.VSub_Name FIXED_GLOB) <','> (${ Id.VSub_Name FLOATING_GLOB)
        )
      }
    )
    (C {<export>} 
      {<Id.Lit_VarLike 'no_proxy='> 
        (DQ (${ Id.VSub_Name CLUSTER_NODES) (${ Id.VSub_Name BOOTSTRAP) <','> (${ Id.VSub_Name VIP) <','> 
          (${ Id.VSub_Name MANAGEMENT_GLOB) <','> (${ Id.VSub_Name FIXED_GLOB) <','> (${ Id.VSub_Name FLOATING_GLOB)
        )
      }
    )
    (C {<pushd>} {(${ Id.VSub_Name TEST_DATA_DIR) <'/tempest'>})
    (C {<'bin/tempest'>} {<--with-xunit>} 
      {<--xunit-file> <Id.Lit_Equals '='> <'../tempest_out_'> 
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: 
            (C {<date>} 
              {<Id.Lit_Other '+'> <Id.Lit_Other '%'> <m> <Id.Lit_Other '%'> <d> <Id.Lit_Other '%'> <Y-> 
                <Id.Lit_Other '%'> <H> <Id.Lit_Other '%'> <M> <Id.Lit_Other '%'> <S>
              }
            )
        ) <.xml>
      }
    )
    (C {<popd>})
  ]
)