2017년 11월 19일 일요일

[Ansible] Template의 용도는? (1/2)

- 0 개의 댓글


앤서블을 하다 보면 Template은 처음에 상당히 생소한 개념이더라고요.
사실 알고보면 정말 별거 없는데....

가장 쉽게 설명하자면 파워포인트 템플릿이 있을 것입니다.
아래의 예제는 파워포인트에 내장되어 있는 비지니스 템플릿인데요
작성에 도움을 주기 위해 미리 지정되어 있는 걸 말하죠.

(출처 : http://meaningone.tistory.com/602)

이거랑 거의 1:1로 매칭 되는 개념이 앤서블의 Template입니다. 
즉 작성을 도움을 주기 위해 미리 지정되어 있는 서식 파일 같은 것입니다. 

사실 가장 template이 많이 쓰이는건..cfg 즉, 구성파일/환경 설정 파일을 가장 많이 사용합니다. 추후에 다루게 될텐데, 롤베이스로 해서 여러사람들이 사용하려면 각각에 사용환경에 맞게 구성 파일이 설정되어야 하는 경우가 있는데, 이때 여러가지의 환경 정보를 읽고 그에 맞게 cfg를 설정해서 적용할때 가장 많이 사용됩니다. 

그런데 이런건....배포하는 앤서블 패키지의 완성도를 높이려고 하는거고...
이를 위한 실습이나, 당장 사용에 목적에 부합하는 걸 찾아봐야 겠죠?

그래서 준비한 것은!!!

사골처럼 계속 우려먹는 nginx 입니다~
알다피시 nginx는 안되는 운영체제가 거의 없는 솔루션이다 보니..
설치 이후에 체크하는 방법도 운영체제에 따라 다르게 되죠. 

근데...저만 그런가..매번 헷깔리더라고요 -_-;

(이러지 맙시다, 우리는 운명공동체 / 동지동지!!)

그래서 맨 마지막에 각각 설치된 운영체제는 어떤건데, 이렇게 체크하는거야 라고 자동으로 알려주면 좋겠죠?

그런 목적으로 작성된 코드입니다~!

[ nginx_msg.yml ]

1
2
3
4
5
6
---
- hosts: nodes

  tasks:
    - name: How to check the status of nginx for each of OS.
      debug: msg="{{lookup('template','msg.j2').split('\n')}}"


[ msg.j2 ]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{% if ansible_distribution == 'Ubuntu' %}
   [ OS : Ubuntu ]
    >> dpkg -l | grep nginx
    OR
    >> service nginx status
{% elif ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' %}
   [ OS : CentOS ver7 ]
    >> yum list installed | grep nginx
    OR
    >> systemctl status nginx
{% elif ansible_distribution == 'CentOS' and ansible_distribution_major_version < '7' %}
   [ OS : CentOS ver6 ]
    >> yum list installed | grep nginx
    OR
    >> service nginx status
{% else %}
    >> service nginx status (* Gernally)
{% endif %}

참 특이한 점은 template은 jinja2라는 파이썬(주로 장고와 플라스크)에서 템플릿에서 사용하는 것을 차용해서 씁니다.
그래서 왠지 또 다른 언어를 배우는 느낌으로 짜야 되는...단점이 있긴 한데 말이죠..일단 많은 기능을 사용하지 않고, 스크립트 짜듯 짜도 되니 크게 신경 안 쓰셔도 될 것 같습니당!

결과는 어떻게 나오는지 확인하고 마쳐 볼까요~!



OS를 자동인식하고 조건에 맞게 출력해 주는 예제이며.. 상황에 따라 해당 template을 재 활용할 수 있고, 좀 더 조건을 세밀하게 조정한다면 더 다양한 상황에 맞게 동작하게 작성할 수 있겠네요.

template이 한번에 와 닫지 않을수 있으니, 다른 예제를 다음 시간에 한번 더 해볼께요.
빠잉!
[Continue reading...]

2017년 11월 18일 토요일

[Ansible] 동적으로 변수를 넣어 보아요~!

- 0 개의 댓글


저번 글([Ansible] 조건별로 nginx를 "한방에" 설치하기)에서는

fact에서 생성한 인자를 받아서, 그걸 다시 when이라는 조건을 걸어서 우분투나 센트OS를 설치했었죠~!!!

음...근데 솔직히 아름답지 않죠 무슨 뜻이냐면...세상에는 많은 종류의 OS가 있는데 이때 마다 3줄씩 추가해서 (아래처럼) 작성해야 한다는거거든요..
  - name: nginx for CentOS
    include_tasks: CentOS.yml
    when: ansible_distribution == 'CentOS'

모름지기 좋은 코드 혹은 좋은 내용이란 짧은 줄에 많은 내용을 담아야 하고, 그게 보기 좋아야 한다고...배웠거든요! 제가 하는 말이 아닙니다 그러니까 신뢰하셔도 되요



그래서 저쪽에서 중복되는 부분을 제거할꺼에요.
즉 CentOS? Ubuntu이렇게 생긴 부분인거죠.

이 부분을 변수 처리해서 현재의 ansible_distribution을 바로 인자로 쓸껀데, 이걸 하기 위해서는 조건문이라는 것을 써야 합니당.

개발자 분들이야 조건문이라는 말이 나오기 전부터 분기 해야 겠네 라고 생각하시겠지만요
(이 붕가는 아닙니다아 -_-;)


참 그리고 CentOS와 Ubuntu 같은 것을 변수 처리 하기 위해서 vars쪽에 선언해 주어야 합니다.

그러면 이번엔 특별히 바뀐 코드 부터 볼까요?
코드가 기존에 비하면 한결 간결....해져 보이겠죠...? 저만의 착각은 아니겠죠오~!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes
  vars:
    lnx_name: "{{ 'Ubuntu' if ansible_distribution == 'Ubuntu' else 'CentOS' if ansible_distribution == 'CentOS' else 'Just Linux' }}"

  tasks:
  - name: nginx for Any Linux
    include_tasks: "{{ lnx_name }}.yml"


이걸 돌리면 이렇게 돌아간답니다.






[Continue reading...]

2017년 10월 27일 금요일

[Ansible] 조건별로 nginx를 "한방에" 설치하기

- 2 개의 댓글












지난번에 [Ansible] 조건별로 nginx 설치하기 를 통해서
데비안 계열(우분투)를 골라서 설치하는 방법을 알아보았었죠오~!!

그러면 HPC나 WEB server나 이런 저런 목적으로 노드들 안에 여러가지의 운영체제들이 섞여 있는 경우라면 어떻게 할까요?

여러가지 버전을 만들어서 우분투 버전, 센트 버전, 레드햇 버전등을 다 만들어야 할까요?
만드는건 그렇다고 치고...여러개를 실행하려면 답답해 보이지 않을까요?

그리고 더 큰 문제는 지난번에 쓴 when 조건은 task단위로 동작하기 때문에...그동안 nginx를 설치하기 위해 여러 개들의 task를 쓴 것마다 다 넣어줘야 한다는 ...모질이 같은...단점이 발생합니다.

어떻게 해결하고 싶어지지 않나요?
... 아니 저만 그런가요...--;;;



하하하;;;

생각해 보면 말이죠 컴터는 트리(Tree)라는 구조를 정말 많이 좋아합니다.
저희가 주로 쓰고 있는 윈도우도 트리 구조를 가지고 있죠


왜 이런 얘기를 하냐면요..
nginx_main.yml에서 다른 yml을 부르면 되는, 즉 트리 구조를 만들면 이런 문제가 해결되거든요

..yml에서 다른 yml을 불러서 거기서 조건에 맞는 부분을 실행하면 됩니다.
이때 사용되는 기능이 include_tasks라는 기능입니다. (구 include)

소스 코드를 볼까요?

[ nginx_main.yml ]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
  - name: nginx for Ubuntu
    include_tasks: Ubuntu.yml
    when: ansible_distribution == 'Ubuntu'

  - name: nginx for CentOS
    include_tasks: CentOS.yml
    when: ansible_distribution == 'CentOS'


[ CentOS.yml ]
1
2
3
4
5
6
7
8
- name: install epel-release
  action : "{{ ansible_pkg_mgr }} name=epel-release state=latest"
- name: install nginx web server
  action : "{{ ansible_pkg_mgr }} name=nginx state=present"
- name: Upload default index.html for web server
  get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644
- name: Start nginx web server
  service: name=nginx state=started


[ Ubuntu.yml ]
1
2
3
4
- name: install nginx web server
  action : "{{ ansible_pkg_mgr }} name=nginx state=present"
- name: Upload default index.html for web server
  get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644 validate_certs=no


위의 코드는 nginx_main에서 CentOS와 Ubuntu의 조건에 맞으면 불러서 사용하게 되는 것입니다.

결과는 이렇게 나옵니다.




어떤가요? 재밌을꺼 같죠? 이 걸 잘 활용하면 코드를 효율적으로 사용하고 구조화해서 보기 좋게, 그리고 관리 하게 쉽게 할수 있답니다. :)

혹시...

이렇다면 ~~ 다 이 글을 제대로 이해하게 못 쓴 제 잘못이니 :) 저에게 돌을 던져 주세요~!
그럼 돌아오는 주말 즐겁게 보내세요~!



