728x90
☑️ 개요
앤서블을 사용할 때 사용자의 환경 변수를 가져가야 할 때, 그리고 변수들이 하드코딩 되어있는 경우가 있다.
☑️ 예시
1. 환경 변수들이 하드 코딩된 프로세스인 경우
쉘 스크립트 안에 변수의 값이 하드 코딩되어 들어간 경우다.
[admjwjung@test2 bin]$ cat myprocess.sh
#!/bin/bash
readonly PROC_NAME="myprocess"
readonly JAR="myprocess.jar"
readonly EXE_OPT=""
readonly JAVA="/usr/java1.8/bin/java"
---
# 환경 변수들이 하드 코딩 된 프로세스의 경우,
- name: myprocess
become: yes
become_user: myansibleid
ansible.builtin.shell: cd /appstore/mydir/myprocess/bin && ./myprocess.sh start
args:
executable: /bin/bash
2. 사용자 계정의 환경 변수가 필요한 경우
일반적으로 사용자의 환경 변수를 가져오거나, 특정 쉘이 다른 쉘스크립트를 실행하는 경우가 있다. 이때 ansible 계정의 환경 변수가 유지된다. 그렇기 때문에 앤서블에서 become_user에 대한 환경변수를 로드하기 위해서는 아래와 같이 해야 한다.
# 사용자 계정의 환경 변수가 필요한 경우
- name: myprocess
become: yes
become_user: myansibleid
ansible.builtin.shell: |
source ~/.bash_profile && cd /appstore/mydir/myprocess/bin && ./myprocess.sh
# source ~/.bashrc && cd /appstore/mydir/myprocess/bin && ./myprocess.sh
args:
executable: /bin/bashd
☑️ 이유
앤서블은 기본적으로 로그인한 유저의 환경변수를 가져간다. 이유는 become의 메커니즘에 있다. 사용자 ID만 전환이 되는 것이지 사용자를 변경하는 것이 아니다.
- SCM(ansible) → TEST2(ansible) → become(myansibleid)
- myansibleid 계정으로 실행되더라도 환경변수는 ansible 계정의 것을 유지한다.
728x90
'Ansible' 카테고리의 다른 글
[Ansible] Facts 변수 초기화 타이밍 이슈 & Ansible Facts 수집 타이밍 문제 (0) | 2025.01.17 |
---|