
рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдПред рдЬрдм рд╕реЗ рдореИрдВрдиреЗ Google рдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реАрдЦрд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдИ рдЬрд╛рдП рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреБрдЫ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдХрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ред рдореБрдЭреЗ рдФрд░ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореИрдВ
Vagrant
+
SaltStack
рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдЖрдпрд╛, рдЬрд╣рд╛рдБ
Vagrant
рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдФрд░
SaltStack
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрдиред
Vagrantред
Vagrantfile
рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореИрдиреЗрдЬрд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдорд╢реАрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣ рди рдХреЗрд╡рд▓ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЛ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ "рдкреНрд░рд╛рд╡рдзрд╛рди" рд╕реЗ рднреА рдирд┐рдкрдЯ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдкрд╛рд░реНрд╢реНрд╡рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП
рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рд╡реИрдЧреНрд░рд╛рдВрдд рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдкреНрд░рд╛рд░реВрдк
.box
ред рдмрдХреНрд╕реЗ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ -
https://vagrantcloud.com/ ред рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рдмреАрдЯрд╛ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди, рдмрдХреНрд╕реЗ рдХреЗ "рдЯреВрдЯреЗ" рд▓рд┐рдВрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреАред
Vagrantfile
Vagrantfile
рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╡рд┐рд╡рд░рдг
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореИрдВ рд╕реВрдЪреА рджреВрдВрдЧрд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рд░реНрд╡рд░ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд
SaltStack
рдШрдЯрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛
debian
рдкрд░ рдЪрд▓реЗрдЧрд╛ред
Https://vagrantcloud.com/ рдкрд░ рдЖрдк
.box
рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
config.vm.box = "mokote/debian-7"
рдореИрдВ рдПрдХ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдЕрдкрдирд╛
IP
рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕рд╕реЗ рдЖрдк рдХрдИ рдорд╢реАрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
config.vm.network "private_network", ip: "192.168.56.107"
рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕:
config.vm.provider "virtualbox" do |v| v.name = "demostand" v.memory = 1024 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["setextradata", :id, "--VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] end
рд╣рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ
SaltStack
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрдирд╛рдИ рдЧрдИ рдорд╢реАрди рдкрд░ рддреИрдирд╛рдд рдХреА рдЬрд╛рдПрдЧреАред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
nfs
рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣
VirtualBox shared folders
рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
:nfs => true
, рд▓реЗрдХрд┐рди
root
рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
root
ред
config.vm.synced_folder "salt/roots/", "/srv/" config.vm.synced_folder "~/Development/web/demostand", "/var/www/demostand", id: "vagrant-root", :nfs => true
рдпрд╣
SaltStack
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╣реЛрд╕реНрдЯ рдХреЗ рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
salt.minion_config
- рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
salt.run_highstate = true
- рдорд╢реАрди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреНрд░рд╛рд╡рдзрд╛рди рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
salt.pillar
-
pillar
рднрдВрдбрд╛рд░рдг рд╕реЗ рдбреЗрдЯрд╛ред
config.vm.provision :salt do |salt| salt.minion_config = 'salt/minion' salt.run_highstate = true salt.pillar({ "database" => { "withUser" => true, "name" => "demostand", "password" => "fm2QTqimWUrk" } }) salt.pillar({"projectName" => "demostand"}) end
рдкреВрд░реНрдг
Vagrantfile
рдХреЛ рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
https://github.com/ligser/salt-vagrant-demostand/blob/master/Vagrantfile ред
SaltStack
SaltStack
рдЖрдкрдХреЛ
master
->
minion
рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рддрд╛рдЬрд╛
minion
рд╕рд╛рде
minion
рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рд╡рдзрд╛рди рдмрд┐рдирд╛
master
рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
SaltStack
рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╡рд░рдг рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (
SaltStack
рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП
minion
рд▓рд┐рдП рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ
SaltStack
рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди
SaltStack
рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдереЗред
рдирдордХ / рдорд┐рдирд┐рдпрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
Vagrantfile
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ
salt/minion
рдлрд╝рд╛рдЗрд▓
Vagrantfile
ред рдпрд╣ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдорд╢реАрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрддреНрдпрдВрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ:
file_client: local
ред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ
minion
рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ,
/srv/salt
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛ред
рд░рд╛рдЬреНрдпреЛрдВ
рд╕реНрдерд┐рддрд┐ рдкрд░ рдПрдХ рдкреВрд░реНрдг рдореИрдиреБрдЕрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╣реИ:
http://docs.saltstack.com/en/latest/topics/tutorials/index.html#states ред
рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ
.sls
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛
.sls
рд╣реИред рдЖрдорддреМрд░ рдкрд░
.sls
рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИред
apache: # ID pkg: # - installed #
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХреЙрд▓ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
apache: pkg.installed
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░
ID
рд░рд╛рдЬреНрдп рд╡рд╕реНрддреБ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
apache_pkg: pkg: - name: apache - installed
pkg
рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред
installed
рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
service
- рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ред рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдпрд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
apache2
рд░реЛрдХрдиреЗ рд╡рд╛рд▓рд╛ рд░рд╛рдЬреНрдп:
apache2: service.dead
file
- рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ред
рдЖрдорддреМрд░ рдкрд░,
managed
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ FS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐
ID
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ
name
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
source
- рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓реА рдЧрдИ рд╣реИред
salt://
- рд╕реВрдЪрдХ рдХреЛ
/srv/salt
, рдпрд╛
Vagrantfile
рд╕рд╛рдкреЗрдХреНрд╖:
salt/roots/salt
ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдлрд╝рд╛рдЗрд▓реЗрдВ
jinja
рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдЕрдВрджрд░
pillar
рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
template: jinja
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
template: jinja
рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ
template: jinja
ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
jinja
рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреБрдж
.sls
рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
SaltStack
рд░рд╛рдЬреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
watch_in
рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
require
pkg
рдХреА рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
/etc/nginx/sites-available/default: file.managed: - source: salt://nginx/default - template: jinja - user: root - group: root - mode: 644 - watch_in: - service: nginx
рдбреЗрдЯрд╛
SaltStack
рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВред
pillar
- рдбреЗрдЯрд╛ рдЬреЛ рдХрд┐ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
Vagrantfile
рдореИрдВрдиреЗ
pillar
рдореЗрдВ 2 рдЪрд╛рдмрд┐рдпрд╛рдБ
Vagrantfile
:
database
-
database
рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдиреЗрдо - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдоред
grains
- рд╕реНрдереИрддрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ
minion
рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреА рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрдЧреАред
рдореИрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ
grains
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рдереА, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣
SaltStack
рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ:
http://docs.saltstack.com/en/latest/topics/targeting/grains.html ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рднреА
.sls
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕рдореЗрдВ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{{ }}
- рдЖрдЙрдЯрдкреБрдЯред
{% %}
- рд╕реНрдерд┐рддрд┐рдпрд╛рдВ, рдпрд╛ рдЪрдХреНрд░ред
{{ pillar['database']['name'] }}: {% if (pillar['database']['withUser']) %} mysql_user.present: - host: localhost - password: {{ pillar['database']['password'] }} - require: - service: mysql - pkg: python-mysqldb {% endif %}
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
Vagrantfile
рдореЗрдВ рджрд░реНрдЬ рдореВрд▓реНрдп
[database][name]
,
pillar
рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░
mysql_user.present
рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП
ID
рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
рдорд╛рди
['database']['password']
рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Top.sls
top.sls
- рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ
SaltStack
рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
рдЗрд╕рдореЗрдВ
.sls
рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рддреИрдпрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕
SaltStack
рдФрд░
SaltStack
рдХрд╛ рддреИрдпрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди SaltStack
рдкрд░
GitHub
ред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде
PHP
,
nginx
рдФрд░
mysql
рдПрдХ рд╕рд░реНрд╡рд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
vagrant up
рдЬрдм рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЫрд╡рд┐рдпрд╛рдВ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ
IP
рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╕реНрд╡рдЪрд╛рд▓рди рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рддреИрдирд╛рддреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдФрд░
vagrant up
рдХреЗ рд▓реЙрдиреНрдЪ
vagrant up
ред рдЕрдм рдХрдИ рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рд▓рдЧ рд╕рдХрддреЗ рдереЗ рдЕрдм рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ рдЦреБрдж рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред