반응형

ㅁ when_dict

- name: dict example

  hosts: localhost

  vars:

    users:

      alice:

        name: Alice

        phone: 123-456

      bob:

        name: bob name

        phone: 678-910


 

  tasks:

    - name: user.key is value

      debug:

       msg: " {{ item.key }} is {{item.value.name}}  {{item.value.phone}} "

      with_dict: "{{ users }}"

 


- dictionary : key:value.형태의 자료

 users (dictionary) 라면,   

alice(key) :          name: Alice (value)  phone: 123-456(value) 

bob(key)  :          name: bob name(value) phone: 678-910(value)


- 실행결과

TASK [user.key is value] ***************************************************************************************************************************


MSG:


 bob is bob name  678-910 


MSG:


 alice is Alice  123-456 


반응형

'프로그래밍 > ansbie_YAML' 카테고리의 다른 글

ansible 조건문 (when)  (0) 2018.11.28
진자2(jinja2) 변수 확장  (0) 2018.11.28
register 예제  (0) 2018.11.27
반응형

(참조: - https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement)


ㅁWhen조건

 - 조건이 참(true) 일경우 task 실행, 거짓(false)일 경우 task 미실행


ㅁ when활용

- task요약 : 


- name: /etc/passwd | use cut command

 ▶ cut --delimiter=':' --fields=1 /etc/passwd 수행하고, register를 이용해 usernames_result 변수 선언



- name: command set_fact

▶ set_fact에  username_list == usernames_result.stdout_lines 선언

 

- name: result refered to username_list

▶ 조건문 when 실행,   'testuser1'이  username_list에 있는지 in 연산자를 사용해 확인


---

- name: command result 

  hosts: localhost

  tasks:


   - name: /etc/passwd | use cut command

     command: cut --delimiter=':' --fields=1 /etc/passwd

     register: usernames_result


   - name: username_result debug

     debug:

        var: usernames_result


   - name: command set_fact

     set_fact:

       username_list: "{{ usernames_result.stdout_lines }}"


   - name: result refered to username_list

     debug:

       msg: this server exists test1

     when: "'testuser1' in username_list"



- 결과 (when이  true일 경우)


[root@system1 yaml]# ansible-playbook get-users.yml


PLAY [command result] ************************************************************************************


TASK [Gathering Facts] ***********************************************************************************

ok: [localhost]


TASK [/etc/passwd | use cut command] *********************************************************************

changed: [localhost]


TASK [username_result debug] *****************************************************************************

-- 생략 


TASK [command set_fact] **********************************************************************************

ok: [localhost]


TASK [result refered to username_list] *******************************************************************

ok: [localhost] => {}


MSG:


this server exists test1


PLAY RECAP ***********************************************************************************************

localhost                  : ok=5    changed=1    unreachable=0    failed=0   




- 결과2 (when이 false, 즉 testuser1이 username_list 內 없을 경우)

 ▶ when이 있는 task는  skipping이 출력됨

  . skipping : when이 지정한 조건을 만족하지 않았을때 하는 동작 

 

[root@system1 yaml]# ansible-playbook get-users.yml


PLAY [command result] ************************************************************************************


TASK [Gathering Facts] ***********************************************************************************

ok: [localhost]


TASK [/etc/passwd | use cut command] *********************************************************************

changed: [localhost]


TASK [username_result debug] *****************************************************************************

-- 생략 

TASK [command set_fact] **********************************************************************************

ok: [localhost]


TASK [result refered to username_list] *******************************************************************

skipping: [localhost]


PLAY RECAP ***********************************************************************************************

localhost                  : ok=4    changed=1    unreachable=0    failed=0   



반응형

'프로그래밍 > ansbie_YAML' 카테고리의 다른 글

when-dict 예제  (0) 2018.12.04
진자2(jinja2) 변수 확장  (0) 2018.11.28
register 예제  (0) 2018.11.27
반응형

ㅁ 진자2(jinja2)?

  - 진자2 템플릿 엔진으로 앤서블의 변수 확장으로 주로 씀


ㅁ 진자2 변수 활용방법


 - 진자2는 반드시 {{,}}로 묶어서 사용하며,  변수를 활용할시에는 " "로 묶어서 사용해야함

 - playbook 예제


