(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-e>})
    (C {<.>} {<../proxy_setup.sh>})
    (C {<printf>} {(DQ <'#### Setup Environment'> <Id.Lit_Other '\\'> <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 op_id: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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (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 '$('>
                command_list: 
                  (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 '$('>
                                command_list: (command.CommandList children:[(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 '$('>
                command_list: 
                  (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 '$('>
                                command_list: (command.CommandList children:[(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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [{<sed>} {<-e>} {(SQ <'s/[^0-9. ]//g'>)} {<-e>} {(SQ <'s/ /,/g'>)}]
                        redirects: [
                          (redir.Redir
                            op: <Id.Redir_TLess '<<<'>
                            fd: -1
                            arg_word: 
                              {
                                (command_sub
                                  left_token: <Id.Left_DollarParen '$('>
                                  command_list: 
                                    (command.CommandList
                                      children: [
                                        (C {<cut>} {<-f>} {<3>} {<-d> (SQ <' '>)} {<../cluster.txt>})
                                      ]
                                    )
                                )
                              }
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          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.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>})
            (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
          ]
        )
        (C {<printf>} 
          {(DQ <'Pinging first headnode: '> (${ Id.VSub_Name FIRST_HEAD) <Id.Lit_Other '\\'> <n>)}
        )
        (command.Subshell
          command_list: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [
                        {<printf>}
                        {
                          (DQ <'Failed to ping first head node '> (${ Id.VSub_Name FIRST_HEAD) 
                            <Id.Lit_Other '\\'> <n>
                          )
                        }
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/stderr>})]
                    )
                  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.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>})
            (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
          ]
        )
        (C {<printf>} {(DQ <'Pinging VIP: '> (${ Id.VSub_Name VIP) <Id.Lit_Other '\\'> <n>)})
        (command.Subshell
          command_list: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [
                        {<printf>}
                        {(DQ <'Failed to ping VIP '> (${ Id.VSub_Name VIP) <Id.Lit_Other '\\'> <n>)}
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/stderr>})]
                    )
                  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.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>})
            (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
          ]
        )
        (C {<printf>} {(DQ <'Pinging bootstrap: '> (${ Id.VSub_Name BOOTSTRAP) <Id.Lit_Other '\\'> <n>)})
        (command.Subshell
          command_list: 
            (command.CommandList
              children: [
                (command.Sentence
                  child: 
                    (command.Simple
                      words: [
                        {<printf>}
                        {
                          (DQ <'Failed to ping bootstrap server '> (${ Id.VSub_Name BOOTSTRAP) 
                            <Id.Lit_Other '\\'> <n>
                          )
                        }
                      ]
                      redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/stderr>})]
                    )
                  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 '$('>
                command_list: 
                  (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 '$('>
                                command_list: (command.CommandList children:[(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 '$('>
                command_list: 
                  (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 '$('>
                                command_list: (command.CommandList children:[(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 '$('>
                command_list: 
                  (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 '$('>
                                command_list: (command.CommandList children:[(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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [
                          {<sed>}
                          {<-e>}
                          {(SQ <'s#/.*##'>)}
                          {<-e>}
                          {(SQ <'s/\\(\\.0\\)*.[0-9]\\{1,3\\}$/.*/'>)}
                        ]
                        redirects: [
                          (redir.Redir
                            op: <Id.Redir_TLess '<<<'>
                            fd: -1
                            arg_word: {($ Id.VSub_DollarName '$MANAGEMENT_CIDR')}
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [495]
        )
      ]
    )
    (C {<printf>} {(DQ <'Management glob: '> (${ Id.VSub_Name MANAGEMENT_GLOB) <Id.Lit_Other '\\'> <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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [
                          {<sed>}
                          {<-e>}
                          {(SQ <'s#/.*##'>)}
                          {<-e>}
                          {(SQ <'s/\\(\\.0\\)*.[0-9]\\{1,3\\}$/.*/'>)}
                        ]
                        redirects: [
                          (redir.Redir
                            op: <Id.Redir_TLess '<<<'>
                            fd: -1
                            arg_word: {($ Id.VSub_DollarName '$FIXED_CIDR')}
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [527]
        )
      ]
    )
    (C {<printf>} {(DQ <'Fixed glob: '> (${ Id.VSub_Name FIXED_GLOB) <Id.Lit_Other '\\'> <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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [
                          {<sed>}
                          {<-e>}
                          {(SQ <'s#/.*##'>)}
                          {<-e>}
                          {(SQ <'s/\\(\\.0\\)*.[0-9]\\{1,3\\}$/.*/'>)}
                        ]
                        redirects: [
                          (redir.Redir
                            op: <Id.Redir_TLess '<<<'>
                            fd: -1
                            arg_word: {($ Id.VSub_DollarName '$FLOATING_CIDR')}
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [559]
        )
      ]
    )
    (C {<printf>} {(DQ <'Floating glob: '> (${ Id.VSub_Name FLOATING_GLOB) <Id.Lit_Other '\\'> <n>)})
    (C {<printf>} {(DQ <'#### Setup Directories'> <Id.Lit_Other '\\'> <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_Other ':'> <//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 '$('>
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.Sentence
                          child: (C {<cd>} {<..>})
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Pipeline
                          children: [
                            (C {<knife>} {<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: [
            (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_Other ':'> 
                <//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_Other '@'> (${ Id.VSub_Name FIRST_HEAD) <Id.Lit_Other ':'> <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.Redir
              op: <Id.Redir_Great '>'>
              fd: -1
              arg_word: {(${ Id.VSub_Name TEST_DATA_DIR) </hypervisor_key>}
            )
          ]
        )
      ]
      negated: F
    )
    (C {<printf>} {(DQ <Id.Lit_Other '\\'> <n>)})
    (C {<printf>} {(DQ <'#### Gather Tempest.CONF configurations'> <Id.Lit_Other '\\'> <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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<../>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<data>} {<bag>} {<show>} {<configs>} 
                            {($ Id.VSub_DollarName '$ENVIRONMENT')}
                          )
                          (C {<grep>} {<keystone-admin-password> <Id.Lit_Other ':'>})
                          (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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<../>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<data>} {<bag>} {<show>} {<configs>} 
                            {($ Id.VSub_DollarName '$ENVIRONMENT')}
                          )
                          (C {<grep>} {<keystone-test-user> <Id.Lit_Other ':'>})
                          (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 '$('>
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: (C {<cd>} {<../>})
                        terminator: <Id.Op_Semi _>
                      )
                      (command.Pipeline
                        children: [
                          (C {<knife>} {<data>} {<bag>} {<show>} {<configs>} 
                            {($ Id.VSub_DollarName '$ENVIRONMENT')}
                          )
                          (C {<grep>} {<keystone-test-password> <Id.Lit_Other ':'>})
                          (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_Other '\\'> <n>)})
    (C {<pushd>} {(${ Id.VSub_Name TEST_DATA_DIR) </tempest>})
    (command.Simple
      words: [{<python>}]
      redirects: [
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          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 '$('>
              command_list: (command.CommandList children:[(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_Other '$'>
            <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_Other '$'>
            <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_Other '\\'>
            <.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'>
          ]
        )
      ]
    )
    (C {<popd>})
    (C {<printf>} {(DQ <'#### Install pre-requsite software'> <Id.Lit_Other '\\'> <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_Other '\\'> <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 '$('>
          command_list: 
            (command.CommandList
              children: [
                (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>})
  ]
)