ansible基礎學習,經常使用模塊概述

ansible基礎nginx

注:-a參數後的命令用單引號,單引號,單引號;雙引號有可能會出問題,特別是在user模塊;web

配置文件:vim /etc/ansible/hostsshell

clipboard.png

clipboard.png

clipboard.png

vim /.ssh/authorized_keysvim

clipboard.png

語法格式:bash

ansible  匹配模式   -m   模塊    -a    ‘須要執行的內容’架構

          釋:匹配模式:那些機器生效  (能夠是某一臺,或某一組,或all)默認模塊爲command   執行常規的shell命令ssh

26856E1A38FF467781665D8689616C45.jpg

一:測試目標主機是否在線:ping模塊ide

主機若是在線,則回覆pong測試


測試主機是否在線ui

[root@zhaixiaona ~]# ansible zhaixiaona -m ping

10.18.42.32 | SUCCESS => {

   "changed": false,

   "ping": "pong"

}

10.18.42.31 | SUCCESS => {

   "changed": false,

   "ping": "pong"

}

二:command模塊和shell

做用:用於在各被管理節點運行指定的命令

shell和command的區別:shell模塊能夠特殊字符,而command是不支持


顯示各節點的日期

[root@zhaixiaona ~]# ansible zhaixiaona -m command -a 'date'

10.18.42.31 | SUCCESS | rc=0 >>

2018年 04月 11日 星期三 16:17:01 CST

10.18.42.32 | SUCCESS | rc=0 >>

2018年 04月 11日 星期三 16:17:02 CST

刪除各節點的/tmp/test目錄

[root@zhaixiaona tmp]# ansible zhaixiaona -m command -a 'mkdir -p /date/test'

[WARNING]: Consider using the file module with state=directory rather than running mkdir.  If you

need to use command because file is insufficient you can add warn=False to this command task or

set command_warnings=False in ansible.cfg to get rid of this message.

10.18.42.31 | SUCCESS | rc=0 >>

10.18.42.32 | SUCCESS | rc=0 >>

 [root@zhaixiaona ~]# ansible zhaixiaona -m command -a 'ls /date/'

10.18.42.32 | SUCCESS | rc=0 >>

test

10.18.42.31 | SUCCESS | rc=0 >>

home

test

ansible zhaixiaona -m command -a 'rm -rf /date/test'

[WARNING]: Consider using the file module with state=absent rather than running rm.  If you need

to use command because file is insufficient you can add warn=False to this command task or set

command_warnings=False in ansible.cfg to get rid of this message.

10.18.42.31 | SUCCESS | rc=0 >>

10.18.42.32 | SUCCESS | rc=0 >>

[root@zhaixiaona ~]# ansible zhaixiaona -m command -a 'ls /date/'

10.18.42.32 | SUCCESS | rc=0 >>

10.18.42.31 | SUCCESS | rc=0 >>

home

三:user模塊:管理用戶的模塊

參數詳解:

    name:指定用戶名

    password:設定用戶密碼,password參數須要接受md5加密後的值

    state:用戶狀態,默認爲present

        present:表示添加用戶

        absent:表示刪除用戶

    update_password:修改用戶密碼

        always:新密碼和舊密碼不一樣時進行修改

        on_create:爲新建立的用戶指定密碼

    createhome:建立家目錄

        yes:默認項,即建立用戶默認是有家目錄的

        no:建立用戶時不建立家目錄

    remove:

        yes:刪除用戶家目錄,須要指定此參數

        no:默認項,刪除用戶時默認不刪除用戶的家目錄

    system:

        yes:默認建立爲普通用戶,而非系統用戶

    若是不指定默認生成的選項有:

        home:建立家目錄

        shell:建立默認的shell爲/bin/bash

        system:默認建立爲普通用戶,而非系統用戶,指定是用yes

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

查看幫助

[root@zhaixiaona ~]# ansible-doc -s user

user模塊中的password是須要通過md5加密的

[root@zhaixiaona ~]# echo 123456 | openssl passwd -1 -stdin

$1$AQ224QR7$4oDArOWZbeBZ250wtNw57.

增長一個用戶

[root@zhaixiaona ~]# ansible zhaixiaona -m user -a 'name=xiaoxiao system=yes password=$1$AQ224QR7$4oDArOWZbeBZ250wtNw57.state=present'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "comment": "",

   "create_home": true,

   "group": 993,

   "home": "/home/xiaoxiao",

   "name": "xiaoxiao",

   "password": "NOT_LOGGING_PASSWORD",

   "shell": "/bin/bash",

   "state": "present",

   "system": true,

   "uid": 995

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "comment": "",

   "create_home": true,

   "group": 993,

   "home": "/home/xiaoxiao",

   "name": "xiaoxiao",

   "password": "NOT_LOGGING_PASSWORD",

   "shell": "/bin/bash",

   "state": "present",

   "system": true,

   "uid": 995

}

刪除一個用戶

[root@zhaixiaona ~]# ansible zhaixiaona -m user -a 'name=xiaoxiao remove=yes state=absent'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "force": false,

   "name": "xiaoxiao",

   "remove": true,

   "state": "absent",

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "force": false,

   "name": "xiaoxiao",

   "remove": true,

   "state": "absent",

}

更新用戶的密碼

[root@zhaixiaona ~]# echo 654321 | openssl passwd -1 -stdin

$1$/6uKHyyy$bqxg3.gRZuixBQPDQe2ce0

[root@zhaixiaona ~]# ansible zhaixiaona -m user -a 'name=xiaoxiao update_password=always password=$1$/6uKHyyy$bqxg3.gRZuixBQPDQe2ce0'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "comment": "",

   "create_home": true,

   "group": 1002,

   "home": "/home/xiaoxiao",

   "name": "xiaoxiao",

   "password": "NOT_LOGGING_PASSWORD",

   "shell": "/bin/bash",

   "state": "present",

   "system": false,

   "uid": 1002

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "comment": "",

   "create_home": true,

   "group": 1002,

   "home": "/home/xiaoxiao",

   "name": "xiaoxiao",

   "password": "NOT_LOGGING_PASSWORD",

   "shell": "/bin/bash",

   "state": "present",

   "system": false,

   "uid": 1002

}

四:任務計劃模塊:cron

獲取幫助:ansibe-doc -s cron

參數詳解:

    state:

        present:建立任務

        absent:刪除任務

    backup:對遠程主機上的原任務計劃內容修改以前作備份

    job:要執行的任務

    name:該任務的描述(必須項)

    user:以哪一個用戶的身份運行

    minute:分鐘(0-59,*,*/2,……),不寫默認爲*

    hour:小時(0-23,*,*/2,……),不寫默認爲*

    day:日(1-31,*,*/2,……),不寫默認爲*

    month:月(1-12,*,*/2,……),不寫默認爲*

    weekday:周(0-7,*,……),不寫默認爲*


每隔10分鐘同步一下時間

[root@zhaixiaona ~]# ansible zhaixiaona -m cron -a 'name="sync time from ntpserver" minute=*/10 job="/usr/sbin/ntpdate 3.cn.pool.ntp.org"'

10.18.42.31 | SUCCESS => {

   "changed": false,

   "envs": [],

   "jobs": [

       "sync time from ",

       "sync time from ntpserver"

   ]

}

10.18.42.32 | SUCCESS => {

   "changed": false,

   "envs": [],

   "jobs": [

       "diyici",

       "sync time from ",

       "sync time from ntpserver"

   ]

}

五:遠程複製備份模塊:copy

獲取幫助:ansible-doc -s copy

參數詳解:  

    src:指定源文件路徑,能夠是相對路徑,也能夠是絕對路徑,能夠是目錄(並不是是必須的,可使用content,直接生成文件內容)

    dest=:指定目標文件路徑,只能是絕對路徑,若是src是目錄,此項必須是目錄

    owner:指定屬主

    group:指定屬組

    mode:指定權限,能夠以數字指定好比0644

    content:代替src,直接往dest文件中寫內容,能夠引用變量,也能夠直接使用inventory中的主機變量

    backup:在覆蓋以前將原文件備份,備份文件包含時間信息。有兩個選項:yes|no

    force:

        yes:默認項,若是目標主機包含該文件,但內容不一樣,則強制覆蓋

        no:則只有當目標主機的目標位置不存在該文件時,才複製

    directory_mode:遞歸的設定目錄的權限,默認爲系統默認權限

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

複製本地文件到遠程主機並對原文件進行備份

[root@zhaixiaona ~]# ansible zhaixiaona -m copy -a 'src=/date/xiaoxiao.txt dest=/date/ backup=yes'

10.18.42.31 | SUCCESS => {

   "changed": false,

   "dest": "/date/",

   "src": "/date/xiaoxiao.txt"

}

10.18.42.32 | SUCCESS => {

   "changed": false,

   "dest": "/date/",

   "src": "/date/xiaoxiao.txt"

}

向遠程主機的文件中寫內容,會把原內容覆蓋掉

[root@zhaixiaona ~]# ansible zhaixiaona -m copy -a 'content="\nMy age is 26" dest=/date/xiaoxiao.txt'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "checksum": "e1cbbec8927a295a767fa44e91dea6eeafa5a4f4",

   "dest": "/date/xiaoxiao.txt",

   "gid": 0,

   "group": "root",

   "md5sum": "55ec30ce5102aa8716b75ab5e98163a7",

   "mode": "0644",

   "owner": "root",

   "size": 13,

   "src": "/root/.ansible/tmp/ansible-tmp-1523440289.04-148584715881982/source",

   "state": "file",

   "uid": 0

}

10.18.42.32 | SUCCESS => {

   "changed": false,

   "checksum": "e1cbbec8927a295a767fa44e91dea6eeafa5a4f4",

   "dest": "/date/xiaoxiao.txt",

   "gid": 0,

   "group": "root",

   "mode": "0644",

   "owner": "root",

   "path": "/date/xiaoxiao.txt",

   "secontext": "system_u:object_r:default_t:s0",

   "size": 13,

   "state": "file",

   "uid": 0

}

六:對遠程文件管理的模塊:file

獲取幫助:ansible-doc -s file

參數詳解:  

    owner:修改屬主

    group:修改屬組

    mode:修改權限

    path=:要修改文件的路徑

    recurse:遞歸的設置文件的屬性,只對目錄有效

        yes:表示使用遞歸設置

    state:

        touch:建立一個新的空文件

        directory:建立一個新的目錄,當目錄存在時不會進行修改

        link:建立軟鏈接,結果src一塊兒使用此選項才生效

        hard:建立硬鏈接

        absent:刪除文件,目錄,軟鏈接

    src:當state=link時,要被鏈接文件的源路徑

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

新建一個文件

[root@zhaixiaona ~]# ansible zhaixiaona -m file -a 'path=/date/xiaoxiao.txt state=touch'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "dest": "/date/xiaoxiao.txt",

   "gid": 0,

   "group": "root",

   "mode": "0644",

   "owner": "root",

   "size": 0,

   "state": "file",

   "uid": 0

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "dest": "/date/xiaoxiao.txt",

   "gid": 0,

   "group": "root",

   "mode": "0644",

   "owner": "root",

   "secontext": "unconfined_u:object_r:default_t:s0",

   "size": 0,

   "state": "file",

   "uid": 0

}

新建一個目錄

[root@zhaixiaona ~]# ansible zhaixiaona -m file -a 'path=/date/xiaoxiao state=directory'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "gid": 0,

   "group": "root",

   "mode": "0755",

   "owner": "root",

   "path": "/date/xiaoxiao",

   "size": 6,

   "state": "directory",

   "uid": 0

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "gid": 0,

   "group": "root",

   "mode": "0755",

   "owner": "root",

   "path": "/date/xiaoxiao",

   "secontext": "unconfined_u:object_r:default_t:s0",

   "size": 6,

   "state": "directory",

   "uid": 0

}

刪除文件或者目錄

[root@zhaixiaona ~]# ansible zhaixiaona -m file -a 'path=/date/xiaoxiao.txt state=absent'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "path": "/date/xiaoxiao.txt",

   "state": "absent"

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "path": "/date/xiaoxiao.txt",

   "state": "absent"

}

遞歸設置文件的屬主或者屬組

[root@zhaixiaona ~]# ansible zhaixiaona -m file -a 'path=/date/xiaoxiao owner=root group=root recurse=yes'

10.18.42.31 | SUCCESS => {

   "changed": false,

   "gid": 0,

   "group": "root",

   "mode": "0755",

   "owner": "root",

   "path": "/date/xiaoxiao",

   "size": 6,

   "state": "directory",

   "uid": 0

}

10.18.42.32 | SUCCESS => {

   "changed": false,

   "gid": 0,

   "group": "root",

   "mode": "0755",

   "owner": "root",

   "path": "/date/xiaoxiao",

   "secontext": "unconfined_u:object_r:default_t:s0",

   "size": 6,

   "state": "directory",

   "uid": 0

}

爲文件設置軟鏈接

[root@zhaixiaona ~]# ansible zhaixiaona -m file -a 'src=/date/xiaoxiao state=link path=/date/zhaixiaoxiao'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "dest": "/date/zhaixiaoxiao",

   "gid": 0,

   "group": "root",

   "mode": "0777",

   "owner": "root",

   "size": 14,

   "src": "/date/xiaoxiao",

   "state": "link",

   "uid": 0

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "dest": "/date/zhaixiaoxiao",

   "gid": 0,

   "group": "root",

   "mode": "0777",

   "owner": "root",

   "secontext": "unconfined_u:object_r:default_t:s0",

   "size": 14,

   "src": "/date/xiaoxiao",

   "state": "link",

   "uid": 0

}

F47F63D012D441AAA24FA26279450B2A.jpg

七:在遠程主機執行本地腳本:script

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[root@zhaixiaona date]# ansible zhaixiaona -m script -a '/date/a.sh'

10.18.42.31 | SUCCESS => {

   "changed": true,

   "rc": 0,

   "stderr": "Shared connection to 10.18.42.31 closed.\r\n",

   "stdout": "HALLO!\r\n",

   "stdout_lines": [

       "HALLO!"

   ]

}

10.18.42.32 | SUCCESS => {

   "changed": true,

   "rc": 0,

   "stderr": "Shared connection to 10.18.42.32 closed.\r\n",

   "stdout": "HALLO!\r\n",

   "stdout_lines": [

       "HALLO!"

   ]

}

八:收集遠程主機的信息:setup

收集可用的facts,收集每一個節點的相關信息:架構信息,IP,時間,域名,網卡,MAC,主機名,CPU等信息。

這些收集的信息,能夠做爲變量。

1

[root@zhaixiaona ~]# ansible zhaixiaona -m setup

九:安裝模塊:yum

模塊參數詳解:    

    name:表示要安裝軟件包的名字,默認最新的程序包,指明要安裝的程序包,能夠帶上版本號

    state:表示是安裝還卸載

        present:默認的,表示爲安裝

        lastest:安裝爲最新的版本

        absent:表示刪除

十:服務模塊:service

模塊參數詳解:  

    enabled:表示設置服務開機是否啓動,取值爲true或者false;enabled=yes

    name=:表示要控制哪個服務

    state:

        started:表示如今就啓動此服務

        stopped:表示如今關閉此服務

        restarted:表示重啓此服務

    sleep:若是執行了restarted,在stop和start之間沉睡幾秒

    runlevel:定義在哪些級別能夠自啓動

    arguments:表示向命令行傳遞的參數

1

[root@zhaixiaona ~]# ansible zhaixiaona -m service -a 'enabled=on name=httpd state=started'

十一:文件編輯模塊:lineinfile

模塊參數詳解:

    path:指定要修改的配置文件

    regexp:匹配要修改的內容

    line:要增長或者修改的內容

    state:

        absent:表示刪除,當匹配到時進行刪除

        present:表示增長,當匹配到時進行修改,當沒有匹配到時在最後增長一行,默認爲此項

    backrefs:

        no:表示若是沒有匹配到,則增長line;若是匹配成功,則替換line;

        yes:表示若是沒有匹配到,則不變line;若是匹配成功,則替換line;

    backup:  

        no:表示若是沒有匹配到,則增長line;若是匹配成功,則替換line;不備份原文件

        yes:表示若是沒有匹配到,則增長line;若是匹配成功,則替換line;備份原文件

    insertafter(匹配的是此行):

        在匹配到的行以後添加一行

    insertbefore(匹配的是此行):

        在匹配到的行以前添加一行

vim  web.yaml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

修改nginx.conf測試:

[root@zhaixiaona ~]# cat web.yaml

---

- hosts: teacher

 remote_user: root

 tasks:

 - name: install nginx package

   yum: name=nginx state=latest

 - name: create nginx log directory

   file: path=/data/nginx_log state=directory recurse=yes

 - name: rm /var/log/nginx

   file: path=/var/log/nginx state=absent

 - name: create soft link

   file: path=/var/log/nginx state=link src=/data/nginx_log

 - name: copy nginx configure file

   copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf backup=yes

   notify:

   - restart nginx

 - name: start nginx service

   service: name=nginx state=started enabled=1

 handlers:

 - name: restart nginx

   service: name=nginx state=restarted

注:經測試,當不添加backerfs: yes參數時,匹配到後也會進行替換,但當匹配到的內容不存在時,會在最後增長一行;因此當不增長backerfs參數時,要肯定匹配到的內容存在;

clipboard.png

替換存在的行:

1

#ansible oms -m lineinfile -a 'path=/etc/sudoers regexp="SYSTEM,SOFTWARE" line="STAPLES_ADMIN ALL=(ROOT) NOPASSWD:NETWORKING,LOCATE,STORAGE,DELEGATING,DRIVERS,SYSTEM,SOFTWARE,SERVICES,PROCESSES,FILE" backrefs=no'

匹配到的行後增長一行:

1

#ansible oms -m lineinfile -a 'dest=/etc/sudoers insertafter="Cmnd_Alias SYSTEM = /usr/sbin/reboot, /usr/sbin/halt, /usr/bin/ansible, /usr/bin/ssh" line="Cmnd_Alias FILE = /bin/mkdir,/bin/touch,/usr/bin/vim"'

刪除匹配到的行:

1

#ansible oms -m lineinfile -a 'path=/etc/sudoers state=absent regexp="PROCESSES,FILE"'

相關文章
相關標籤/搜索