2017-09-15 22 views
1

使用ansible即時試圖 1.須藤到用戶ID - hduser 2.集合一些ENV變量 3.源文件。改變用戶和設置環境變量

後來,我打印ENV變量,但沒有看到ENV變量被設置爲用戶hduser

- name: change to hduser 
    shell: sudo su - hduser 

- name: Setting 
    lineinfile: 
    dest: /home/hduser/.bashrc 
    line: 'export HADOOP_HOME=/usr/local/hadoop' 
    insertafter: 'EOF' 
    regexp: 'export HADOOP_HOME=/usr/local/hadoop' 
    state: present 

- name: Adding the path in the bashrc files 
    lineinfile: 
    dest: /home/hduser/.bashrc 
    line: 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' 
    insertafter: 'EOF' 
    regexp: 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' 
    state: present 

- name: Adding the path in the bashrc files 
    lineinfile: 
    dest: /home/hduser/.bashrc 
    line: 'export PATH=$PATH:$HADOOP_HOME/bin' 
    insertafter: 'EOF' 
    regexp: 'export PATH=\$PATH:$HADOOP_HOME/bin' 
    state: present 

- name: Source the bashrc file 
    shell: source /home/hduser/.bashrc 
    register: sourcevar 
    args: 
    executable: /bin/bash 

- debug: 
    var: sourcevar 
- name: print env variables 
    shell: sudo su hduser && env 
    register: envvar 
    args: 
    executable: /bin/bash 

- debug: 
    var: envvar 

這些都是我的ENV變量,它沒有列出我的來源的。

ok: [default] => { 
    "envvar": { 
     "changed": true, 
     "cmd": "sudo su hduser && env", 
     "delta": "0:00:00.013310", 
     "end": "2017-09-15 17:37:01.913357", 
     "rc": 0, 
     "start": "2017-09-15 17:37:01.900047", 
     "stderr": "", 
     "stderr_lines": [], 
     "stdout": "TERM=xterm-256color\nSHELL=/bin/bash\nUSER=root\nSUDO_USER=vagrant\nSUDO_UID=1000\nUSERNAME=root\nMAIL=/var/mail/root\nPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nPWD=/home/vagrant\nLANG=en_US.UTF-8\nSHLVL=1\nHOME=/root\nSUDO_COMMAND=/bin/sh -c echo BECOME-SUCCESS-nzuyqifbpqxknsapqpiflhxbmsrzdaqo; /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1505497021.78-205792997462616/command.py; rm -rf \"/home/vagrant/.ansible/tmp/ansible-tmp-1505497021.78-205792997462616/\" > /dev/null 2>&1\nLOGNAME=root\nSUDO_GID=1000\n_=/usr/bin/env", 
     "stdout_lines": [ 
      "TERM=xterm-256color", 
      "SHELL=/bin/bash", 
      "USER=root", 
      "SUDO_USER=vagrant", 
      "SUDO_UID=1000", 
      "USERNAME=root", 
      "MAIL=/var/mail/root", 
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 
      "PWD=/home/vagrant", 
      "LANG=en_US.UTF-8", 
      "SHLVL=1", 
      "HOME=/root", 
      "SUDO_COMMAND=/bin/sh -c echo BECOME-SUCCESS-nzuyqifbpqxknsapqpiflhxbmsrzdaqo; /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1505497021.78-205792997462616/command.py; rm -rf \"/home/vagrant/.ansible/tmp/ansible-tmp-1505497021.78-205792997462616/\" > /dev/null 2>&1", 
      "LOGNAME=root", 
      "SUDO_GID=1000", 
      "_=/usr/bin/env" 
     ], 
     "warnings": [ 
      "Consider using 'become', 'become_method', and 'become_user' rather than running sudo" 
     ] 
    } 
} 

回答

0

Ansible中的每個任務都是分開處理的。

這樣,這是兩個獨立的任務:

- name: Source the bashrc file 
    shell: source /home/hduser/.bashrc 
    register: sourcevar 
    args: 
    executable: /bin/bash 

- name: print env variables 
    shell: sudo su hduser && env 
    register: envvar 

而第二個任務一無所知的第一個。

您應該source並在單次運行執行命令:

- shell: source /home/hduser/.bashrc; env 
    args: 
    executable: /bin/bash 
+0

的ENV變量是stiill正在打印。 – user1050619