2017년 7월 23일 일요일

[파이썬] 랜덤+가중치

- 0 개의 댓글
페이스북 파이썬 유저 그룹에서 앤서블(Ansible) 이벤트를 진행했는데.. 진짜 정말 생각보다 많은 분들이 등록을 하셨다.

무료이벤트이긴 하지만...이렇게 호응이 좋을 줄이야...

그래서 고마운 맘에 조금 더 드려야 하고 2명을 더 추가하고...공유해드린 분은 가중치(weight)를 드려야 겠다고 생각했다. 그런데...이걸 가중치도 되면서 난수도 뽑아 주는 프로그램을 구글에서 검색해서 하려고 했는데.. 이런 프로그램이 개발된게 없다..


난 프로그래밍 할줄 잘 모르는데.... 어쩌겠다..만들어야지..진짜 허접해서 그래서..이걸 만들었다.. 비웃을 수도 있지만...-_-; 일단 동작은 하니까... 그리고 계속 써야 할 수도 있어서...

[ 추첨 영상 ]





[ 당첨자 ]
1 : 변규섭
2 : LeeDong Won
7 : Changkyum Kim 
14 : Minho Park
19 : Jeffery Lim  (22번 중복으로 추가 당첨)
22 : LeeDong Won

[코드]

#!/usr/bin/python
#-*- coding: utf-8 -*-
import random

# 가중치
weight = 3

# 참여하신 분 
shared = 8
reply = 17

#당첨 되신 분 
won = 5

w = []
#가중치꺼 
for i in range(weight):
    for i in range(shared):
        w.append(i+1)

#보통꺼
w = w+range(shared+1,shared+reply+1)

# 중복제거 
w_sample = list(set(random.sample(w,won))) 

# 중복제거 하면, 다시 샘플링 함 
while True:
    if won==len(w_sample):
        print w_sample
        break
    else:
        w_sample = list(set(random.sample(w,won)))  

[Continue reading...]

2017년 7월 21일 금요일

[Ansible] nginx는 어떻게 윈도우에서 올리나요?

- 0 개의 댓글


강의를 준비하다보니...nginx도 윈도우에서 올려야 할꺼 같고.
그래서 쉽게 생각하고...초코레이티?(chocolatey)로 만들면 되겠지?

하고 즐겁게 시작했다...

                                      (키보드를 그냥 새로 살까보다 -_-)


각설하고..초코레이티로는 이게 안된다..아무래도 윈도우 패키지도 아니고..하니..
(원래는 nginx은 프로세스 개념처럼 돌아간다. 그러니까 걍 exe실행으로 돌아감)

나중에 인스톨러가 나오면 초코레이티도 되지 않을까?? 생각을 해보긴 하는데...
일단은....

이렇게 작성해야 돌아간다.

---
- hosts: Win
  gather_facts: no
  tasks:
    - name: Download nginx
      win_get_url:
          url: http://nginx.org/download/nginx-1.12.1.zip
          dest: C:\tmp\nginx-1.12.1.zip
    - name: Create directory
      win_file:
          path: C:\nginx
          state: directory
    - name: Unzip nginx
      win_unzip:
          src: C:\tmp\nginx-1.12.1.zip
          dest: C:\nginx
    - name: Install nssm
      win_chocolatey:
         name: nssm
    - name: Download new index.html
      win_get_url:
          url: http://nginx.com
          dest: C:\nginx\nginx-1.12.1\html\index.html
    - name: Restart nginx service
      win_nssm:
         name: nginx
         application: C:\nginx\nginx-1.12.1\nginx.exe
         state: restarted
 


내용이 별거 없어 보이겠지만...반나절 삽질의 결과이다...
하하하...언제나 그렇듯..삽질과 삽질이...가장 삽질을 많이 한 부분은 nssm이 해석이 되지 않아, 파워셸을 해석해 내는 것이 안된다는 오류를 여러번 만난 것이었다..

나는 파워셸이 삐꾸거나.아니면 win_nssm이 멍청한줄 알았는데..
걍 nssm이 동작을 못하고 있던 것이었다..그래서 그냥 설치를 돌려서 서비스를 살렸다.
이 사실은 도큐먼트에 요구사항에 써 있다..
다 작성하고 알았음....하하하;;; 허허허;;;

참고로 nssm (the Non-Sucking Server Manager)은 윈도우에서 서비스를 등록해 주는 프로그램을 지칭한다.

다 되면 이와 같이 동작한다.


찌잉찌잉 잘 되는 장면...(여기까지 어떻게 왔더라..-_-)



윈도우에서 잘 되는 장면 (nginx 디폴트 index.html하고 바뀐것하고 둘다 )


외부에서 해당 IP로 접속한 화면

얼추 초중급 강의 준비는 되어가는듯 한데......인생이 어떻게 흘러가는지 모르겠다..ㅎㅎㅎㅎ

[Continue reading...]

2017년 7월 2일 일요일

[Ansible] 어떻게 앤서블 플레이북 작성할까요? (물고기 잡는 법)

- 0 개의 댓글


다음 사연은...하하하;; 앤서블 코리아 유저 그룹에 '이철규'님의 사연입니다.
이거 캡처 했다고 쫓아오시면 어떻게하지;;;;

흐음;;;;;
각설하고...주제에 맞게 다시..

각자 많은 방법이 있겠지만, 저는 보통 이런 식으로 작성합니다.

1. 목적 (어떤걸 하고자 하는가?)
 - 앤서블을 통해서 윈도우 시스템을 관리하는 예제를 만들어야겠다.

2. 구글 검색 
 - 거의 상단에 앤서블 도큐먼트 페이지가 나옴

 - 기능 설명은 이해하겠으나, 예제와 실제 사례가 불분명함


 - 그래서 구글에서 다시 검색함
 - 주로 테크블로그와 파편화 되어 있는 수 많은 사이트를 검색
 - 그러고 나면 어느정도 기능들에 대한 예제들은 수집할 수가 있음.


3. 실행 
 - 문제가 항상 나옴
 - 한번에 되는 적이 없음
 - 다시 에러들에 대한 실사례를 구글에서 검색함
 - 주로 나오는 에러 사례들에 대해서 검색하면 나오는 곳들은
 3.1) 구글 앤서블 프로젝트 그룹
     - https://groups.google.com/forum/#!forum/ansible-project


 3.2) 구글 앤서블 깃허브 이슈
     - https://github.com/ansible/ansible/issues
 3.3) 스택오버플로우
     - https://stackoverflow.com/
 3.4) 각종 프로덕트 서포트들 모음
     - https://pulp.plan.io/
 3.5) 앤서블 코드
   Tree형식으로 보여줌 (코드 직접 리뷰때 필요 / github버전하고 완벽하게 일치하지 않음)
 - https://insight.io/github.com/ansible/ansible/tree/devel/
 - https://insight.io/github.com/ansible/ansible/blob/f0c13f4d3f1768ecacb2ab8bc3717248123055c8/lib/ansible/modules/network/nxos/nxos_vlan.py
   깃허브 버전 nxos_vlan.py 코드 (가장 최선 버전)
 - https://github.com/ansible/ansible-modules-core/blob/devel/network/nxos/nxos_vlan.py

4. 완성
 - 이런 과정들을 다 거치고 나면 뿅!! 하고 만들어 집니다.;;;


근데 진짜 위와 같이 해서 작성하고 있습니다;;;
유용한 사이트는 정말 필요한 목적에 따라 다양하게 바뀌어서 그때 그때 검색하는 것 말고는 방법이 정확하게 없는 것으로 보이지고요..바이블은 아무래도 앤서블 도큐먼트가 항상 되는 것 같습니다.

부디 꼭 도움이 되셨기를...

참고 정보 : 

1. 앤서블 도큐먼트 
  - 앤서블 홈페이지에 도큐먼트 정리된 것보다 좀더 깔끔하게 정리된 페이지
    http://devdocs.io/ansible/

2. 에디터 추천 
   - 앤서블 모듈 및 문법을 자동완성해 주는 에디터
    https://atom.io/packages/autocomplete-ansible

[Continue reading...]

[Ansible] 윈도우 시스템 관리하기

- 0 개의 댓글


앤서블 코리아 유저 그룹에 '윤기성'님이 신청해 주신 사..연?
윈도우 시스템 관리하기 편입니다. :)

(환호 환호)


....
그럼 시작합니다~

앤서블은 기본적으로 ssh를 통해서 python을 통해서 관리되게 됩니다. 
하지만...윈도우는 그 어느것도 기본 패키지에는 존재하지 않죠~

따라서, 누군가가 이걸 변환해 줘야 하는데...vagrant는 아래와 같이 winRM을 기본적으로 지원해서 알아서 해주지만, 앤서블은 이를 설치 구성해 주어야 합니다.~

(중간에 winRM이라는 부분을 찾아보세요~)

어쨌든 winRM을 리눅스에서 사용하기 위해서 해당 패키지를 pip를 통해서 받아야 하는데요 (앤서블 도큐먼트가 이렇게 권고함) 

우리는 vagrant를 통해서 센트OS(Ansible-Server)를 설치했고, 여기에는 당연하게도 pip가 없지요.....-_-;


(키보드 운동시켜주기)



그래서 [Vagrant] 15분만에 윈도우에서 Ansible 테스트 환경 구축하기 (서버 1대 + 노드 5대) 여기에 나온 bootstrap.sh를 수정해서 해당 패키지들이 설치되도록 재 구성합니다. 


(5-6번 라인 추가)

그리고 일일히 다시 구성하기 귀찮으니까 vagrant를 통해서 부셔버리고, 다시 만듭니다. 


그리고 'vagrant ssh ansible-server' 명령어를 통해서 접속 (ansible-server는 vagrantfile에 정의되어 있는 이름~!) 하고 난 뒤에 플레이북을 짜고 돌려보면, 에러만 잔뜩 나옵니다. 

[ win_chocolatey_ex.yml ]
---
- name: windows remote support for example.
  hosts: windows
  gather_facts: no
  connection: winrm

  tasks:
    - name: Install git
      win_chocolatey:   #windows program 설치해주는 모듈
        name: git
        state: present


왜 일까요~? 왜 일까요?
....이렇게 하고 숙제입니다. 라고 하고 가면..저는...수많은 지인들을 잃어버리겠죠?


그러면 안되니까....정답을 공개합니다. 
기본적으로 vagrant는 vagrant/vagrant라는 계정에 ssh(22번)등 리눅스에 최적화 되어 동작하지만, winRM을 사용하는 경우 개별 정보들은 모두 입력해 주어야 정상적으로 동작합니다. (하나하나 테스트가 필요한 항목 / 어디까지 디폴트도 될 것인가!!!)

여러가지 방법으로 알려줄수가 있는데..
1. 플레이북 파일에 포함(yml)
2. hosts 파일에 포함 
3. vars 파일을 만들어서 import 
4. 기타등등 

저는 테스트니까 2번으로 진행하였습니다아~

winRM은 기본적으로 사용하는 포트는 5985번 입니다.

그래서 /etc/ansible/hosts 파일에 다음과 같이 hard coding합니다. 
winrm을 써서 windows에다가 무언가를 할꺼야 라고 정의한거죠 

[vagrant@ansible-server ~]$ cat /etc/ansible/hosts
<중략>
[windows]
172.30.1.21 ansible_connection=winrm ansible_ssh_user=vagrant ansible_ssh_pass=vagrant ansible_ssh_port=5985


다른거 테스트하다가 추가합니다. (2017-08-14)
ansible_connection=winrm만 추가하면 
이름 넣어 이름 넣으라고 하고, 
그래서 이름 넣으면 
ansible_ssh_user는 vagrant라고!!!
포트를 5986으로 열라 많이 실행했는데 안되잖나!! 라고 합니다..-_-
그래서 포트도 지정 
ansible_ssh_port=5985
까지 하면 실행에는 문제가 없네요 




그러고 난 이후에 ping 테스트를 해보는데, 역시 winRM을 사용해야 하기때문에 ping이름도 win_ping입니다. 

작명센스가....하하하;;



어쨌든 위와 같이 잘 되는 걸 확인할 수가 있네요.

그러면 플레이북도 잘 되는지 봐야겠죠? 저희는 git을 설치해 볼 겁니다.
코드는 위에 있었어요~~~



설치 전


설치 후


뾰룡 뾰룡~!
AD가 있거나 하는 경우에는 kerberos도 써야 하고 좀더 생각을 해야 합니당 :) 
그리고 winRM을 통해서 이미 정의된 win으로 시작하는 명령어를 써도 되지만, powershell또는 batch를 짜고 파일을 전송해서 실행하는 것도 가능합니다. 
이건 취향의 문제니까요 :) 

참고 정보 : 
1. Windows Support 

2. Windows Modules 

[Continue reading...]

2017년 7월 1일 토요일

[Vagrant] Ansible 테스트 환경에 Windows2012R2 추가

- 0 개의 댓글


지난 번 글에서는 앤서블 테스트 환경 구성을 위해서 vagrant로

센트OS와 우분투만 추가했었죠?
이것들은 모두 우리들의 친구 리눅스입니다. :)

하지만 세상은 리눅스도 있지만, 어떤 사람은 ( 나...?) 윈도우를 좋아한답니다.
그리고 우리 사랑스러운 고객님들도 윈도우를 쓰시는 분들도 많으니, 앤서블 테스트를 위해서는 윈도우 시스템도 하나쯤은 있어야 할 것 같네요
(꼭..Ansible Korea User 그룹의 윤기성님이 요청해서 하...하는게 아닙니다.)




어쨌든~~ 생각보다 쉽습니다. 지난 번에 올린
[Vagrant] 15분만에 윈도우에서 Ansible 테스트 환경 구축하기 (서버 1대 + 노드 5대)
여기에서 약간만 수정해서 새로 추가하면 되요.
세상은 참 쉽게 살수 있는 것 같습니다.



대략 수정된 부분들은 

1. 컨피그 이름
2. 복사할 이미지 박스 이름
3. 버추얼박스 이름(중복되면 안되니까)
4. 윈도우는 자원대장이니까 cpu와 메모리를 늘려줌
5. vm의 호스트 이름(나중에 ssh 접속이 필요하다면 이걸로 접속됨 / 하지만 윈도우는 기본적으로 안됨 / 필요시에는 vagrantfile을 수정해서 설치해 놓아야함)
6. 아이피 주소와 포트 번호
7. shell 명령어( default gateway를 추가해주지 않고 라우트 경로를 지정해줌)
8. shell 명령어( 방화벽을 끔, 이게 제일 편해서~ 포트만 열어줘도 되지만;;)

설치 과정 


다 되고 나서 경록 확인 및 외부 연결 확인 






실제 추가된 코드  부분 


[ vagrantfile ]
<중략>
  # Ansible 테스트 노드 11 windows2012R2
  config.vm.define:"ansible-node11" do |cfg|
    cfg.vm.box= "opentable/win-2012r2-standard-amd64-nocm"
    cfg.vm.provider:virtualbox do |vb|
      vb.name= "HoonJo-Ansible-Node11"
      vb.customize ["modifyvm", :id, "--cpus", 2]
      vb.customize ["modifyvm", :id, "--memory", 4048]
    end
    cfg.vm.host_name="ansible-node11"
    cfg.vm.synced_folder ".", "/vagrant", disabled: true
    cfg.vm.network "public_network", ip: "172.30.1.21"
    cfg.vm.network "forwarded_port", guest: 22, host: 30121, auto_correct: false, id: "ssh"
    cfg.vm.provision "shell", inline: "route add 172.30.1.0 mask 255.255.255.0 172.30.1.254"
    cfg.vm.provision "shell", inline: "netsh firewall set opmode disable"
  end
end


다음 번에는 앤서블을 통해서 윈도우 컨트롤(쉬운 예제)하는 방법과 어떻게 해당 플래이북을 찾고 만들었는지에 대한 글을 작성해서 올릴 예정이다.

즉 한번에 두마리의 물고기를 잡을 것이다. :) 신남신남~!
[Continue reading...]
 
Copyright © . 엔지니어를 위한 파이썬 및 기술 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger