Ansible의 shell 모듈을 이용한 OS 패키지 리스트정보 수집
OS 별 Package 관리명령을 통한 전체 패키지 리스트 수집을 자동화 한다.
주요 기능
- 수행 후 APT_PACKAGES/IP주소/일자/pkg_result.txt 파일을 남기도록 한다.
Inventory 설정
# cat hosts
[ALL_HOSTS]
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03"
[ALL_HOSTS_OK]
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 ALL_HOSTS_OK 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
Host Variables 설정
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass: "사용자 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "!root_패스워드"
ansible_python_interpreter: python2.7
Playbook 설정
---
- name: OS PACKAGE_QUERY Action
hosts: ALL_HOSTS
vars:
time: "{{lookup('pipe','date \"+%Y-%m-%d\"')}}"
tasks:
- name: Local Directory Create
local_action: command mkdir -p PACKAGES/{{ managed_ip }}/{{ time }}
- name: Get packages
shell: dpkg-query -f '${binary:Package}\n' -W
register: packages
when: ansible_os_family == "Debian"
- name: Get packages
shell: rpm -qa
register: packages
when: ansible_distribution == "CentOS"
- name: Print packages
debug:
msg: "{{ packages.stdout_lines }}"
- name: System User Password Modify Result
local_action: copy content={{ packages.stdout }} dest=PACKAGES/{{ managed_ip }}/{{ time }}/pkg_result.txt
OS Package Manager
에 대한 Playbook 분석
- Inventory에 지정된 호스트가 만약 Debian 계열이라면 dpkg-query -f '${binary:Package}\n' -W 명령을 수행한다.
- Inventory에 지정된 호스트가 만약 RedHat 계열이라면 rpm -qa 명령을 수행한다.
- 수행 Sheel 상에서 결과를 출력하고, 증적은 APT_PACKAGES/ 디렉토리에 기록한다.
playbook 실행
# ansible-playbook -i hosts apt_query.yml
수행 결과
- Debian 계열
# cat PACKAGES/172.16.0.100/2020-12-03/pkg_result.txt
acl
adduser
apt
apt-listchanges
apt-utils
aspell
aspell-en
autoconf
automake
autopoint
autotools-dev
base-files
base-passwd
bash
bash-completion
bc
bind9-host
binutils
bsdmainutils
bsdutils
...중략
- RedHat 계열
# cat PACKAGES/172.16.0.100/2021-12-03/pkg_result.txt
abrt-addon-xorg-2.1.11-52.el7.centos.x86_64
less-458-9.el7.x86_64
webkitgtk4-jsc-2.20.5-1.el7.x86_64
sound-theme-freedesktop-0.8-3.el7.noarch
hunspell-ko-0.5.5-5.el7.noarch
gnu-free-fonts-common-20120503-8.el7.noarch
xorg-x11-server-Xorg-1.20.1-3.el7.x86_64
python-IPy-0.75-6.el7.noarch
libreport-gtk-2.1.11-42.el7.centos.x86_64
libss-1.42.9-13.el7.x86_64
compat-libtiff3-3.9.4-11.el7.x86_64
mobile-broadband-provider-info-1.20170310-1.el7.noarch
xorg-x11-drv-synaptics-1.9.0-2.el7.x86_64
nss-tools-3.36.0-7.el7_5.x86_64
gtksourceview3-3.24.8-1.el7.x86_64
libproxy-0.4.11-11.el7.x86_64
ed-1.9-4.el7.x86_64
khmeros-fonts-common-5.0-17.el7.noa