ãã®æçš¿ã§ã¯ã SaltStackæ§æç®¡çã·ã¹ãã ãç¹ã«salt-sshã³ã³ããŒãã³ãã䜿çšãããã¹ã¿ãŒã¬ã¹ã¢ãŒãã§ã®ã¢ããªã±ãŒã·ã§ã³ã®äœ¿çšçµéšãå
±æããããšæããŸãã
å®éã salt-sshã¯Ansibleã·ã¹ãã ã®é¡äŒŒç©ã§ãã
salt-ssh '*-ec2.mydomain.com' test.ping
次ã®ãããã¯ã«ã€ããŠèª¬æããŸãã
- ãªãSaltStackã®äž»ãªæ©èœ
- åºæ¬çãªSaltStackã®æŠå¿µ
- Salt-sshã®ã€ã³ã¹ããŒã«ãšäœ¿çš
ãªãSaltStackã®äž»ãªæ©èœ
æ°å¹ŽåãããããïŒè€æ°ã®ç°å¢ã100以äžã®ããŒãïŒã§ãã£ã±ãã ã£ããšãã«ãæ°ãããããžã§ã¯ãã«æ°ããæ§æç®¡çã·ã¹ãã ãéžæãããšãã ãã¹ã¿ãŒã¬ã¹æäœãéèŠãªèŠä»¶ã§ããã ãããã ãã¹ã¿ãŒã¹ã¬ãŒãã¢ãŒãã®åäœã®å¯èœæ§ãç¶æããããšèããŸããã å
å®ããåªããããã¥ã¡ã³ããšæè»æ§ãå¿
èŠã§ããã ã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ã管çã§ããããã«ãªãããã£ãã
ãŸããããŸããŸãªç°å¢ãç°¡åã«å
±åã§ããã·ã¹ãã ãæ§ç¯ããããšèããŸããã ããã¯ãã¹ãŠãsalt-sshã䜿çšããŠè¡ãããŸããã
Salt-sshã¯SaltStackã®ã³ã³ããŒãã³ãã§ããAnsibleãšåæ§ã«ãsshã䜿çšããŠãªã¢ãŒããã·ã³ã«æ¥ç¶ãããªã¢ãŒããã·ã³ããã®äºåèšå®ã¯äžèŠã§ãã ãšãŒãžã§ã³ããªãã çŽç²ãªsshïŒ
ãã¡ãããã·ã¹ãã ãéžæãããšãã«ã¯ãAnsibleãæ€èšããŸããã ãããããã®åŸãã¹ã±ãŒã«ã¯SaltStackã«åŸããã
Ansibleãšã¯ç°ãªããSaltStackã¯ãã³ãã¬ãŒãã®åŠçãšããžãã¯ã®æ§ç¯ã®äž¡æ¹ã«Jinja2ã䜿çšããŸãã
ããã«ããã®ããžãã¯ã¯ã»ãšãã©ãã¹ãŠã®æ¹æ³ã§æ§ç¯ã§ããŸãã äžæ¹ã§ãããã¯è¯ãé¢ãšæªãé¢ã®äž¡æ¹ã§ãã ãããã æè»æ§ãæäŸããŸãã ããããæªãããªããªã å®è£
ã«å¯Ÿããæšæºçãªæ¹æ³ãšã¢ãããŒãã¯ãããŸããã ãã®ç¹ã§ãSaltStackã¯ãã¶ã€ããŒã®ããã§ãã
ãŸãããã³ãã¬ãŒããšããžãã¯ã®ã¬ã³ããªã³ã°ã¯ãèµ·åæ®µéã§çºçããŸãã çµæã®ãã³ãã¬ãŒããèšå®ãããã³æç€ºã®ããã±ãŒãžããªã¢ãŒããµãŒããŒã«ã³ããŒãããå®è¡ãããŸãã å®è¡ãå®äºãããšãsalt-sshã¯äœãè¡ããããšã©ãŒãçºçããå Žåã«ãšã©ãŒã®åå ãã³ã³ãœãŒã«ã«å ±åããŸãã ããã§ãansibleãšã®éãã¯éåžžã«é¡èã§ãã åŸè
ã¯ãã·ã§ã«ã¹ã¯ãªããã¢ãŒãã§ã¿ã¹ã¯\ãã¬ã€ããã¯ãé çªã«å®è¡ããŸãã ansibleã¹ã¯ãªããã®é²è¡ã芳å¯ããæ¹ãæ¥œããããšãé ããŸãããããã¹ãã®æ°ãæ°åãè¶
ãããšãããããã¹ãŠãåŸã
ã«èæ¯ã«æ¶ããŠãããŸãã ãŸããansibleãšæ¯èŒããŠãSaltStackã¯æœè±¡åã®ã¬ãã«ãé«ããªã£ãŠããŸãã
å¯èœæ§ãšããŠã¯ãansibleãšsalt-sshã®äž¡æ¹ã2ã€ã®éåžžã«è峿·±ãããŒã«ã§ãããããããã«é·æãšçæããããŸãã
åºæ¬çãªSaltStackã®æŠå¿µ
SaltStackã¯ãæ§æããã³ã€ã³ãã©ã¹ãã©ã¯ãã£ç®¡çã·ã¹ãã ã§ãã åã
ã®ãµãŒããŒã®ã¬ãã«ã§ããããŸããŸãªã¯ã©ãŠããã©ãããã©ãŒã ïŒ SaltCloud ïŒã§ãã ãªã¢ãŒãã³ãã³ãå®è¡ã·ã¹ãã ã§ããããŸãã Pythonã§æžãããŠããŸãã éåžžã«æ¥éã«çºå±ããŠããŸãã Salt-ApiãSalt-Syndic ïŒãã¹ã¿ãŒã®ãã¹ã¿ãŒãŸãã¯ãã¹ã¿ãŒãµãŒããŒã®éå±€ãæ§ç¯ã§ããã·ã¹ãã ãã€ãŸãã·ã³ãžã±ãŒãïŒãªã©ãããŸããŸãªã¢ãžã¥ãŒã«ãšæ©èœãåããŠããŸãã
ããã©ã«ãã§ã¯ãSaltStackã¯ãã¹ã¿ãŒã¹ã¬ãŒãã¢ãŒãã®åäœãæå³ããŸãã ããŒãéã®ã¡ãã»ãŒãžã³ã°ã¯ââã ZeroMQãããã³ã«ãä»ããŠè¡ãããŸãã MultiMasterèšå®ã䜿çšããŠæ°Žå¹³æ¹åã«ã¹ã±ãŒãªã³ã°ã§ããŸãã
ããããæè¯ã®éšåã¯ãSaltããšãŒãžã§ã³ãã¬ã¹ã¢ãŒãã§åäœã§ããããšã§ãã ç¶æ
ã®ããŒã«ã«èµ·åãŸãã¯ãã®ãããã¯ã®ããŒããŒã§ããsalt-sshã䜿çšããŠå®è£
ã§ãããã®ã
ãœã«ããã¹ã¿ãŒ -æ¥ç¶ããããšãŒãžã§ã³ãã®ç®¡çãè¡ããããã·ã³ã§å®è¡ãããããã»ã¹ã salt-sshã®å Žåãç¶æ
ãšæ±ã®ããŒã¿ãããããŒãããã¹ã¿ãŒãšåŒã¶ããšãã§ããŸã
ãœã«ããããªã³ -管çããããã·ã³äžã§å®è¡ãããããã»ã¹ãããªã㡠奎é·ã salt-sshãããªã³ã®å Žåãããã¯ä»»æã®ãªã¢ãŒããµãŒããŒã§ã
ç¶æ
-ã·ã¹ãã ã®ç¶æ
ã®å®£èšç衚çŸïŒansibleã®ãã¬ã€ããã¯ã®ã¢ããã°ïŒ
ç©ç© -ãªã¢ãŒããããªã³ã«é¢ããéçæ
å ±ïŒRAMãCPUãOSãªã©ïŒ
æ±-1ã€ä»¥äžã®ãããªã³ã®å€æ°
top.sls-å²ãåœãŠããããªã³ã«ç¶æ
ããŒã¿ãšãã©ãŒããŒã¿ãå²ãåœãŠãããžãã¯ãå®è£
ããäžå€®ãã¡ã€ã«
highstate-ãããªã³ã®ãã¹ãŠã®å®çŸ©æžã¿ç¶æ
ããŒã¿
SLS-ããã¯ãYAMLã䜿çšããSaltStackã®ãã©ãŒ\ç¶æ
ã®ãã¹ãŠã®èšå®ãã¡ã€ã«ã®ååã§ã
SaltStackã·ã¹ãã ã®æ¬ ç¹ã®1ã€ã¯ããšã³ããªãŒãããå€ãé«ãããšã§ãã æ¬¡ã«ããã®çŽ ââæŽãããã·ã¹ãã ãç°¡åã«äœ¿ãå§ããããã®äŸã瀺ããŸãã
Salt-sshã®ã€ã³ã¹ããŒã«ãšäœ¿çš
salt-sshã®ã€ã³ã¹ããŒã«ã¯ç°¡åã§ãã
ãµã€ãhttps://repo.saltstack.com/ã«ã¯ãå¿
èŠãªãã¹ãŠã®ãªããžããªãšãããããããŸããŸãªã·ã¹ãã ã«æ¥ç¶ããããã®æç€ºããããŸãã
ã€ã³ã¹ããŒã«ã«ã¯salt-sshã®ã¿ãå¿
èŠã§ãã
sudo apt-get install salt-ssh
ïŒäŸãšããŠDebã·ã¹ãã ã䜿çšïŒ
ãã¹ãç°å¢ãšVagrantã®æºå
salt-sshã®äœ¿çšãéå§ããã«ã¯ãã€ã³ã¹ããŒã«ããã ãã§ãã å°ãªããšããããŒã«ã«ãã·ã³ããŸãã¯ã¯ããã«èŠèŠçãªãªã¢ãŒããµãŒããŒãå¶åŸ¡ã§ããŸãã
ãã®äŸã§ã¯ããã¹ãã®ããã«Vagrantã䜿çšããŠäœæããã2ã€ã®ä»®æ³ãã·ã³ã䜿çšããŸãã ãã®ãã¡ã®1ã€ã«salt-sshèªäœãã€ã³ã¹ããŒã«ããããã1ã€ã¯ã¯ãªãŒã³ã«ãªããæåã®ãã·ã³ããæ¥ç¶ãããå
¬ééµãã«ãŠã³ãããŸããã
Vagrantfileèªäœãšå¿
èŠãªãœã«ãç¶æ
ã¯ããªããžããªhttps://github.com/skandyla/saltssh-introã«ã¢ããããŒããããŸã ã
Vagrantfile # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| # VM with salt-ssh config.vm.define :"saltsshbox" do |config| config.vm.box = "ubuntu/trusty64" config.vm.hostname = "saltsshbox" config.vm.network "private_network", ip: "192.168.33.70" config.vm.provider "virtualbox" do |vb| vb.memory = "512" vb.cpus = 2 end config.vm.synced_folder ".", "/srv" # Deploy vagrant insecure private key inside the VM config.vm.provision "file", source: "~/.vagrant.d/insecure_private_key", destination: "~/.ssh/id_rsa" # Install salt-ssh config.vm.provision "shell", inline: <<-SHELL wget -O - https://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add - sudo echo 'deb http://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest trusty main' > /etc/apt/sources.list.d/saltstack.list sudo apt-get update sudo apt-get install -y salt-ssh SHELL end # VM for testing config.vm.define :"testserver" do |config| config.vm.box = "ubuntu/trusty64" config.vm.hostname = "testserver" config.vm.network "private_network", ip: "192.168.33.75" config.vm.provider "virtualbox" do |vb| vb.memory = "512" end # Deploy vagrant public key config.vm.provision "shell", inline: <<-SHELL curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> ~/.ssh/authorized_keys2 2>/dev/null curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys2 2>/dev/null SHELL end end
èŽè¡ã¯Vagrantã«ç²ŸéããŠãããšæããŸããã念ã®ããïŒ Vagrantã¯ãéçºããã»ã¹ãç°¡çŽ åããŠåçŸå¯èœã«ããããã«èšèšãããä»®æ³åã·ã¹ãã ã®äžçš®ã®ãã¬ãŒã ã¯ãŒã¯ã§ãã ä»®æ³ãã·ã³ãèµ·åããã«ã¯ãVagrantãšVirtualboxãã€ã³ã¹ããŒã«ãããŠããå¿
èŠããããŸãã
次ã«ããªããžããªã®ã¯ããŒã³ãäœæããŸãã
git clone https://github.com/skandyla/saltssh-intro
ãã®äžã§Vagrantä»®æ³ãã·ã³ãåæåããŸãã
vagrant up
åŸè
ãèµ·åããåŸãsaltsshboxã«ç§»åããŸãã
vagrant ssh saltsshbox
以éã®ãã¹ãŠã®äœæ¥ã¯ããã®ä»®æ³ãã·ã³ããå®è¡ãããŸãã ããã©ã«ãã§ã¯ãSaltStackã¯ã«ãŒããšããŠåäœãããšæ³å®ããŠãããããããã«å®è¡ããŸãã
vagrant@saltsshbox:~$ sudo -i
å¡©åç°¿ãçè§£ãã
ã¿ãŒã²ãããã¹ãã¯/ etc / salt / rosterãã¡ã€ã«ã«ç»é²ãããŠããŸããããµãŒãããŒãã£ã®ãã¹ã¿ãŒãã¡ã€ã«ãæå®ã§ããŸãã ããæå³ã§ã¯ã ã€ã³ãã³ããªãã¡ã€ã«ãansibleã«ããšããããšãã§ããŸãã åç°¿ãã¡ã€ã«ã¯YAMLã§ãããããŸããŸãªãªãã·ã§ã³ããããŸãã 以äžã«ãåããã¹ããèšé²ããããã€ãã®æ¹æ³ã瀺ããŸãã
/ srv / saltstack / saltetc / roster_test testserver: host: 192.168.33.75 priv: /home/vagrant/.ssh/id_rsa thesametestserver: host: 192.168.33.75 user: vagrant sudo: True thesametestserver2: host: 192.168.33.75 user: vagrant passwd: vagrant sudo: True
次ã«ãåç°¿ã«æå®ãããŠãããã¹ãŠã®ãã¹ãã«å¯ŸããŠtest.ping
ã³ãã³ãã詊ããŠã¿ãŸãããã
root@saltsshbox:~
ã芧ã®ããã«ãsalt-sshã¯ãªã¢ãŒããµãŒããŒã«ã¢ã¯ã»ã¹ã§ããªãããšããããã«åªããããã«ããŒãå±éããããææ¡ããŸãããããã£ã³ã»ã«ããŸããã æ®ãã®2å°ã®ãµãŒããŒïŒå®éã«ã¯ã1ã€ã¯ç°ãªãååã§ïŒã¯è¯å®çã«å¿çããŸããã ããã¯ãsshããŒãå®çŸ©ãããŠããªãã«ãŒããšããŠå®è¡ããŠããããã«çºçããŸããã ãããã£ãŠã ssh-agentãä»ããŠããŒã远å ããã³ãã³ããå詊è¡ããã ãã§ãã
ç¹°ãè¿ããŸãïŒ root@saltsshbox:~# eval `ssh-agent`; ssh-add /home/vagrant/.ssh/id_rsa Agent pid 2846 Identity added: /home/vagrant/.ssh/id_rsa (/home/vagrant/.ssh/id_rsa) root@saltsshbox:~# salt-ssh -i --roster-file=/srv/saltstack/saltetc/roster_test '*' test.ping testserver: True thesametestserver: True thesametestserver2: True
ããã§ãã¹ãŠé 調ã§ãïŒ ããã«ãssh-agentãä»ããŠãã¹ã¯ãŒãä»ãã®ããŒãç°¡åã«è¿œå ã§ããŸãã ãã ããsaltãæäŸããããŒããããã€ããå Žåãããã©ã«ãã§ã¯æ¬¡ã®ããã«ãªããŸãïŒ /etc/salt/pki/master/ssh/salt-ssh.rsa
ããã§ã¯ããã¹ãã®ããã«ãé¢çœããã¥ã¢ã³ã¹ã瀺ãããã«æå³çã«å¥ã®åç°¿ãã¡ã€ã«ã䜿çšããŸããã ãããªãäœæ¥ã®ããã«ãå¿
èŠãªå ŽæïŒ / etc / salt / roster ïŒã®ã·ã³ããªãã¯ãªã³ã¯ãä»ããŠæ¢ã«ç€ºãããŠãããããåç°¿ãæå®ããå¿
èŠã¯ãããŸããã -iã¹ã€ããã¯ãæ°ãããã¹ãã§äœæ¥ãéå§ãããšãã«å¿
èŠã§ã;ããã¯ãåã«StrictHostKeyCheckingãçŠæ¢ããæ°ãããã¹ãããŒãåãå
¥ããããšãå¯èœã«ããŸãã ãããªãäœæ¥ã®ããã«ããããå¿
èŠãããŸããã
root@saltsshbox:~
ããã©ã«ãã§ãsaltã¯ããã§åç°¿ãèŠãããšã«æ³šæããŠãã ããïŒ / etc / salt /åç°¿ã§ã¯ãçŸåšå®çŸ©ãããŠãããã¹ãã¯1ã€ã ãã§ãã
ãªã¢ãŒãã³ãã³ãå®è¡
salt-sshãæèŒãããã·ã³ãåç°¿ã§æå®ããããã¹ããµãŒããŒãå®å
šã«èªèããŠããããšã確èªã§ããã®ã§ãã¢ãããã¯ã¹ã¿ã€ã«ã§äœæ¥ããŸãã
root@saltsshbox:~
cmd.runã¯åºæ¬çã«ã ansibleã®-a
ã¹ã€ããã®é¡äŒŒç©ã§ãã
çµã¿èŸŒã¿ã®ãœã«ãã¹ã¿ãã¯ã¢ãžã¥ãŒã«ã䜿çšããããšãã§ããŸããäŸïŒ
salt-ssh testserver service.get_enabled salt-ssh testserver pkg.install git salt-ssh testserver network.interfaces salt-ssh testserver disk.usage salt-ssh testserver sys.doc
æåŸã®ã³ãã³ãã¯ãã¢ãžã¥ãŒã«ã«é¢ããããã¥ã¡ã³ãããããŠæãéèŠãªããšã«ã¯ããããã®äœ¿çšäŸãçæããŸãã ããã«ã å©çšå¯èœãªSaltstackã¢ãžã¥ãŒã«ã®å®å
šãªãªã¹ããèŠãããšãã§ããŸã ã
å¡©ç²ãŸãã¯ã·ã¹ãã ã®äºå®
Grainsã¯ããªã¢ãŒãã·ã¹ãã ã«é¢ããäžé£ã®äºå®ãæç€ºãã匷åãªã¡ã«ããºã ã§ãã å°æ¥ãGrainsã«åºã¥ããŠãããŸããŸãªããžãã¯ãæ§ç¯ããããšãã§ããŸãã
ããããæåã«ããããã®äœ¿çšãéå§ããæ¹æ³ãèŠãŠã¿ãŸãããã
root@saltsshbox:~
ã³ãã³ãã®åºåã¯ããªãã³ã°ãããŸãã
çŽæ¥æå®ããããšã«ãããç®çã®Grainsãã©ã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
root@saltsshbox:~
ãŸãã¯ããã«å
·äœçã«ïŒ
root@saltsshbox:~
ãœã«ããã¹ã¿ãŒãã¡ã€ã«ãštop.sls
ããã§ãå¥ã®éèŠãªãã¡ã€ã«/ etc / salt / masterã«ã€ããŠèª¬æããŸãã äžè¬ã«ã salt-masterããã±ãŒãžã«ãã³ãã«ãããŠããã saltãç¶æ
ãšãã©ãŒããŒã¿ãæ€çŽ¢ããããã€ãã®éèŠãªãã°ãªãã·ã§ã³ãšãã£ã¬ã¯ããªãå®çŸ©ããŸãã ç¶æ
ã®ããã©ã«ãã®ãã£ã¬ã¯ããªã¯/ srv / saltã§ãã ãããå®éã«ã¯ããããã®äŸãå«ããŠãç°ãªãæ§é ã䜿çšããæ¹ãåççã§ãã
/ etc / salt / masterïŒ
state_verbose: False state_output: mixed file_roots: base: - /srv/saltstack/salt pillar_roots: base: - /srv/saltstack/pillar
state_verboseããã³state_outputã¯ãç»é¢ã«å®è¡ã¹ããŒã¿ã¹ã衚瀺ããããã®å€æ°ã§ãã ç§ã®æèŠã§ã¯ããã®ãããªçµã¿åãããæãå®çšçã§ãããå®éšããããšããå§ãããŸãã
file_rootsãšpillar_rootsã¯ãããããå·ãšæ±ã®ããŒã¿ãžã®ãã¹ã瀺ããŸãã
éèŠïŒ ãããã®ãã¹ã«ã¯ããã€ããããŸãã ããŸããŸãªç°å¢ãããŸããŸãªããŒã¿ãªã©ã®ååã«åŸã£ãŠ ãªã©ããã ããããã¯ãã«ãç°å¢ç°å¢ã®ã»ããã¢ããã«é¢ããå¥ã®èšäºã®ãããã¯ã§ããåå¿è
ã¯ãsaltãããããèŠã€ããããã«ç¶æ
ãã¡ã€ã«ã眮ãå Žæãç¥ãå¿
èŠããããŸãã
ããã«ããããã®åãã£ã¬ã¯ããªïŒ file_rootsããã³pillar_roots ïŒã§ãsaltã¯top.slsãã¡ã€ã«ãæ€çŽ¢ãã saltãã¡ã€ã«ãåŠçããããã®ãããªãããžãã¯ã決å®ããŸãã
ç§ãã¡ã®å ŽåïŒ
/srv/saltstack/salt/top.slsïŒ
base: '*': - common - timezone 'testserver': - chrony
ã€ãŸãããã¹ãŠã®ãã¹ãã«å
±éã®ç¶æ
ãšã¿ã€ã ãŸãŒã³ãé©çšããã ãã¹ããµãŒããŒã«ãchrony ïŒæéåæãµãŒãã¹ïŒãé©çšãããŸãã
æ±ã«ã¯ãtop.slsãã¡ã€ã«ãå¿
èŠã§ãã ã©ã®é åºã§ã©ã®ããã«å€æ°ãå²ãåœãŠãããããæ±ºå®ããŸãã
/srv/saltstack/pillar/top.slsïŒ
base: '*': - timezone 'testserver': - hosts/testserver
ç§ãã¡ã®å Žåããã®ãã¡ã€ã«ã¯éåžžã«åçŽã§ããtimezone.slsãã¡ã€ã«ã®ãã¹ãŠã®å€æ°ãå«ããããšãšã testserverã®hosts / testserverãã¡ã€ã«ã®å€æ°ãæ¥ç¶ããããšã ãã瀺ãããŠããŸããããã®åçŽãã¯åŒ·åãªæŠå¿µãé ããŠããŸãã 倿°ã¯ä»»æã®ç°å¢ã«å²ãåœãŠãããšãã§ããŸãã 確ãã«ã倿°ã®ãªãŒããŒã©ãããšããŒãžïŒå€æ°ã®ãªãŒããŒã©ã€ããšããŒãžïŒã¯å¥ã®ãããã¯ã§ããä»ã®ãšãããåªå
床ã¯äžããäžã«äžãããããšèšããŸãã ã€ãŸã ããã§ãhosts / testserver.slsãã¡ã€ã«ã«ã¿ã€ã ãŸãŒã³ãæã€å€æ°ãããã°ãæå©ã«ãªããŸãã
top.slsãã¡ã€ã«ã§ã¯ããã¹ãŠã.slsæ¡åŒµåãªãã§æå®ãããŸãã
å¡©ã®ç¶æ
ã§äœæ¥ãã
ç°¡åãªç¶æ
ã«é²ã¿ãŸãããã
/srv/saltstack/salt/packages.sls ïŒ
ã芧ã®ãšãããããã§ã¯jinjaãšgrainã®äž¡æ¹ãšpkgã¢ãžã¥ãŒã«èªäœã䜿çšããŸããã
ãã®ç¶æ
ããã¹ãã¢ãŒãã§é©çšããŠã¿ãŸãããã
root@saltsshbox:/srv/saltstack# salt-ssh testserver state.sls packages test=true [INFO ] Fetching file from saltenv 'base', ** done ** 'packages.sls' testserver: Name: basepackages - Function: pkg.installed - Result: Differs Summary for testserver
ãããŠå®éã«ã¯ïŒ
root@saltsshbox:/srv/saltstack# salt-ssh testserver state.sls packages [INFO ] Fetching file from saltenv 'base', ** skipped ** latest already in cache 'salt://packages.sls' testserver: Name: basepackages - Function: pkg.installed - Result: Changed Summary for testserver ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1
å¡©æ±ãŸãã¯å€æ°
次ã«éèŠãªãªã³ã¯ã¯Pillarã§ãã ãã®ãããSaltStack倿°ã§ã¯ããªã¢ãŒãã·ã¹ãã ã®ãŠã£ã¶ãŒãã«ãã£ãŠèšå®ããããã¹ãŠã®å€æ°ãåŒã³åºãããŸãã éšåçã«ã¯ããããã¯ãã§ã«äžããããªãã«ããç¥ãããŠããã®ã§ãèŠç¹ããŸã£ããã«é²ãã§ãã ããã
ãã¹ãŠã®æ±ã®ãã¹ãåºæã®å€æ°ãååŸããŸãã
root@saltsshbox:~
Grainsãšåæ§ã«ãåäžã®å€æ°ããªã¯ãšã¹ãã§ããŸãã
salt-ssh testserver pillar.get 'timezone:name'
æ±ã®ããç¶æ
ã䜿çšãã
次ã®ç¶æ
ãèæ
®ããŠãã ããã
/srv/saltstack/salt/timezone.slsïŒ
{%- set timezone = salt['pillar.get']('timezone:name', 'Europe/Dublin') %} {%- set utc = salt['pillar.get']('timezone:utc', True) %} timezone_settings: timezone.system: - name: {{ timezone }} - utc: {{ utc }}
ããã§ã¯ããã©ãŒããã®ããŒã¿ã«åºã¥ããŠå€æ°ãèšå®ããŸãã ãããŠããã®èšèšã§ã¯ïŒ
{%- set timezone = salt['pillar.get']('timezone:name', 'Europe/Dublin') %}
äœããã®çç±ã§å¡©ãPillarããå€ãååŸã§ããªãå Žåã ãšãŒããã/ãããªã³ãããã©ã«ãå€ã§ãã
å®è¡ïŒ root@saltsshbox:/srv/saltstack# salt-ssh testserver state.sls timezone [INFO ] Fetching file from saltenv 'base', ** skipped ** latest already in cache 'salt://timezone.sls' testserver: Name: Europe/Moscow - Function: timezone.system - Result: Changed Summary for testserver ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1
å®ç掻ã®äŸ
ãããŠä»ãã€ãã«ãç§ãã¡ã¯å®ç掻ã®äŸã«å°éããŸããã ç¶æ
æéã®åæãèæ
®ããŠãã ãã-æ
¢æ§ã ããã«ãããŸãïŒ
/srv/saltstack/salt/chrony/init.sls
ããã«ã init.slsã¯ããã©ã«ãã®ã€ã³ããã¯ã¹ã§ãããsaltã¯èªåçã«æ€çŽ¢ããŸãããä»ã®ãã¡ã€ã«ã䜿çšã§ããŸãã
ããã§ã¯ãå¥ã®å
žåçãªãœã«ãã³ã³ã¹ãã©ã¯ãmap.jinjaã玹ä»ããŸãã
/srv/saltstack/salt/chrony/map.jinjaïŒ
{% set chrony = salt['grains.filter_by']({ 'RedHat': { 'pkg': 'chrony', 'conf': '/etc/chrony.conf', 'service': 'chronyd', }, 'Debian': { 'pkg': 'chrony', 'conf': '/etc/chrony/chrony.conf', 'service': 'chrony', }, }, merge=salt['pillar.get']('chrony:lookup')) %}
ãã®ç®çã¯ãã·ã¹ãã ã«å¿
èŠãªéç倿°ã®ã»ãããäœæããããšã§ãããçªç¶å€æ°ãæå®ããå¿
èŠãããå Žåã¯ããã©ãŒããã®å€æ°ãšããŒãžããå¯èœæ§ããããŸãã
次ã¯/srv/saltstack/salt/chrony/init.slsèªäœã§ãïŒ
{% from "chrony/map.jinja" import chrony with context %} chrony: pkg.installed: - name: {{ chrony.pkg }} service: - name: {{ chrony.service }} - enable: True - running - require: - pkg: {{ chrony.pkg }} - file: {{ chrony.conf }} {{ chrony.conf }}: file.managed: - name: {{ chrony.conf }} - source: salt://chrony/files/chrony.conf.jinja - template: jinja - user: root - group: root - mode: 644 - watch_in: - service: {{ chrony.service }} - require: - pkg: {{ chrony.pkg }}
saltïŒ//chrony/files/chrony.conf.jinja jinja圢åŒã¯ãããã§ç¹ã«æ³šæããå¿
èŠããããŸãã
/srv/saltstack/salt/chrony/files/chrony.conf.jinjaïŒ
ãã®ãã³ãã¬ãŒãã§ã¯ãPillarãã倿°ããªã¯ãšã¹ãããŠåŠçããŸãã state.show_slsã䜿çšããŠããã®ç¶æ
ãsaltã«ãã£ãŠã©ã®ããã«èªèããããã確èªã§ããŸãã
salt-ssh testserver state.show_sls chronyãåºåããŸã root@saltsshbox:/srv/saltstack
次ã«ãå®è¡ããŸãã
root@saltsshbox:/srv/saltstack# salt-ssh testserver state.sls chrony testserver: Name: chrony - Function: pkg.installed - Result: Changed Name: /etc/chrony/chrony.conf - Function: file.managed - Result: Changed Name: chrony - Function: service.running - Result: Changed Summary for testserver ------------ Succeeded: 3 (changed=3) Failed: 0 ------------ Total states run: 3
ããã§ãsaltã¯ãé¢é£ããã¢ãžã¥ãŒã«ã®ç·æ°ã«ãã£ãŠå®è¡ããã3ã€ã®ç¶æ
ã«ã€ããŠå ±åããŸãã å床å®è¡ãããšã倿Žãå ããããŠããªãããšã¯æããã§ãã
root@saltsshbox:/srv/saltstack
chronyã®æ§æãã¡ã€ã«ãã©ã®ããã«åœ¢æãããããããã«ç¢ºèªã§ããŸãã
salt-ssh testserver cmd.run 'cat /etc/chrony/chrony.conf'
æåŸã«ã state.highstateã³ãã³ãã«èšåãã䟡å€ããããŸãã
salt-ssh testserver state.highstate
圌女ã¯ãã¹ããµãŒããŒã«ãã¹ãŠã®èŠå®ã®ç¶æ
ãé©çšããŸãã
ãããã«
ããã§ãSaltStackãã³ãã«ã®salt-sshãšã¯äœãããããŠãã®äœ¿ç𿹿³ãåŠã³ãŸããã salt-sshãæ©èœããããã«å¿
èŠãªç°å¢ãæ§ç¯ããéèŠãªç¹åŸŽãåŠã³ãŸããã Vagrantã䜿çšããŠãã¹ãç°å¢ãã»ããã¢ããããŸãã ãããŠãGrainsãStatesãPillarãªã©ãSaltStackã®åºæ¬çãªæŠå¿µã䜿çšããŠå®éšãäœç³»çã«å®æœããŸããã ãŸããåçŽãªãã®ããè€éãªãã®ãŸã§ç¶æ
ãèšè¿°ããæ¹æ³ãåŠã³ãå®éã®äŸã«å°éããããšã§ãããŒã¹ã§ããã«èªååãæ§ç¯ã§ããŸãã
ä»ã®ãšãããã¹ãŠã§ãã ãŸã ããããã®è峿·±ããããã¯ãæ®ã£ãŠããŸããããã®æ
å ±ããã®çŽ æŽãããæ§æç®¡çã·ã¹ãã ã§ã®äœæ¥ãéå§ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
æçšãªæ
å ±ïŒ
best_practices
ãŠã©ãŒã¯ã¹ã«ãŒ
starting_states
æ±
å
¬åŒ
ãã¥ãŒããªã¢ã«