Ansible Up and Running 2nd 번역책이 드디어 2019년 6월 28일 출간되었다.





http://www.yes24.com/Product/Goods/74633507?scode=032&OzSrank=1


책소개

환경설정 배포가 손쉬운 자동화 툴 앤서블(Ansible)은 에이전트(Agent) 기반이 아닌 SSH 기반으로 SSH 연결을 통해 코드를 전송하고 스크립트를 실행한다. 베이그란트를 실험 머신으로 설정하고 앤서블과 연동되도록 설치 및 설정한다. 플레이북의 기능을 설명하고 한 대 또는 여러 대의 베이그란트 실험 머신에 파이썬 웹 애플리케이션을 배포한다. 앤서블의 기본 기능인 변수 및 팩트, 플레이, 롤, 태스크뿐 아니라 고급 필터, 룩업, 루프, 핸들러, 콜백 핸들러, 사용자 정의 모듈 등을 다룬다. 플레이북 디버깅 방법과 아마존 EC, 도커, 윈도우 호스트, 네트워크 장비에서 앤서블 사용 방법을 살펴보고 마지막으로 앤서블 타워를 설명한다. 『앤서블 시작과 실행』 은 리눅스 또는 유닉스 계열의 서버를 다뤄야 하는 사람들을 위한 책으로 시스템 관리, 운영, 배포, 설정 관리, 데브옵스(DevOps)라는 용어를 사용한 적이 있다면 여기에서 가치를 찾아야 한다. 또한 이 책은 처음부터 끝까지 읽을 수 있도록 작성됐고 이전 장을 기반으로 다음 장이 작성됐다. 주로 튜토리얼 형태로 작성됐기에 사용자의 컴퓨터로 따라 할 수 있다. 대부분의 예시는 웹 애플리케이션에 집중하고 있다.




역자 서문


저는 2014년에 네이버 주관 Deview에서 앤서블에 대해서 발표하고, 2015년에는 에이콘

출판사를 통해 국내에 처음으로 앤서블 번역책을 선보였습니다. 저는 앤서블이 많은 개발자,

데브옵스(DevOps), 시스템 관리자를 편하게 도와줄 것이라 믿었기 때문입니다. 그 믿음은

현실화되었고, 이제는 앤서블을 사용하지 않는 곳은 거의 없을 정도입니다.

서버에 배포와 관련된 에이전트를 설치하지 않고 단순히 서버 접근 권한과 앤서블만 있으면

작은 대수의 서버부터 수 백, 수 천대의 서버를 관리할 수 있습니다. 가상화, 클라우드

환경까지 다룰 정도입니다. 또한 멱등성, 단순한 설치, 설정 기능을 넘어서 애플리케이션

배포까지 담당하고 있습니다. 이제는 생산성을 향상시킬 수 있는 필수 툴이 되고 있습니다.

레드햇에 따르면 특정 회사에 대해 앤서블을 이용한 업무 자동화 컨설팅을 진행해 대응 및

소모 시간을 66~80%까지 단축했다고 합니다. 그만큼 운영 자동화 툴, 앤서블을 이용한

생산성 혁신은 매우 의미 있다고 할 수 있습니다.

이 책은 베이그란트를 실험 머신으로 설정하고 앤서블과 연동되도록 설치 및 설정합니다.

플레이북의 기능을 설명하고, 한 대 또는 여러 대의 베이그란트 실험 머신에 파이썬 웹

애플리케이션을 배포합니다. 앤서블의 기본 기능인 변수 및 팩트, 플레이, 롤, 태스크 뿐

아니라 고급 필터, 룩업, 루프, 핸들러, 콜백 핸들러, 사용자 정의 모듈 등을 다룹니다.

플레이북 디버깅 방법과 아마존 EC, 도커, 윈도우 호스트, 네트워크 장비에서 앤서블 사용

방법을 살펴봅니다. 마지막으로 앤서블 타워를 설명합니다.

이 책은 2017년에 출간된 책이지만 번역자가 최신 우분투 18.04, 베이그란트(Vagrant) 2.2.2,

파이썬 3.7, 앤서블 2.7.5 버전을 기준으로 설명하였고,

https://github.com/knight76/ansiblebook에 소스를 올려놨습니다.

이 책을 통해 즐겁게 앤서블을 배워가면 좋겠습니다.

Posted by 김용환 '김용환'

댓글을 달아 주세요


오랜만에 본 재미있는 글인 것 같다.

저자 자신 만의 관점으로 플랫폼을 살펴본 글이라 재미있었다.


'플랫폼 제국의 미래'이라는 책은 기존의 좋은 기업, 위대한 기업의 성공 신화에 대한 찬양 관점이 아니라 구글, 아마존, 페이스북, 애플 기업의 역사와 현재 위치를 분석해 불공정과 본질에 대한 얘기를 하는 책이다. 


저자는 구글, 아마존, 페이스북, 애플 등 성공한 모든 기업을 사람에 대한 뇌, 심장, 생식기, 손라는 신체라는 매력 포인트에 매칭시켜 설명한 내용이 인상 깊었다.


안 본 사람이라면 아래 내용이 도움이 될 것 같다. 


https://medium.com/@Creativ.S/%ED%94%8C%EB%9E%AB%ED%8F%BC-%EC%A0%9C%EA%B5%AD%EC%9D%98-%EB%AF%B8%EB%9E%98-the-four-the-hidden-dna-of-amazon-apple-facebook-and-google-1-f13cd4d59663


https://medium.com/@Creativ.S/%ED%94%8C%EB%9E%AB%ED%8F%BC-%EC%A0%9C%EA%B5%AD%EC%9D%98-%EB%AF%B8%EB%9E%98-the-four-the-hidden-dna-of-amazon-apple-facebook-and-google-2-20bd2b815e73



Posted by 김용환 '김용환'

댓글을 달아 주세요

페이스북, 암호화폐 발행 공식화…'리브라' 내년에 나온다 

http://www.zdnet.co.kr/view/?no=20190618203414


리브라 싸이트는 다음과 같다.

https://libra.org/en-US/white-paper/?noredirect=1


이를 번역한 글

https://ebadak.news/2019/06/18/facebook-coin-libra-whitepaper/?fbclid=IwAR1V_zA2GGacyK3V0Yirf1YN5r-2pPwe2aSGr9nVNGMZ_6Lw_LwBh-7-G1Y


포인트

- 높은 보안성, 확장 가능, 신뢰성 있는 블록체인 기반이다. 실제 예비 자산에 은한 가치 담보를 갖는다. 독립 기관인 'Libra Association'에 의해 통제된다.

- Libra Association: 스위스 제네바에 위치한 독립적 비영리단체.

- IT/커머스/금융/벤처캐피탈/비영리단체(Mastercard, Uber, eBay, Vodafone , Visa등) 28개 멤버이 설립했고 2020년까지 100개 이상 모일 것이다

- 2020년 상반기 런칭하고 5년 내 실제 거래 가능한 생태계를 구축하는데 목표를 가진다

- 전세계 사용 가능( visa, mastercard..)

-  개인 정보 주도권(DID)는 없어 보임

https://www.zdnet.com/article/microsoft-forget-google-facebook-log-in-with-our-new-blockchain-id/

https://www.blockmedia.co.kr/archives/92121?print=print

- 인가된(permissioned) blockchain이니 libra association 내의 validator node가 인정한 곳에서만 사용 가능하다

- 참여 업체(Visa, MasterCard 등등)가 보증하기 채굴 개념과 시세 차익 없는 화폐 같은 개념이다.

- 리브라 블럭체인은 Move 프로그래밍 언어를 사용한다


기타 자료(https://www.datadriveninvestor.com/2019/06/18/crypto-diaries-facebook-reveals-the-white-paper-for-its-stable-coin-libra/) 도 참고


- 1000 TPS 지원

- Calibra라는 자회사가 모든 암호 거래와 사용자 데이터의 프라이버시를 처리하고 Libra 화폐의 지갑 역할을 할 것이다. (페이스북의 간접 참여)

Posted by 김용환 '김용환'

댓글을 달아 주세요


jenkins에서 proxy 설정, update-center 작업을 수작업으로 일반적으로 작업한다. 

절차는 다음과 같다.


1. Use browser for metadata download 설정

Manage Jenkins -> Configure Global Security -> Plugin Manager -> Use browser for metadata download를  check on한다.


2. plugin 관리에서 Proxy 서버를 추가

http://jenkins장비:8080/pluginManager/advanced에서 proxy 설정 넣어야 한다.



이런 작업을 ansible로 자동화 할 수 있다. (1:1로 매핑하기 보다는 잘 동작하게)

- name: Configure Proxy
environment:
no_proxy: "localhost"
jenkins_script:
url: "http://localhost:8080"
script: "{{ lookup('template', 'proxy.groovy') }}"
validate_certs: False
timeout: 120

- name: Change Update-Center protocol
replace:
path: "{{ jenkins_home }}/hudson.model.UpdateCenter.xml"
regexp: 'https://updates.jenkins.io/update-center.json'
replace: 'http://updates.jenkins.io/update-center.json'



templates/proxy.groovy 파일

import jenkins.model.*

def instance = Jenkins.getInstance()

final String name = 'proxy.daumkakao.io'
final int port = 3128
final String noProxyHost = [
'localhost', '127.0.0.1', '127.0.0.0/8',
'...'
].join('\n')

final def proxyConfig = new hudson.ProxyConfiguration(
name, port, null, null, noProxyHost)

instance.proxy = proxyConfig
instance.save()


Posted by 김용환 '김용환'

댓글을 달아 주세요



Jenkins UI에서 플러그인 설치하려 할 때 다음 에러가 난다.

java.net.SocketTimeoutException: connect timed out


jenkins plugin 앤서블에서는 에러가 발생한다.

"details": "HTTP Error 403: Forbidden", 

"msg": "Cannot get CSRF"


이 이유는 바로 proxy 설정 때문에 발생하는 것이다.



Proxy 설정을 잘 주어 젠킨스 플러그인을 설치한다.  jenkins_plugin은 localhost:8080을 호출하기 때문에 no_proxy를 주어야 한다.


 - name: Install jenkins plugins.

  jenkins_plugin:

    owner: "{{default_user}}"

    group: "{{default_group}}"

    jenkins_home: "{{ jenkins_home }}"

    name: "{{ item }}"

    state: latest

  environment:

    no_proxy: "localhost"

    http_proxy: "{{proxy_env.http_proxy}}"

    https_proxy: "{{proxy_env.http_proxy}}"

  with_lines: cat "../../templates/jenkins/plugins/plugins.lst"



Posted by 김용환 '김용환'

댓글을 달아 주세요


맥에서 iterm2를 사용 중인데, 서버에 접근하면 한글 파일이 잘 보이지 않는다.


서버 설정은 잘 되어 있다.

$ env|grep LC

LC_ALL=ko_KR.utf8

$ env|grep LANG

LANG=ko_KR.utf8



한글 디렉토리와 파일은 ???로 나타난다.

jenkins를 실행하면 제대로 파일을 읽지 못한다.


SEVERE: Could not restore backup.

java.io.FileNotFoundException: /google/program/jenkins_backup/jobs/(?????????) ansible-common (No such file or directory)

at java.io.FileInputStream.open0(Native Method)

at java.io.FileInputStream.open(FileInputStream.java:195)


이유는 무척 단순했다.

최근 맥북을 받았는데. LC와 LANG을 설정이 안되어 있는데..


$ env | grep LC

$ env | grep LANG


iterm 기본 설정은 로컬 변수를 서버까지 가지고 가는 형태였다.(대박.)


따라서 맥북에 iterm2를 사용할 때는 반드시 Profiles/Terminal/Environment을 살펴보고.

Set locale variable automatically 설정은 check off해야 한다.





서버 설정이 아니라 내 기본 설정 이슈였다.

Posted by 김용환 '김용환'

댓글을 달아 주세요

scala cats 공부 자료.

scala 2019.06.18 20:53


스칼라의 Cats 라이브러리를 이해하는데 도움이 될만한 자료.


1. 엄익훈님의 Scala Night 발표 자료 

https://www.slideshare.net/ikhoon1/real-world-cats-93894867  


Real world cats from Ikhoon Eom


http://tech.kakao.com/2017/09/02/parallel-programming-and-applicative-in-scala/



2. 소프트웨어 미 자료

https://blog.softwaremill.com/9-tips-about-using-cats-in-scala-you-might-want-to-know-e1bafd365f88


3. medium 자료

https://medium.com/@abu_nadhr/scala-cats-library-for-dummies-part-1-8ec47af7a144

https://medium.com/@abu_nadhr/scala-cats-library-for-dummies-part-2-1f2fb31f804c

https://medium.com/@abu_nadhr/scala-cats-library-for-dummies-part-3-fd3b185088f0

https://medium.com/@abu_nadhr/scala-cats-library-for-dummies-part-4-b096f33cc153



4. scala with cats 자료

https://books.underscore.io/scala-with-cats/scala-with-cats.pdf



Posted by 김용환 '김용환'

댓글을 달아 주세요


git 프로젝트를 다운받을 때 github key를 사용해 다운로드 한다. 


앤서블을 사용하는 첫 번째 방법 - ~/.ssh/config 파일을 수정한다

Host github.com

  IdentityFile ~/.ssh/github_rsa


- name: Download config
git:
repo: git@github.com:uj/config.git
dest: "{{program_path}}/config"
force: yes
clone: yes



앤서블을 사용하는 두 번째 방법 - 직접 key 파일을 가르키게 한다.


- name: Download thin-backup source
git:
repo: git@github.com:uj/config.git
dest: "{{program_path}}/config"
force: yes
clone: yes
accept_hostkey: yes
key_file: /home/www/.ssh/github_rsa


Posted by 김용환 '김용환'

댓글을 달아 주세요

ansible jenkins 레시피를 추가할 때 가장 애먹은 부분이 proxy 부분이었다. 


tasks/main.xml 파일 

- name: Install jenkins plugins.
jenkins_plugin:
owner: "{{default_user}}"
group: "{{default_group}}"
jenkins_home: "{{ jenkins_home }}"
name: "{{ item.key }}"
version: "{{ item.value.version }}"
state: latest
timeout: 10
environment:
no_proxy: "localhost"
http_proxy: "{{proxy_env.http_proxy}}"
https_proxy: "{{proxy_env.http_proxy}}"
with_dict: "{{ plugins }}"

가장 주의할 점은 바로 no_proxy:localhost이다.



vars/main.xml 파일

---
plugins:
git:
version: 3.9.1
ace-editor:
version: 1.1
scm-sync-configuration:
version: 0.0.10
workflow-job:
version: 2.24

새로 설치할 때는 형상 관리 차원에서 이 방식 또는 jenkins docker 방식을 사용하는 것이 좋다.


그러나..

기존 (legacy) 젠킨스에 playbook이 없어서 동일하게  플러그인 이름과 버전을 맞춰놔도 플러그인 간의 dependecy가 깨지는 경우가 많다. 

따라서 플러그인 설치는 따로 playbook을 설치하기보다는 기존 plugins 파일 들을 압축 저장해서 장애에 대비하는 것이 좋다. 시간을 엄청 빨리 아낄 수 있다. 따로 ftp 서버에 올려두고 재설치 레시피(플레이북)에서 사용하도록 한다.

Posted by 김용환 '김용환'

댓글을 달아 주세요


jenkins에서 아래와 같은 Exception이 발생했다.


sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

PKIX path building failed 




원인은 http 사이트에서 https 로 접속하려 할 때 자바에서 발생하는 에러이다. 이를 간단히 해결하려면


젠킨스 관리 -> Configure Global Security -> Plugin Manager -> Use browser for metadata download 를 체크 on한다.


앤서블을 사용해 자동화하는 경우라면 다음 코드를 실행한다. https가 아닌 http로 변경하는 것이다.


- name: Change Update-Center protocol - "{{ jenkins_home }}/hudson.model.UpdateCenter.xml"

  replace:

    path: "{{ jenkins_home }}/hudson.model.UpdateCenter.xml"

    regexp: 'https://updates.jenkins.io/update-center.json'

    replace: 'http://updates.jenkins.io/update-center.json'


Posted by 김용환 '김용환'

댓글을 달아 주세요