Ansible 상용 모듈 소개 및 사용 (week 5 day1 part 2) - 기술 흐름 ken
Ansible 모듈
지난 블 로그 'Ansible 기초 인식 및 설치 사용 에 대한 상세 한 설명 (1) - 기술 흐름 ken' 과 ansible 모듈 을 간단하게 소개 했다.ansible 은 모듈 작업 을 바탕 으로 하기 때문에 우 리 는 일상적인 업무 에 여 유 롭 게 대처 할 수 있 도록 몇 가지 자주 사용 하 는 모듈 을 파악 해 야 한다.
지난 블 로 그 를 본 후에 도 ansible - doc - s 모듈 이름 을 사용 할 수 있다 는 것 을 알 고 있 을 것 입 니 다. 모듈 의 사용 도움 을 받 을 수 있 고 이 블 로그 에서 더 이상 군말 하지 않 을 것 입 니 다.
Ansible 상용 모듈 소개
ansible 상용 모듈 은 주로 다음 과 같은 12 개가 있 습 니 다.
ping 模块: 尝试连接主机,如果测试成功会返回‘pong’
command模块: 在远程节点执行命令
yum模块: 使用yum软件包管理工具管理软件包
shell模块: 和command模块类似,执行命令,支持变量等符号
cron模块 : 管理定时任务
service模块: 管理程序服务
file模块: 设置文件属性
copy模块: 复制本地文件到远程主机
script模块: 传送本地的一个脚本并在远程主机上执行
setup模块: 获取远程主机的参数信息
user模块: 管理用户账户
group模块: 添加或者删除用户组
Ansible 상용 모듈 사용 상세 설명
다음은 각 모듈 의 사용 에 대해 일일이 보 여 드 리 겠 습 니 다.
(1) command 모듈
command 모듈 은 원 격 호스트 에서 명령 을 수행 합 니 다.기본적으로 이 모듈 을 사용 하기 때문에 생략 할 수 있 습 니 다.
예: 원 격 호스트 의 ip 정보 가 져 오기
[root@ken ~]# ansible all -m command -a "ip a"
10.220.5.138 | SUCCESS | rc=0 >>
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 00:0c:29:a9:90:16 brd ff:ff:ff:ff:ff:ff
inet 10.220.5.138/24 brd 10.220.5.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea9:9016/64 scope link
valid_lft forever preferred_lft forever
10.220.5.139 | SUCCESS | rc=0 >>
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
link/ether 00:0c:29:65:31:ad brd ff:ff:ff:ff:ff:ff
inet 10.220.5.139/24 brd 10.220.5.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe65:31ad/64 scope link
valid_lft forever preferred_lft forever
(2) cron 모듈
cron 모듈 은 정시 관리 작업 입 니 다.
예: 원 격 노드 에서 5 분 간격 으로/tmp/ken. txt 입력 111
[root@ken ~]# ansible all -m cron -a "minute=*/5 job='echo 111>/tmp/ken.txt' state=present"
10.220.5.139 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"None",
"None"
]
}
10.220.5.138 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"None",
"None"
]
}
설정 에 성 공 했 는 지 확인 할 수 있 습 니 다.설치 가 완료 되 었 음 을 볼 수 있 습 니 다.
[root@ken ~]# ansible all -a "crontab -l"
10.220.5.138 | SUCCESS | rc=0 >>
#Ansible: None
*/5 * * * * echo 111>/tmp/ken.txt
10.220.5.139 | SUCCESS | rc=0 >>
#Ansible: None
*/5 * * * * echo 111>/tmp/ken.txt
계획 작업 제거
[root@ken ~]# ansible all -a "crontab -r"
10.220.5.138 | SUCCESS | rc=0 >>
10.220.5.139 | SUCCESS | rc=0 >>
[root@ken ~]# ansible all -a "crontab -l"
10.220.5.139 | FAILED | rc=1 >>
no crontab for rootnon-zero return code
10.220.5.138 | FAILED | rc=1 >>
no crontab for rootnon-zero return code
(3) copy 모듈
copy 모듈 은 이 컴퓨터 파일 을 원 격 노드 위로 복사 합 니 다.
예: 이 컴퓨터/tmp/ken. sh 를 원 격 노드 의/tmp 아래로 복사 합 니 다.
[root@ken ~]# ansible all -m copy -a "src=/tmp/ken.sh dest=/tmp"
10.220.5.138 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/ken.sh",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1542373625.27-167828199145082/source",
"state": "file",
"uid": 0
}
10.220.5.139 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/ken.sh",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1542373625.3-279713897725048/source",
"state": "file",
"uid": 0
}
진짜 전송 되 었 는 지 확인 하 세 요.원 격 호스트 의/tmp 디 렉 터 리 아래 에 방금 전송 한 파일 이 있 습 니 다.
[root@ken ~]# ansible all -m shell -a "ls /tmp | grep ken.sh"
10.220.5.138 | SUCCESS | rc=0 >>
ken.sh
10.220.5.139 | SUCCESS | rc=0 >>
ken.sh
(4) yum 모듈
yum 모듈 은 원 격 설치 패 키 지 를 관리 하 는 데 사 용 됩 니 다.
예: 원 격 노드 에서 httpd 서 비 스 를 다운로드 합 니 다.
[root@ken ~]# ansible all -m yum -a "name=httpd state=present"
10.220.5.138 | SUCCESS => {
"changed": true,
"msg": "file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - \"Couldn't open file /mnt/repodata/repomd.xml\"
Trying other mirror.
",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-80.el7.centos.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.6-80.el7.centos.1 updates 2.7 M
Transaction Summary
================================================================================
Install 1 Package
Total download size: 2.7 M
Installed size: 9.4 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-2.4.6-80.el7.centos.1.x86_64 1/1
Verifying : httpd-2.4.6-80.el7.centos.1.x86_64 1/1
Installed:
httpd.x86_64 0:2.4.6-80.el7.centos.1
Complete!
"
]
}
10.220.5.139 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-80.el7.centos.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.6-80.el7.centos.1 updates 2.7 M
Transaction Summary
================================================================================
Install 1 Package
Total download size: 2.7 M
Installed size: 9.4 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-2.4.6-80.el7.centos.1.x86_64 1/1
Verifying : httpd-2.4.6-80.el7.centos.1.x86_64 1/1
Installed:
httpd.x86_64 0:2.4.6-80.el7.centos.1
Complete!
"
]
}
설치 완료 여부 확인
[root@ken ~]# ansible all -m yum -a "list=httpd"
10.220.5.138 | SUCCESS => {
"changed": false,
"results": [
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos.1",
"repo": "installed",
"version": "2.4.6",
"yumstate": "installed"
},
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos.1",
"repo": "updates",
"version": "2.4.6",
"yumstate": "available"
},
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos",
"repo": "centos7",
"version": "2.4.6",
"yumstate": "available"
},
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos",
"repo": "ken",
"version": "2.4.6",
"yumstate": "available"
}
]
}
10.220.5.139 | SUCCESS => {
"changed": false,
"results": [
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos.1",
"repo": "installed",
"version": "2.4.6",
"yumstate": "installed"
},
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.1.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos.1",
"repo": "updates",
"version": "2.4.6",
"yumstate": "available"
},
{
"arch": "x86_64",
"envra": "0:httpd-2.4.6-80.el7.centos.x86_64",
"epoch": "0",
"name": "httpd",
"release": "80.el7.centos",
"repo": "centos7",
"version": "2.4.6",
"yumstate": "available"
}
]
}
(5) 서비스 모듈
서비스 모듈 은 서비스 프로그램 을 관리 하 는 데 쓰 인 다
예: 원 격 노드 의 httpd 서 비 스 를 시작 합 니 다.
[root@ken ~]# ansible all -m service -a "name=httpd state=restarted"
10.220.5.138 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
"status": {
"ActiveEnterTimestampMonotonic": "0",
"ActiveExitTimestampMonotonic": "0",
"ActiveState": "inactive",
"After": "nss-lookup.target systemd-journald.socket network.target tmp.mount system.slice remote-fs.target -.mount basic.target",
"AllowIsolate": "no",
"AmbientCapabilities": "0",
"AssertResult": "no",
"AssertTimestampMonotonic": "0",
"Before": "shutdown.target",
"BlockIOAccounting": "no",
....
출력 정보 가 매우 길 어서 나 는 생략 했다.시작 되 었 는 지 확인 합 니 다
[root@ken ~]# ansible all -m shell -a "ss -tnl | grep 80"
10.220.5.139 | SUCCESS | rc=0 >>
LISTEN 0 128 :::80 :::*
10.220.5.138 | SUCCESS | rc=0 >>
LISTEN 0 128 :::80 :::*
(6) file 모듈
file 모듈 은 파일 속성 을 설정 하 는 데 사 용 됩 니 다.
예: 원 격 노드 의/tmp 아래 test. txt 파일 을 만 듭 니 다.
[root@ken ~]# ansible all -m file -a "state=touch path=/tmp/test.txt"
10.220.5.139 | SUCCESS => {
"changed": true,
"dest": "/tmp/test.txt",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
10.220.5.138 | SUCCESS => {
"changed": true,
"dest": "/tmp/test.txt",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
파일 이 생 성 되 었 는 지 확인 하기
[root@ken ~]# ansible all -m shell -a "ls /tmp | grep test.txt"
10.220.5.138 | SUCCESS | rc=0 >>
test.txt
10.220.5.139 | SUCCESS | rc=0 >>
test.txt
(7) 셸 모듈
셸 모듈 과 command 모듈 은 원 격 실행 명령 과 유사 합 니 다.
하지만 command 보다 더 강하 다.
예 를 들 어 원 격 노드/tmp 디 렉 터 리 에 파일 이 얼마나 있 는 지 통계 합 니 다.
일단 command 를 사용 해서 효 과 를 볼 게 요.
[root@ken ~]# ansible all -a "ls /tmp | wc -l"
10.220.5.139 | FAILED | rc=2 >>
/tmp:
total 4
drwx------ 2 root root 65 Nov 17 05:25 ansible_aIMVHi
-rw-r--r-- 1 root root 0 Nov 17 05:07 ken.sh
-rw-r--r-- 1 root root 0 Nov 17 05:00 ken.txt
drwx------ 3 root root 17 Nov 7 16:04 systemd-private-2e376cd91398450f85a81bc060207ef8-chronyd.service-TxdhUO
drwx------ 3 root root 17 Nov 7 16:05 systemd-private-2e376cd91398450f85a81bc060207ef8-httpd.service-k8IZOZ
drwx------ 3 root root 17 Nov 15 15:58 systemd-private-5c9f32d6cff64520b10075e086d943ab-chronyd.service-iAH3c0
drwx------ 3 root root 17 Nov 15 15:58 systemd-private-5c9f32d6cff64520b10075e086d943ab-httpd.service-dsAqeg
drwx------ 3 root root 17 Nov 14 15:56 systemd-private-65ded84926e64a90b0a201a805f752ca-chronyd.service-eSj3iR
drwx------ 3 root root 17 Nov 16 16:00 systemd-private-6706ba5361284cd4a0c91f3c8b68c606-chronyd.service-sLgAei
drwx------ 3 root root 17 Nov 17 05:17 systemd-private-6706ba5361284cd4a0c91f3c8b68c606-httpd.service-u6vla7
-rw-r--r-- 1 root root 0 Nov 17 05:22 test.txt
drwx------ 2 root root 6 Nov 15 15:58 vmware-root
-rw------- 1 root root 467 Nov 15 16:02 yum_save_tx.2018-11-15.16-02.KHC9kd.yumtxls: cannot access |: No such file or directory
ls: cannot access wc: No such file or directorynon-zero return code
10.220.5.138 | FAILED | rc=2 >>
/tmp:
total 0
drwx------ 2 root root 65 Nov 16 21:25 ansible_v4MF1q
drwxr-xr-x 2 root root 19 Nov 7 09:35 hsperfdata_root
drwxr-xr-x 2 zabbix zabbix 19 Nov 7 08:48 hsperfdata_zabbix
...
명령 실행 실 패 를 볼 수 있 습 니 다.
이제 셸 을 사용 해서 같은 동작 을 하고 효 과 를 보 겠 습 니 다.
이번에 저희 가 필요 로 하 는 정 보 를 얻 었 습 니 다.
[root@ken ~]# ansible all -m shell -a "ls /tmp | wc -l"
10.220.5.138 | SUCCESS | rc=0 >>
13
10.220.5.139 | SUCCESS | rc=0 >>
13
(8) ping 모듈
ping 모듈 은 원 격 호스트 를 탐지 할 수 있 습 니 다.
매개 변수 정 보 를 추가 하지 않 아 도 됩 니 다.
획득 성공 하면 pong 으로 돌아 갑 니 다
[root@ken ~]# ansible all -m ping
10.220.5.139 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.220.5.138 | SUCCESS => {
"changed": false,
"ping": "pong"
}
그 다음 에 네 개의 상용 모듈 이 있 습 니 다. 제 가 컴퓨터 를 바 꾸 었 기 때문에 IP 주 소 는 더 이상 위의 것 이 아 닙 니 다.
(9) setup 모듈
setup 모듈 은 노드 의 매개 변수 정 보 를 가 져 오 는 데 사 용 됩 니 다.
얻 은 정 보 는 상세 하 니 관심 이 있다 면 연구 해 보 세 요.
[root@ken ~]# ansible all -m setup
192.168.43.176 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.11.5",
"192.168.43.176"
],
"ansible_all_ipv6_addresses": [
"fe80::20c:29ff:fea5:e9ae",
"2408:84f4:83:54f1:20c:29ff:fea5:e9a4",
"fe80::20c:29ff:fea5:e9a4"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "07/02/2015",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
"BOOT_IMAGE": "/vmlinuz-3.10.0-862.el7.x86_64",
"biosdevname": "0",
"crashkernel": "auto",
"net.ifnames": "0",
"quiet": true,
"rd.lvm.lv": "centos/swap",
"rhgb": true,
"ro": true,
"root": "/dev/mapper/centos-root"
},
"ansible_date_time": {
"date": "2018-11-16",
"day": "16",
"epoch": "1542378922",
"hour": "22",
"iso8601": "2018-11-16T14:35:22Z",
"iso8601_basic": "20181116T223522739565",
"iso8601_basic_short": "20181116T223522",
"iso8601_micro": "2018-11-16T14:35:22.739656Z",
"minute": "35",
"month": "11",
"second": "22",
"time": "22:35:22",
"tz": "CST",
"tz_offset": "+0800",
"weekday": "Friday",
"weekday_number": "5",
"weeknumber": "46",
"year": "2018"
},
...
(10) script 모듈
로 컬 스 크 립 트 를 원 격 호스트 로 전송 하고 실행 하 는 역할 을 합 니 다.
여분의 파 라 메 터 를 추가 할 필요 가 없습니다. - a 뒤에 로 컬 스 크 립 트 경 로 를 추가 하면 됩 니 다.
[root@ken ~]# ansible all -m script -a /tmp/test.sh
192.168.43.175 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.43.175 closed.\r
",
"stderr_lines": [
"Shared connection to 192.168.43.175 closed."
],
"stdout": "server\r
",
"stdout_lines": [
"server"
]
}
192.168.43.176 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.43.176 closed.\r
",
"stderr_lines": [
"Shared connection to 192.168.43.176 closed."
],
"stdout": "agent\r
",
"stdout_lines": [
"agent"
]
}
(11) user 모듈
user 모듈 은 useradd, userdel, usermod 세 가지 명령 을 요청 합 니 다.
다음 명령 의 의 미 는 ken 사용 자 를 만 드 는 것 입 니 다. 셸 형식 은/sbin/nologin 이 고 uid 번 호 는 454 이 며 시스템 사용자 입 니 다.
[root@ken ~]# ansible all -m user -a "name=ken shell=/sbin/nologin uid=454 state=present"
192.168.43.176 | FAILED! => {
"changed": false,
"msg": "useradd: UID 454 is not unique
",
"name": "ken",
"rc": 4
}
192.168.43.175 | CHANGED => {
"changed": true,
"comment": "",
"create_home": true,
"group": 100,
"home": "/home/ken",
"name": "ken",
"shell": "/sbin/nologin",
"state": "present",
"system": false,
"uid": 454
}
위의 실행 결 과 를 보면 192.168.43.176 의 실행 이 실 패 했 습 니 다. 알림 에 따라 uid 454 의 사용자 가 이미 존재 할 수 있 음 을 알 수 있 습 니 다. 실제 존재 여 부 를 살 펴 보 겠 습 니 다.
명령 반환 결과 uid 454 를 nginx 사용자 로 표시 합 니 다.
[root@ken ~]# ansible 192.168.43.176 -a "grep 454 /etc/passwd"
192.168.43.176 | CHANGED | rc=0 >>
nginx:x:454:454:Nginx web server:/var/lib/nginx:/sbin/nologin
192.168.43.175 집행 에 성공 한
[root@ken ~]# ansible 192.168.43.175 -a "tail -1 /etc/passwd"
192.168.43.175 | CHANGED | rc=0 >>
ken:x:454:100::/home/ken:/sbin/nologin
(12) group 모듈
goup 모듈 은 groupad, groupdel, groupmod 세 가지 명령 을 요청 합 니 다.
다음 명령 의 의 미 는 test 1 이라는 그룹 을 만 드 는 것 입 니 다. gid 는 1122 이 며 원 격 호스트 에서 사용 할 수 있 습 니 다.
[root@ken ~]# ansible all -m group -a "name=test1 gid=1122 state=present"
192.168.43.176 | CHANGED => {
"changed": true,
"gid": 1122,
"name": "test1",
"state": "present",
"system": false
}
192.168.43.175 | CHANGED => {
"changed": true,
"gid": 1122,
"name": "test1",
"state": "present",
"system": false
}
다음으로 전송:https://www.cnblogs.com/kenken2018/p/9971371.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.