---

- name: vars_ jinja

  hosts: localhost

  vars:

    my_var: song

  tasks:

    - name: my_var debug

      debug:

        msg: " vars values is {{ my_var }}"


           ---> 진자2 라인은  "{{ 변수 }}"   로 묶었다




  


 - playbook result

[root@system1 yaml]# ansible-playbook debug-var.yml


PLAY [vars_ jinja] ***************************************************************************************


TASK [Gathering Facts] ***********************************************************************************

ok: [localhost]


TASK [my_var debug] **************************************************************************************

ok: [localhost] => {}


MSG:


 vars values is song



PLAY RECAP ***********************************************************************************************

localhost                  : ok=2    changed=0    unreachable=0    failed=0   



반응형

'프로그래밍 > ansbie_YAML' 카테고리의 다른 글

when-dict 예제  (0) 2018.12.04
ansible 조건문 (when)  (0) 2018.11.28
register 예제  (0) 2018.11.27
반응형

( 참조 : https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#register-variables)



- ansible register:  플레이북에서의 결과를 변수로 정하기 위해 사용되는 모듈




ㅁ Playbook 예제

- /home하위에 디렉토리 변수 저장

1) yaml

- name: registered variable usage as a loop list hosts: all tasks: - name: retrieve the list of home directories command: ls /home register: home_dirs - name: debug ls /home debug: var: home_dirs


2) 결과

stdout_lines를 확인가능


PLAY [registered variable usage as a loop list] ****************************************************************************************************************************************************************************************************


TASK [Gathering Facts] ***************************************************************************************************************************

ok: [localhost]


TASK [retrieve the list of home directories] ***************************************************************************************************************************

changed: [localhost]


TASK [debug  ls /home] ***************************************************************************************************************************

ok: [localhost] => {

    "home_dirs": {

        "changed": true, 

        "cmd": [

            "ls", 

            "/home"

        ], 

        "delta": "0:00:00.008900", 

        "end": "2018-11-26 23:07:41.673464", 

        "failed": false, 

        "rc": 0, 

        "start": "2018-11-26 23:07:41.664564", 

        "stderr": "", 

        "stderr_lines": [], 

        "stdout": "david\njohn\nlost+found\npeter\nsarah\ntestuser1\ntestuser2", 

        "stdout_lines": [

            "david", 

            "john", 

            "lost+found", 

            "peter", 

            "sarah", 

            "testuser1", 

            "testuser2"

        ]

    }

}



반응형

'프로그래밍 > ansbie_YAML' 카테고리의 다른 글

when-dict 예제  (0) 2018.12.04
ansible 조건문 (when)  (0) 2018.11.28
진자2(jinja2) 변수 확장  (0) 2018.11.28
반응형

ㅁ cut 명령예시

 

[root@system1 ~]# cut --delimiter=':' --fields=1 /etc/passwd| head -5

root

bin

daemon

adm

lp

 

- delimiter : 구분자

- fields : 출력할 필드

 
 

 

반응형

'프로그래밍 > 쉘프로그래밍' 카테고리의 다른 글

파일명 변환 쉘  (0) 2019.03.07
일반변수$, $(), ${} 의 이해  (0) 2017.12.23
인자값이해, 인자값 쉘프로그램  (0) 2017.12.21
반응형

쉘프로그램중 많이쓰는 변수


1)일반변수

변수=값  선언

 ex) name=song


[root@system1 ~]# name=song

[root@system1 ~]# echo $name

song



2) $()   
$() =  command substitution  = 쉬운말로  명령어 결과값


ex1) 

name=song 변수로 선언하였을때

[root@system1 test]# echo $name              #  echo $name의 결과값은  song 

song                                                    


[root@system1 test]# touch $(echo $name)      

                                                           # touch 명령으로 파일을 만든다. 파일명은 echo $name결과값인 song

[root@system1 test]# ls -l

합계 16

drwx------. 2 root root 16384 12월 19 14:55 lost+found

-rw-r--r--. 1 root root     0 12월 23 15:51 song       #  $echo($name)   의 결과값인   song이 생성됨


ex2) 
date명령을 이용하여, 현재날짜의 파일 생성

[root@system1 test]# date +%y%m%d                 #date +%y%m%d 를 명령 실행결과, 년/월/일 결과가 출력됨
171223


[root@system1 test]# touch $(date +%y%m%d)     #   $(명령) 은  변수=명령결과  라고했으니,  
          date +%y%m%d명령결과   touch 명령결과(171223) 수행
[root@system1 test]# ls
171223  lost+found  song
[root@system1 test]# ll
합계 16
-rw-r--r--. 1 root root     0 12월 23 15:56 171223      #  touch $(date +%y%m%d)의 결과로 파일이 생성됨


3) ${ }

${} =  parameter substitution  = 쉬운말로  변수대체자

변수와 쓰임새는 똑같다, "변수${변수} + 상수" 형태를 출력하고자 주로 쓴다

[root@system1 test]# test=abcdef                

[root@system1 test]# echo $test                            #$test는   = abcdef  라는 변수다

abcdef


abcdefghijk   연달아 쓰고 싶다면


[root@system1 test]# echo $testghijk               #testghijk라는 변수가 없기때문에, 출력이 없다.
- 아무것도 출력하지 않음.     

${test}를 사용하면 결과는 달라진다


[root@system1 test]# echo ${test}ghijk                   

abcdefghijk


즉, test변수값 ( ${test} ) + 상수 ghijk가 합쳐딘 결과다


반응형

'프로그래밍 > 쉘프로그래밍' 카테고리의 다른 글

파일명 변환 쉘  (0) 2019.03.07
cut 명령 예제  (0) 2018.11.26
인자값이해, 인자값 쉘프로그램  (0) 2017.12.21
반응형

-인자값, argument,, 

:위 용어 용어를 정의하는것 보단, 아래 예시를 보면 한번에 이해할수 있다.


-예제


sh /tmp/test.sh  AAA BBB CCC

-> test.sh 쉘을 실행시킬때,  AAA ,BBB, CCC  명령줄에 부가적으로 붙어지는 것들이 인자값이라고 이해하면 편함


sh /tmp/test.sh  AAA BBB CCC


AAA BBB CCC 3개가 차례대로 이어진다.  이를 인자 변수로 얘기하면


$숫자 = 인자를 차례대 즉,

$1 = AAA , $2 = BBB  , $3 = CCC  된다.


$#  (인자의 총 갯수) 

위는 sh /tmp/test.sh  AAA BBB CCC   와 같이 인자는 총 3개




-인자값을 테스트해본 Shell Program

#!/bin/bash


if [ "$#" -eq "0" ] ##  IF[ $# -eq 0 ] $#로 인자값의 총 갯수가  0보다 크냐??

then ##     yes일 경우( 인자값 = 0)

echo "Usage : /tmp/song argument"

else if [ "$#" -gt "2" ] ##   no, 인자값이 (2개 이상일경우)

then

echo "Good your argument count is " "$#" ##   인자값 count 하여 표시


fi

if [ "$#" -lt "3" ] ##   IF[ $# -eq 0 ]   no, 인자값이 (3개 보다 작은경우)

then

echo "argument count is " "$#" "AND"  "$1"   " "  "$2"     # d인자값 count표시 ,   각 인자 정보 ($1, $2)   

fi        인자값이 3보다작으니 $1, $2 만 표시한다.


fi



ㅁ테스트결과


-인자값이 2이상인경우 


[root@station tmp]# sh /tmp/song.sh ddd dddd sdfsdf

Good your argument count is  3



else if [ "$#" -gt "2"]  구문이 실행되어 , echo "Good your argument count is " "$#" (인자갯수만 표시)



-인자값이 3개  미만, 즉 2개

[root@station tmp]# sh /tmp/song.sh ddd dddd

Good your argument count is  2 AND ddd ,  dddd

if [ "$#" -lt "3" ] 실행되어, echo "argument count is " "$#" "AND"  "$1"   " "  "$2"    (인자값 ddd,  dddd를 출력)



반응형

'프로그래밍 > 쉘프로그래밍' 카테고리의 다른 글

파일명 변환 쉘  (0) 2019.03.07
cut 명령 예제  (0) 2018.11.26
일반변수$, $(), ${} 의 이해  (0) 2017.12.23

+ Recent posts