[Continue reading...]

2017년 10월 17일 화요일

[Ansible] 조건별로 nginx 설치하기

- 0 개의 댓글

오랜만 입니다~~!
일주일에 한개는 올려야 하는데....하하하;;; 바빴네요 ㅠㅠ
(이런거 아닙니다 진짜 아닙니다 -_-;)



이번에 다룰 주제는 ~~!
그룹 내에서 조건으로 구분해서 설치하기 입니다.

이게 무슨 얘기냐면....
web server를 위한 노드들이 있다고 생각해 봅시다.
그런데, 특정 OS 버그가 있을수 있기 때문에, 다양성을 추구하는 목적 및 테스트 bed라 섞어서 쓴다고 해 봅시다..
즉 우분투와 레드햇 계열을 동시에 사용하고 있다고  했을때,
그룹을 구분해서 우분투 계열과 레드햇 계열로 쪼개서 hosts에 입력하면 되겠지만 말이지요...

web, prod, test를 하는 목적에 또 여기서 OS 별로 쪼개면 엄청 귀찮게 되거든요..
따라서 해당 부분을 자동으로 구분하도록 코드를 입력해 주면 편리하게 이용이 가능합니다.~!!

우선 단순하게 구현하는 것부터 ~~!!


1
2
3
4
5
6
7
8
9
---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
    - name: install nginx web server
      action : "{{ ansible_pkg_mgr }} name=nginx state=present"
      when : ansible_os_family == 'Debian'

해당 코드는 우분투 그러니까....
데비안 계열만 인식해서 >>> ansible_os_family == 'Debian' 
그중에서 데비안에서 쓰는 apt를 추출해서 {{ ansible_pkg_mgr }}
nginx를 설치하는 것 입니다.
(package라는 모듈을 쓰면 더 간단하게 되기도 하지만 일단 이걸로 실습해 봅니다아~)

여기서 이게 가능한 것은 when이라는 조건과 ansible_os_family와 ansible_pkg_mgr이라는 변수를 쓸수가 있었다는 거죠

결과를 보면...다음과 같죠~!


여기서 빨강색은 인자를 수집할때는 가상머신이 꺼져 있어서 그런 것입니다~!




현재 상태가 이렇거든요..메모리 부족으로... 4개를 껐어요.
돈 벌어서 메모리 사야 할까봐요 ㅠㅠ




여하튼 깔끔하게 우분투에만 nginx가 설치 되었습니다.~
(101-105까지거든요~)

그럼 인자값이 있는 변수를 어떻게 알아냈을까요?
(저만 궁금한가요...ㅠㅠ?)



그건 말이죠오오~!
ansible -m setup <노드이름>을 입력하면 명령 수행시에 얻어오는 인자들을 보여줍니다.
인자 값 샘플

거기서 아래와 같이 두가지 방법으로 인자 값을 받아서 사용할수 있는데요

[ jin_ipv4.yml ]

1
2
3
4
5
---
- hosts: localhost
  tasks:
    - debug: msg={{ ansible_default_ipv4.address }}
    - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']

debug를 쓴거는 내용을 확인하려고 쓴거고...중요한건

{{ ansible_default_ipv4.address }}
or
[inventory_hostname]['ansible_default_ipv4']['address']

이 구문이 되는 거죠 (파이썬의 dict에 익숙하시면 아주 보기 편....;; 할텐데요.)

아..아니아니 이게 아니라..




그러니 포기하지 말고, 본인의 상상력을 발휘해서 좀 더 동적으로 동작하는 코드를 만들어 내 봅시다 :)

참 결과는요..이렇게 나옵니다. 여기 IP는 기본으로 vagrant의 nat ip 입니다앙~!



이걸 더 보기 좋게 만드는 것을 다음에 해볼께요~!!
이걸 알아두면 롤(Role)도 쉬워요 아...마..도요?
하하하;;;

추가 정보
앤서블 Family로 받아오는 OS 정보 입니당~!
(고로 vmware와 windows는 이걸로 안되는다는거죠;; 추후에 아마 추가될꺼에요 nxos는 어떻게 될지 모르겠네요 ...왠지 redhat으로 될 것만 같은 느낌이...드네용)

# A list with OS Family members
OS_FAMILY = dict(
    RedHat = 'RedHat', Fedora = 'RedHat', CentOS = 'RedHat', Scientific = 'RedHat',
    SLC = 'RedHat', Ascendos = 'RedHat', CloudLinux = 'RedHat', PSBM = 'RedHat',
    OracleLinux = 'RedHat', OVS = 'RedHat', OEL = 'RedHat', Amazon = 'RedHat',
    XenServer = 'RedHat', Ubuntu = 'Debian', Debian = 'Debian', Raspbian = 'Debian', Slackware = 'Slackware', SLES = 'Suse',
    SLED = 'Suse', openSUSE = 'Suse', SuSE = 'Suse', SLES_SAP = 'Suse', Gentoo = 'Gentoo', Funtoo = 'Gentoo',
    Archlinux = 'Archlinux', Manjaro = 'Archlinux', Mandriva = 'Mandrake', Mandrake = 'Mandrake',
    Solaris = 'Solaris', Nexenta = 'Solaris', OmniOS = 'Solaris', OpenIndiana = 'Solaris',
    SmartOS = 'Solaris', AIX = 'AIX', Alpine = 'Alpine', MacOSX = 'Darwin',
    FreeBSD = 'FreeBSD', HPUX = 'HP-UX'
)
https://groups.google.com/forum/#!topic/ansible-project/OZPu-b17n_w







[Continue reading...]

[Ansible] 디폴트 인자값 샘플

- 0 개의 댓글



  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
192.168.1.106 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.1.106",
            "10.0.2.15"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::a00:27ff:febc:1c51",
            "fe80::5054:ff:fead:a096"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/01/2006",
        "ansible_bios_version": "VirtualBox",
        "ansible_cmdline": {
            "BOOT_IMAGE": "/vmlinuz-3.10.0-514.26.2.el7.x86_64",
            "biosdevname": "0",
            "console": "ttyS0,115200n8",
            "crashkernel": "auto",
            "net.ifnames": "0",
            "no_timer_check": true,
            "quiet": true,
            "rd.lvm.lv": "VolGroup00/LogVol01",
            "rhgb": true,
            "ro": true,
            "root": "/dev/mapper/VolGroup00-LogVol00"
        },
        "ansible_date_time": {
            "date": "2017-10-16",
            "day": "16",
            "epoch": "1508161791",
            "hour": "13",
            "iso8601": "2017-10-16T13:49:51Z",
            "iso8601_basic": "20171016T134951028306",
            "iso8601_basic_short": "20171016T134951",
            "iso8601_micro": "2017-10-16T13:49:51.028441Z",
            "minute": "49",
            "month": "10",
            "second": "51",
            "time": "13:49:51",
            "tz": "UTC",
            "tz_offset": "+0000",
            "weekday": "Monday",
            "weekday_number": "1",
            "weeknumber": "42",
            "year": "2017"
        },
        "ansible_default_ipv4": {
            "address": "10.0.2.15",
            "alias": "eth0",
            "broadcast": "10.0.2.255",
            "gateway": "10.0.2.2",
            "interface": "eth0",
            "macaddress": "52:54:00:ad:a0:96",
            "mtu": 1500,
            "netmask": "255.255.255.0",
            "network": "10.0.2.0",
            "type": "ether"
        },
        "ansible_default_ipv6": {},
        "ansible_devices": {
            "sda": {
                "holders": [],
                "host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)",
                "model": "VBOX HARDDISK",
                "partitions": {
                    "sda1": {
                        "holders": [],
                        "sectors": "2048",
                        "sectorsize": 512,
                        "size": "1.00 MB",
                        "start": "2048",
                        "uuid": null
                    },
                    "sda2": {
                        "holders": [],
                        "sectors": "2097152",
                        "sectorsize": 512,
                        "size": "1.00 GB",
                        "start": "4096",
                        "uuid": "5fa55ee0-f673-472b-a7f6-4353c6451a01"
                    },
                    "sda3": {
                        "holders": [
                            "VolGroup00-LogVol00",
                            "VolGroup00-LogVol01"
                        ],
                        "sectors": "81784832",
                        "sectorsize": 512,
                        "size": "39.00 GB",
                        "start": "2101248",
                        "uuid": null
                    }
                },
                "removable": "0",
                "rotational": "1",
                "sas_address": null,
                "sas_device_handle": null,
                "scheduler_mode": "cfq",
                "sectors": "83886080",
                "sectorsize": "512",
                "size": "40.00 GB",
                "support_discard": "0",
                "vendor": "ATA"
            }
        },
        "ansible_distribution": "CentOS",
        "ansible_distribution_major_version": "7",
        "ansible_distribution_release": "Core",
        "ansible_distribution_version": "7.3.1611",
        "ansible_dns": {
            "nameservers": [
                "10.0.2.3"
            ]
        },
        "ansible_domain": "",
        "ansible_effective_group_id": 1000,
        "ansible_effective_user_id": 1000,
        "ansible_env": {
            "HOME": "/home/vagrant",
            "LANG": "en_US.UTF-8",
            "LESSOPEN": "||/usr/bin/lesspipe.sh %s",
            "LOGNAME": "vagrant",
            "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:",
            "MAIL": "/var/mail/vagrant",
            "PATH": "/usr/local/bin:/usr/bin",
            "PWD": "/home/vagrant",
            "SELINUX_LEVEL_REQUESTED": "",
            "SELINUX_ROLE_REQUESTED": "",
            "SELINUX_USE_CURRENT_RANGE": "",
            "SHELL": "/bin/bash",
            "SHLVL": "2",
            "SSH_CLIENT": "192.168.1.10 39868 22",
            "SSH_CONNECTION": "192.168.1.10 39868 192.168.1.106 22",
            "SSH_TTY": "/dev/pts/0",
            "TERM": "cygwin",
            "USER": "vagrant",
            "XDG_RUNTIME_DIR": "/run/user/1000",
            "XDG_SESSION_ID": "18",
            "_": "/usr/bin/python"
        },
        "ansible_eth0": {
            "active": true,
            "device": "eth0",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "off [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "off [fixed]",
                "netns_local": "off [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off",
                "rx_checksumming": "off",
                "rx_fcs": "off",
                "rx_vlan_filter": "on [fixed]",
                "rx_vlan_offload": "on",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "off [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "off [fixed]",
                "tx_mpls_segmentation": "off [fixed]",
                "tx_nocache_copy": "off",
                "tx_scatter_gather": "on",
                "tx_scatter_gather_fraglist": "off [fixed]",
                "tx_sctp_segmentation": "off [fixed]",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "off [fixed]",
                "tx_tcp_ecn_segmentation": "off [fixed]",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "on [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "off [fixed]",
                "vlan_challenged": "off [fixed]"
            },
            "ipv4": {
                "address": "10.0.2.15",
                "broadcast": "10.0.2.255",
                "netmask": "255.255.255.0",
                "network": "10.0.2.0"
            },
            "ipv6": [
                {
                    "address": "fe80::5054:ff:fead:a096",
                    "prefix": "64",
                    "scope": "link"
                }
            ],
            "macaddress": "52:54:00:ad:a0:96",
            "module": "e1000",
            "mtu": 1500,
            "pciid": "0000:00:03.0",
            "promisc": false,
            "speed": 1000,
            "type": "ether"
        },
        "ansible_eth1": {
            "active": true,
            "device": "eth1",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "off [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "off [fixed]",
                "netns_local": "off [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off",
                "rx_checksumming": "off",
                "rx_fcs": "off",
                "rx_vlan_filter": "on [fixed]",
                "rx_vlan_offload": "on",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "off [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "off [fixed]",
                "tx_mpls_segmentation": "off [fixed]",
                "tx_nocache_copy": "off",
                "tx_scatter_gather": "on",
                "tx_scatter_gather_fraglist": "off [fixed]",
                "tx_sctp_segmentation": "off [fixed]",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "off [fixed]",
                "tx_tcp_ecn_segmentation": "off [fixed]",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "on [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "off [fixed]",
                "vlan_challenged": "off [fixed]"
            },
            "ipv4": {
                "address": "192.168.1.106",
                "broadcast": "192.168.1.255",
                "netmask": "255.255.255.0",
                "network": "192.168.1.0"
            },
            "ipv6": [
                {
                    "address": "fe80::a00:27ff:febc:1c51",
                    "prefix": "64",
                    "scope": "link"
                }
            ],
            "macaddress": "08:00:27:bc:1c:51",
            "module": "e1000",
            "mtu": 1500,
            "pciid": "0000:00:08.0",
            "promisc": false,
            "speed": 1000,
            "type": "ether"
        },
        "ansible_fips": false,
        "ansible_form_factor": "Other",
        "ansible_fqdn": "ansible-node06",
        "ansible_gather_subset": [
            "hardware",
            "network",
            "virtual"
        ],
        "ansible_hostname": "ansible-node06",
        "ansible_interfaces": [
            "lo",
            "eth1",
            "eth0"
        ],
        "ansible_kernel": "3.10.0-514.26.2.el7.x86_64",
        "ansible_lo": {
            "active": true,
            "device": "lo",
            "features": {
                "busy_poll": "off [fixed]",
                "fcoe_mtu": "off [fixed]",
                "generic_receive_offload": "on",
                "generic_segmentation_offload": "on",
                "highdma": "on [fixed]",
                "hw_tc_offload": "off [fixed]",
                "l2_fwd_offload": "off [fixed]",
                "large_receive_offload": "off [fixed]",
                "loopback": "on [fixed]",
                "netns_local": "on [fixed]",
                "ntuple_filters": "off [fixed]",
                "receive_hashing": "off [fixed]",
                "rx_all": "off [fixed]",
                "rx_checksumming": "on [fixed]",
                "rx_fcs": "off [fixed]",
                "rx_vlan_filter": "off [fixed]",
                "rx_vlan_offload": "off [fixed]",
                "rx_vlan_stag_filter": "off [fixed]",
                "rx_vlan_stag_hw_parse": "off [fixed]",
                "scatter_gather": "on",
                "tcp_segmentation_offload": "on",
                "tx_checksum_fcoe_crc": "off [fixed]",
                "tx_checksum_ip_generic": "on [fixed]",
                "tx_checksum_ipv4": "off [fixed]",
                "tx_checksum_ipv6": "off [fixed]",
                "tx_checksum_sctp": "on [fixed]",
                "tx_checksumming": "on",
                "tx_fcoe_segmentation": "off [fixed]",
                "tx_gre_segmentation": "off [fixed]",
                "tx_gso_robust": "off [fixed]",
                "tx_ipip_segmentation": "off [fixed]",
                "tx_lockless": "on [fixed]",
                "tx_mpls_segmentation": "off [fixed]",
                "tx_nocache_copy": "off [fixed]",
                "tx_scatter_gather": "on [fixed]",
                "tx_scatter_gather_fraglist": "on [fixed]",
                "tx_sctp_segmentation": "on",
                "tx_sit_segmentation": "off [fixed]",
                "tx_tcp6_segmentation": "on",
                "tx_tcp_ecn_segmentation": "on",
                "tx_tcp_segmentation": "on",
                "tx_udp_tnl_segmentation": "off [fixed]",
                "tx_vlan_offload": "off [fixed]",
                "tx_vlan_stag_hw_insert": "off [fixed]",
                "udp_fragmentation_offload": "on",
                "vlan_challenged": "on [fixed]"
            },
            "ipv4": {
                "address": "127.0.0.1",
                "broadcast": "host",
                "netmask": "255.0.0.0",
                "network": "127.0.0.0"
            },
            "ipv6": [
                {
                    "address": "::1",
                    "prefix": "128",
                    "scope": "host"
                }
            ],
            "mtu": 65536,
            "promisc": false,
            "type": "loopback"
        },
        "ansible_machine": "x86_64",
        "ansible_machine_id": "582dfe90830c4f239921b48288da321c",
        "ansible_memfree_mb": 6,
        "ansible_memory_mb": {
            "nocache": {
                "free": 329,
                "used": 159
            },
            "real": {
                "free": 6,
                "total": 488,
                "used": 482
            },
            "swap": {
                "cached": 0,
                "free": 1535,
                "total": 1535,
                "used": 0
            }
        },
        "ansible_memtotal_mb": 488,
        "ansible_mounts": [
            {
                "device": "/dev/mapper/VolGroup00-LogVol00",
                "fstype": "xfs",
                "mount": "/",
                "options": "rw,seclabel,relatime,attr2,inode64,noquota",
                "size_available": 38941630464,
                "size_total": 40212119552,
                "uuid": "209ec503-acbc-4b2d-be55-b50ce1a28c58"
            },
            {
                "device": "/dev/sda2",
                "fstype": "xfs",
                "mount": "/boot",
                "options": "rw,seclabel,relatime,attr2,inode64,noquota",
                "size_available": 995123200,
                "size_total": 1063256064,
                "uuid": "5fa55ee0-f673-472b-a7f6-4353c6451a01"
            }
        ],
        "ansible_nodename": "ansible-node06",
        "ansible_os_family": "RedHat",
        "ansible_pkg_mgr": "yum",
        "ansible_processor": [
            "GenuineIntel",
            "Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz"
        ],
        "ansible_processor_cores": 1,
        "ansible_processor_count": 1,
        "ansible_processor_threads_per_core": 1,
        "ansible_processor_vcpus": 1,
        "ansible_product_name": "VirtualBox",
        "ansible_product_serial": "NA",
        "ansible_product_uuid": "NA",
        "ansible_product_version": "1.2",
        "ansible_python": {
            "executable": "/usr/bin/python",
            "has_sslcontext": true,
            "type": "CPython",
            "version": {
                "major": 2,
                "micro": 5,
                "minor": 7,
                "releaselevel": "final",
                "serial": 0
            },
            "version_info": [
                2,
                7,
                5,
                "final",
                0
            ]
        },
        "ansible_python_version": "2.7.5",
        "ansible_real_group_id": 1000,
        "ansible_real_user_id": 1000,
        "ansible_selinux": {
            "config_mode": "enforcing",
            "mode": "enforcing",
            "policyvers": 28,
            "status": "enabled",
            "type": "targeted"
        },
        "ansible_service_mgr": "systemd",
        "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF6W910VHiIaxDyYynwf0KcVqT5SZKnGCy2Q+qxcryjLzeUDx5xmzGCSj7P2ZeJcu3zCL/w/ByRjYTuX8bfQxqQ=",
        "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIJWOjN3IvBJHd79HIR3AtyYAaVe1+HR3fWy5oJ2+VWb7",
        "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCyvz8wj3Jkw8dr93qC+PA9QCPOLuXb53RJSDuFaXoJ6Gbz0Z2AsEzTG/IEIFlu5IQnWtuNIDvY+lxy0Ax5R608ayE3NFUxqurzTXsaxP+Zyq6W2VxRTAznbW4cPV4JmvBscaciK6/MTLhihAqpmFs/L2BKf/o/Gq25PFbPKL3g3vN7CBNsLUQ2BZbbXdXOZ+i5iEcnqeJtj9OFOmFAWOXrkNm4Q6ENmE50Fd4bDDLOt6LNta5lb0dzEPgF6k17m70Dqm19QtG8LGaeEg6UFojPVkySd1mDnO4GiPa1bKXm8IKVzzLW2bAlQxQdnP/b5bs/uTKve377J1aMy63zUP4P",
        "ansible_swapfree_mb": 1535,
        "ansible_swaptotal_mb": 1535,
        "ansible_system": "Linux",
        "ansible_system_capabilities": [
            ""
        ],
        "ansible_system_capabilities_enforced": "True",
        "ansible_system_vendor": "innotek GmbH",
        "ansible_uptime_seconds": 46594,
        "ansible_user_dir": "/home/vagrant",
        "ansible_user_gecos": "vagrant",
        "ansible_user_gid": 1000,
        "ansible_user_id": "vagrant",
        "ansible_user_shell": "/bin/bash",
        "ansible_user_uid": 1000,
        "ansible_userspace_architecture": "x86_64",
        "ansible_userspace_bits": "64",
        "ansible_virtualization_role": "guest",
        "ansible_virtualization_type": "virtualbox",
        "module_setup": true
    },
    "changed": false
}
[Continue reading...]
 
Copyright © . 엔지니어를 위한 파이썬 및 기술 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger