├── README ├── files ├── config ├── exports ├── my.cnf ├── nfs └── sudoers ├── manifests └── init.pp └── templates ├── agent.properties ├── hosts ├── network └── resolv.conf /README: -------------------------------------------------------------------------------- 1 | This is the CloudStack puppet manifest. 2 | The original location for this is: 3 | http://github.com/CloudStack/puppet-cloudstack 4 | 5 | 6 | To the extent that this manifest is copyrightable (and that is questionable, as configurations generally aren't) it is licensed under the GPLv3 or at your option any later version. 7 | 8 | For problems or help, please send messages on: 9 | https://lists.sourceforge.net/lists/listinfo/cloudstack-devel 10 | 11 | Test Plan: 12 | So this should start from easiest submodules to most complex. 13 | So I am testing in this order: 14 | 15 | NFS server: 16 | (Can I successfully add primary and secondary storage to an existing cloudstack instance) 17 | 18 | Management Server: 19 | Do the packages get installed properly (repos setup?) 20 | Once installed does database get provisioned 21 | Once database provisioned does UI come up? 22 | 23 | Agent: 24 | Soooo much to test here.....basically does it work. 25 | 26 | -------------------------------------------------------------------------------- /files/config: -------------------------------------------------------------------------------- 1 | # This file controls the state of SELinux on the system. 2 | # SELINUX= can take one of these three values: 3 | # enforcing - SELinux security policy is enforced. 4 | # permissive - SELinux prints warnings instead of enforcing. 5 | # disabled - SELinux is fully disabled. 6 | SELINUX=permissive 7 | # SELINUXTYPE= type of policy in use. Possible values are: 8 | # targeted - Only targeted network daemons are protected. 9 | # strict - Full SELinux protection. 10 | SELINUXTYPE=targeted 11 | -------------------------------------------------------------------------------- /files/exports: -------------------------------------------------------------------------------- 1 | /primary *(rw,async,no_root_squash) 2 | /secondary *(rw,async,no_root_squash) 3 | -------------------------------------------------------------------------------- /files/my.cnf: -------------------------------------------------------------------------------- 1 | [mysqld] 2 | datadir=/var/lib/mysql 3 | innodb_rollback_on_timeout=1 4 | innodb_lock_wait_timeout=600 5 | max_connections=350 6 | socket=/var/lib/mysql/mysql.sock 7 | user=mysql 8 | # Disabling symbolic-links is recommended to prevent assorted security risks 9 | symbolic-links=0 10 | 11 | [mysqld_safe] 12 | log-error=/var/log/mysqld.log 13 | pid-file=/var/run/mysqld/mysqld.pid 14 | -------------------------------------------------------------------------------- /files/nfs: -------------------------------------------------------------------------------- 1 | # 2 | # Define which protocol versions mountd 3 | # will advertise. The values are "no" or "yes" 4 | # with yes being the default 5 | #MOUNTD_NFS_V2="no" 6 | #MOUNTD_NFS_V3="no" 7 | # 8 | # 9 | # Path to remote quota server. See rquotad(8) 10 | #RQUOTAD="/usr/sbin/rpc.rquotad" 11 | # Port rquotad should listen on. 12 | RQUOTAD_PORT=875 13 | # Optinal options passed to rquotad 14 | #RPCRQUOTADOPTS="" 15 | # 16 | # 17 | # Optional arguments passed to in-kernel lockd 18 | #LOCKDARG= 19 | # TCP port rpc.lockd should listen on. 20 | LOCKD_TCPPORT=32803 21 | # UDP port rpc.lockd should listen on. 22 | LOCKD_UDPPORT=32769 23 | # 24 | # 25 | # Optional arguments passed to rpc.nfsd. See rpc.nfsd(8) 26 | # Turn off v2 and v3 protocol support 27 | #RPCNFSDARGS="-N 2 -N 3" 28 | # Turn off v4 protocol support 29 | #RPCNFSDARGS="-N 4" 30 | # Number of nfs server processes to be started. 31 | # The default is 8. 32 | #RPCNFSDCOUNT=8 33 | # Stop the nfsd module from being pre-loaded 34 | #NFSD_MODULE="noload" 35 | # Set V4 grace period in seconds 36 | #NFSD_V4_GRACE=90 37 | # 38 | # 39 | # Optional arguments passed to rpc.mountd. See rpc.mountd(8) 40 | #RPCMOUNTDOPTS="" 41 | # Port rpc.mountd should listen on. 42 | MOUNTD_PORT=892 43 | # 44 | # 45 | # Optional arguments passed to rpc.statd. See rpc.statd(8) 46 | #STATDARG="" 47 | # Port rpc.statd should listen on. 48 | STATD_PORT=662 49 | # Outgoing port statd should used. The default is port 50 | # is random 51 | STATD_OUTGOING_PORT=2020 52 | # Specify callout program 53 | #STATD_HA_CALLOUT="/usr/local/bin/foo" 54 | # 55 | # 56 | # Optional arguments passed to rpc.idmapd. See rpc.idmapd(8) 57 | #RPCIDMAPDARGS="" 58 | # 59 | # Set to turn on Secure NFS mounts. 60 | #SECURE_NFS="yes" 61 | # Optional arguments passed to rpc.gssd. See rpc.gssd(8) 62 | #RPCGSSDARGS="" 63 | # Optional arguments passed to rpc.svcgssd. See rpc.svcgssd(8) 64 | #RPCSVCGSSDARGS="" 65 | # 66 | # To enable RDMA support on the server by setting this to 67 | # the port the server should listen on 68 | #RDMA_PORT=20049 69 | -------------------------------------------------------------------------------- /files/sudoers: -------------------------------------------------------------------------------- 1 | ## Sudoers allows particular users to run various commands as 2 | ## the root user, without needing the root password. 3 | ## 4 | ## Examples are provided at the bottom of the file for collections 5 | ## of related commands, which can then be delegated out to particular 6 | ## users or groups. 7 | ## 8 | ## This file must be edited with the 'visudo' command. 9 | 10 | ## Host Aliases 11 | ## Groups of machines. You may prefer to use hostnames (perhaps using 12 | ## wildcards for entire domains) or IP addresses instead. 13 | # Host_Alias FILESERVERS = fs1, fs2 14 | # Host_Alias MAILSERVERS = smtp, smtp2 15 | 16 | ## User Aliases 17 | ## These aren't often necessary, as you can use regular groups 18 | ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 19 | ## rather than USERALIAS 20 | # User_Alias ADMINS = jsmith, mikem 21 | 22 | 23 | ## Command Aliases 24 | ## These are groups of related commands... 25 | 26 | ## Networking 27 | # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool 28 | 29 | ## Installation and management of software 30 | # Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum 31 | 32 | ## Services 33 | # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig 34 | 35 | ## Updating the locate database 36 | # Cmnd_Alias LOCATE = /usr/bin/updatedb 37 | 38 | ## Storage 39 | # Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount 40 | 41 | ## Delegating permissions 42 | # Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp 43 | 44 | ## Processes 45 | # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall 46 | 47 | ## Drivers 48 | # Cmnd_Alias DRIVERS = /sbin/modprobe 49 | 50 | # Defaults specification 51 | 52 | # 53 | # Disable "ssh hostname sudo ", because it will show the password in clear. 54 | # You have to run "ssh -t hostname sudo ". 55 | # 56 | 57 | Defaults env_reset 58 | Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" 59 | Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" 60 | Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" 61 | Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" 62 | Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" 63 | 64 | Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 65 | 66 | ## Next comes the main part: which users can run what software on 67 | ## which machines (the sudoers file can be shared between multiple 68 | ## systems). 69 | ## Syntax: 70 | ## 71 | ## user MACHINE=COMMANDS 72 | ## 73 | ## The COMMANDS section may have other options added to it. 74 | ## 75 | ## Allow root to run any commands anywhere 76 | root ALL=(ALL) ALL 77 | 78 | ## Allows members of the 'sys' group to run networking, software, 79 | ## service management apps and more. 80 | # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 81 | 82 | ## Allows people in group wheel to run all commands 83 | # %wheel ALL=(ALL) ALL 84 | 85 | ## Same thing without a password 86 | # %wheel ALL=(ALL) NOPASSWD: ALL 87 | 88 | ## Allows members of the users group to mount and unmount the 89 | ## cdrom as root 90 | # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom 91 | 92 | ## Allows members of the users group to shutdown this system 93 | # %users localhost=/sbin/shutdown -h now 94 | 95 | ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) 96 | #includedir /etc/sudoers.d 97 | cloud ALL = NOPASSWD : ALL 98 | -------------------------------------------------------------------------------- /manifests/init.pp: -------------------------------------------------------------------------------- 1 | class cloudstack { 2 | include cloudstack::no_selinux 3 | 4 | case $operatingsystem { 5 | centos,redhat : { 6 | yumrepo{"Cloudstack": 7 | baseurl => "http://yumrepo/repositories/rhel/$operatingsystemrelease/stable/oss/", 8 | name => "CloudStack", 9 | enable => 1, 10 | gpgcheck => 0, 11 | } 12 | } 13 | fedora : { 14 | yumrepo{"Cloudstack": 15 | baseurl => "http://192.168.203.177/foo/", 16 | name => "CloudStack", 17 | enabled => 1, 18 | gpgcheck => 0, 19 | } 20 | 21 | } 22 | 23 | } 24 | file { "/etc/sudoers": 25 | source => "puppet://puppet/cloudstack/sudoers", 26 | mode => 440, 27 | owner => root, 28 | group => root, 29 | } 30 | 31 | file { "/etc/hosts": 32 | content => template("cloudstack/hosts"), 33 | } 34 | 35 | package {wget: ensure => present} ### Not needed after 2.2.9, see bug 11258 36 | ######### DEFINITIONS #################### 37 | 38 | $cs_mgmt_server = "192.168.203.177" 39 | $internaldns1 = "192.168.203.1" 40 | $dns1 = "8.8.8.8" 41 | $cs_agent_netmask = "255.255.255.0" 42 | $cs_sec_storage_nfs_server = "192.168.203.176" 43 | $cs_sec_storage_mnt_point = "/secondary" 44 | $pri_storage_nfs_server = "192.168.203.176" 45 | $pri_storage_mnt_point = "/primary" 46 | $hvtype = "KVM" 47 | $system_tmplt_dl_cmd = "/usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt" 48 | $sysvm_url_kvm = "http://download.cloud.com/releases/2.2.0/systemvm.qcow2.bz2" 49 | $sysvm_url_xen = "http://download.cloud.com/releases/2.2.0/systemvm.vhd.bz2" 50 | 51 | 52 | } 53 | class cloudstack::nfs-common { 54 | #this subclass provides NFS for primary and secondary storage on a single machine. 55 | #this is not production quality - but useful for a POC/demo/dev/test environment. 56 | #you will either want to significantly alter or use your own nfs class 57 | 58 | include cloudstack 59 | 60 | package {nfs-utils: ensure => present} 61 | 62 | service {nfs: 63 | ensure => running, 64 | enable => true, 65 | hasstatus => true, 66 | require => [ Service[rpcbind], File["/primary"], File["/secondary"] ], 67 | } 68 | 69 | service {rpcbind: 70 | ensure => running, 71 | enable => true, 72 | hasstatus => true, 73 | } 74 | file {"/primary": 75 | ensure => directory, 76 | mode => 777, 77 | } 78 | file {"/secondary": 79 | ensure => directory, 80 | mode => 777, 81 | } 82 | file {"/etc/sysconfig/nfs": 83 | source => "puppet://puppet/cloudstack/nfs", 84 | notify => Service[nfs], 85 | } 86 | 87 | file {"/etc/exports": 88 | source => "puppet://puppet/cloudstack/exports", 89 | notify => Service[nfs], 90 | } 91 | 92 | iptables {"udp111": 93 | proto => "udp", 94 | dport=> "111", 95 | jump => "ACCEPT", 96 | } 97 | 98 | iptables {"tcp111": 99 | proto => "tcp", 100 | dport => "111", 101 | jump => "ACCEPT", 102 | } 103 | 104 | iptables {"tcp2049": 105 | proto => "tcp", 106 | dport => "2049", 107 | jump => "ACCEPT", 108 | } 109 | 110 | iptables {"tcp32803": 111 | proto => "tcp", 112 | dport => "32803", 113 | jump => "ACCEPT", 114 | } 115 | 116 | iptables {"udp32769": 117 | proto => "udp", 118 | dport => "32769", 119 | jump => "ACCEPT", 120 | } 121 | 122 | iptables {"tcp892": 123 | proto => "tcp", 124 | dport => "892", 125 | jump => "ACCEPT", 126 | } 127 | 128 | iptables {"udp892": 129 | proto => "udp", 130 | dport => "892", 131 | jump => "ACCEPT", 132 | } 133 | 134 | iptables {"tcp875": 135 | proto => "tcp", 136 | dport => "875", 137 | jump => "ACCEPT", 138 | } 139 | 140 | iptables {"udp875": 141 | proto => "udp", 142 | dport => "875", 143 | jump => "ACCEPT", 144 | } 145 | 146 | iptables {"tcp662": 147 | proto => "tcp", 148 | dport => "662", 149 | jump => "ACCEPT", 150 | } 151 | 152 | iptables {"udp662": 153 | proto => "udp", 154 | dport => "662", 155 | jump => "ACCEPT", 156 | } 157 | 158 | } 159 | 160 | 161 | class cloudstack::kvmagent { 162 | include cloudstack 163 | package {cloud-agent : ensure => present, require => Yumrepo[CloudStack], } 164 | 165 | exec { "cloud-setup-agent": 166 | creates => "/var/log/cloud/setupAgent.log", 167 | requires => [ Package[cloud-agent], 168 | Package[NetworkManager], 169 | File["/etc/sudoers"], 170 | File["/etc/cloud/agent/agent.properties"], 171 | File["/etc/sysconfig/network-scripts/ifcfg-eth0"], 172 | File["/etc/hosts"], 173 | File["/etc/sysconfig/network"], 174 | File["/etc/resolv.conf"], 175 | Service["network"], ] 176 | } 177 | 178 | 179 | file { "/etc/cloud/agent/agent.properties": 180 | ensure => present, 181 | requires => Package[cloud-agent], 182 | content => template("cloudstack/agent.properties") 183 | } 184 | 185 | ######## AGENT NETWORKING SECTION SEE NOTES BEFORE END OF NETWORKING SECTION ############ 186 | 187 | file { "/etc/sysconfig/network-scripts/ifcfg-eth0": 188 | content => template("cloudstack/ifcfg-eth0"), 189 | } 190 | 191 | 192 | service { network: 193 | ensure => running, 194 | enabed => true, 195 | hasstatus => true, ## Is that really true? 196 | requires => [ Package[NetworkManager], File["/etc/sysconfig/network-scripts/ifcfg-eth0"], ] 197 | } 198 | 199 | package { NetworkManager: 200 | ensure => absent, 201 | } 202 | 203 | file { "/etc/sysconfig/network": 204 | content => template("cloudstack/network"), 205 | } 206 | 207 | 208 | file { "/etc/resolv.conf": 209 | content => template("cloudstack/resolv.conf"), 210 | } 211 | 212 | ### NOTES: This assumes a single NIC (eth0) will be used for CloudStack and ensures that the 213 | ### config file is correct syntactically and in place 214 | ### If you wish to use more than a single NIC you will need to edit both the agent.properties 215 | ### file and add additional ifcfg-ethX files to this configuration. 216 | ### 217 | 218 | ######### END AGENT NETWORKING ############################################################## 219 | 220 | 221 | ########## Also need to create a agent.properties stanza, and likely need to define 222 | ########## IP address or name for management server - and do agent.properties as a template. 223 | ############ Need to do something that will take care of IP configuration 224 | ############ Need to do something that will take care of KVM - make sure module is loaded - need to define what tests cloud-setup-agent actually runs to test for KVM and ensure that we do those tests as well, and rectify if needed (do a reboot?? ) 225 | ### Need to handle hostname addition as well - and probably a def gw and ensuring that DNS is set since 226 | ### we are so backwards as to not use DHCP 227 | 228 | 229 | ### IP Address thoughts: 230 | ### Use a template based on /etc/sysconfig/ifcfg-ethX 231 | ### By default only specify eth0, with liberal commenting about what to do in the event of needing to change our simple configuration (e.g. edit agent.properites, add additional network config, etc. 232 | ### Require network to be enable 233 | ### Require NetworkManager be disabled (Is it installed by default, do we need to do a case?, perhaps we 'ensure absent') 234 | ### Make sure we cycle network after deploying a ifcfg. 235 | ### Do we handle creation of cloud-br0? I am thinking not, seems like there's a lot of magic there. For now, lets stay away from that. 236 | 237 | } 238 | 239 | class cloudstack::mgmt { 240 | include cloudstack 241 | 242 | 243 | package {cloud-client : ensure => present, require => Yumrepo[CloudStack], } 244 | 245 | exec { "cloud-setup-management": 246 | onlyif => [ "test -e /var/lib/mysql/cloud", 247 | "test -e /etc/sysconfig/cloud-management", 248 | "service cloud-management status |grep -v running" ] 249 | #The last check won't work on systemd, need to come up with some alternative 250 | } 251 | ########## Requires the iptables module from: http://github.com/camptocamp/puppet-iptables/ 252 | 253 | iptables { "http": 254 | proto => "tcp", 255 | dport=> "80", 256 | jump => "ACCEPT",} 257 | 258 | iptables { "http-alt": 259 | proto => "tcp", 260 | dport=> "8080", 261 | jump => "ACCEPT", 262 | } 263 | 264 | # iptables { "port-8096": ###### this is the unauthenticated API interface - should be locked down by default. 265 | # proto => "tcp", 266 | # dport=> "8096", 267 | # jump => "ACCEPT", 268 | # } 269 | 270 | iptables { "port-8250": ############ Think this is for cpvm, but check for certain. 271 | proto => "tcp", 272 | dport=> "8250", 273 | jump => "ACCEPT", 274 | } 275 | 276 | iptables { "port-9090": ####################### find out what this does in cloudstack 277 | proto => "tcp", 278 | dport=> "9090", 279 | jump => "ACCEPT", 280 | } 281 | 282 | 283 | #################### MYSQL SECTION - can likely be removed if you are using puppet in production and use your own mysql module ######### 284 | # wondering if i should do this as a separate subclass 285 | 286 | package {mysql-server : ensure => present } 287 | 288 | service {mysqld: 289 | name => $operatingsystem? { 290 | default => "mysqld", 291 | ubuntu => "mysql", 292 | }, 293 | ensure => running, 294 | enable => true, 295 | hasstatus => true, 296 | require => Package[mysql-server], 297 | } 298 | file {"/etc/my.cnf": 299 | source => "puppet://puppet/cloudstack/my.cnf", 300 | notify => Service[mysqld], 301 | } 302 | 303 | exec {"cloud-setup-databases cloud:dbpassword@localhost --deploy-as=root": 304 | creates => "/var/lib/mysql/cloud", 305 | } 306 | 307 | ################## END MYSQL SECTION ################################################################################################### 308 | 309 | ################## CloudStack configuration section #################################################################################### 310 | 311 | ########## Zone ################ 312 | 313 | exec {"curl 'http://localhost:8096/?command=createZone&dns1=8.8.8.8&internaldns1=8.8.8.8&name=Zone1&networktype=Basic'": 314 | onlyif => "curl 'http://localhost:8096/?command=listZones&available=true' | grep -v Zone1" 315 | } 316 | 317 | ########## Pod ################# 318 | 319 | exec {"curl 'http://localhost:8096?command=createPod&gateway=192.168.203.1&name=Pod1&netmask=255.255.255.0&startip=192.168.203.200&zoneid=4&endip=192.168.203.230'": 320 | onlyif => ["curl 'http://localhost:8096/?command=listZones&available=true' | grep Zone1", 321 | "curl 'http://localhost:8096/?command=listPods' | grep -v Pod1", ] 322 | } 323 | 324 | ########## Cluster ############## 325 | 326 | exec {"curl 'http://localhost:8096?command=addCluster&clustername=Cluster1&clustertype=CloudManaged&hypervisor=${hvtype}&zoneid=4&podid=1'": 327 | onlyif => ["curl 'http://localhost:8096/?command=listZones&available=true' | grep Zone1", 328 | "curl 'http://localhost:8096/?command=listPods' | grep Pod1", 329 | "curl 'http://localhost:8096/?command=listClusters' | grep -v Cluster1" ], 330 | } 331 | 332 | ########## SecStorage ############ 333 | ## NOTE: This will take a LONG time to run. Go get a cup of coffee 334 | exec { "mount ${cloudstack::cs_sec_storage_nfs_server}:${cloudstack::cs_sec_storage_mnt_point} /mnt ; 335 | ${cloudstack::system_tmplt_dl_cmd} -m /mnt -u ${cloudstack::sysvm_url_kvm} -h kvm -F ; 336 | curl 'http://localhost:8096/?command=addSecondaryStorage&url=nfs://${cloudstack::cs_sec_storage_nfs_server}${cloudstack::cs_sec_storage_mnt_point}&zoneid=1' ; 337 | touch /var/lib/cloud/ssvm": 338 | onlyif => ["test ! -e /var/lib/cloud/ssvm", "curl 'http://localhost:8096/?command=listZones&available=true' | grep Zone1",] 339 | } 340 | 341 | ########## Primary Storage ######## 342 | ### THis needs to add a check for a host to have been added 343 | exec { "curl 'http://localhost:8096/?command=createStoragePool&name=PStorage&url=nfs://${cloudstack::pri_storage_nfs_server}${cloudstack::pri_storage_mnt_point}&zoneid=4&podid=1'": 344 | onlyif => ["curl 'http://localhost:8096/?command=listPods' | grep Pod1", 345 | "curl 'http://localhost:8096/?command=listStoragePools' | grep -v PStorage", ] 346 | } 347 | 348 | 349 | } 350 | 351 | class cloudstack::no_selinux { 352 | file { "/etc/selinux/config": 353 | source => "puppet://puppet/cloudstack/config", 354 | } 355 | exec { "/usr/sbin/setenforce 0": 356 | onlyif => "/usr/sbin/getenforce | grep Enforcing", 357 | } 358 | } 359 | -------------------------------------------------------------------------------- /templates/agent.properties: -------------------------------------------------------------------------------- 1 | # Sample configuration file for VMOPS agent 2 | 3 | #resource= the java class, which agent load to execute 4 | resource=com.cloud.agent.resource.computing.LibvirtComputingResource 5 | 6 | #workers= number of threads running in agent 7 | workers=5 8 | 9 | #host= The IP address of management server 10 | host=<%= cs_mgmt_server => 11 | 12 | #port = The port management server listening on, default is 8250 13 | port=8250 14 | 15 | #pod= The pod, which agent belonged to 16 | pod=default 17 | 18 | #zone= The zone, which agent belonged to 19 | zone=default 20 | 21 | #private.network.device= the private nic device 22 | # if this is commented, it is autodetected on service startup 23 | # private.network.device=cloudbr0 24 | 25 | #public.network.device= the public nic device 26 | # if this is commented, it is autodetected on service startup 27 | # public.network.device=cloudbr0 28 | 29 | #guid= a GUID to identify the agent 30 | 31 | -------------------------------------------------------------------------------- /templates/hosts: -------------------------------------------------------------------------------- 1 | 127.0.0.1 <%= fqdn %> <%= hostname %> localhost.localdomain localhost 2 | -------------------------------------------------------------------------------- /templates/network: -------------------------------------------------------------------------------- 1 | NETWORKING=yes 2 | HOSTNAME=<%= fqdn %> 3 | 4 | -------------------------------------------------------------------------------- /templates/resolv.conf: -------------------------------------------------------------------------------- 1 | search <%= domain %> 2 | nameserver <%= dns1 %> 3 | nameserver <%= dns2 %> 4 | --------------------------------------------------------------------------------